No estoy muy puesto, quizas la respuesta seria emplear writer o editor similar, y reflejar las lecturas como un pulso de teclado o bien empleando dos leds alumbrando uno u otro en función del sentido de giro del rotary.
Lo de los leds es la forma más sencilla. Solo necesitas una función bastante sencillita que detecta en que sentido gira el encoder. Entonces enciendes un led u otro.
Si lo que quieres es porder verlo en tu ordenador. Entonces en lugar de encender un led, envias el resultado por el puerto serie. Tan sencillo como esto:
en el setup() incluyes: "Serial.begin(115200);" // aquí indicas la velocidad de transmisión.
y para enviar el estado del encoder incluyes en el loop(): "Serial.println(estado);" // aquí enviarás la variable de estado.
Aquí te dejo una función con la que yo leía mi encoder.
Tendrás que mirarte el datasheet del encoder que utilices y modificar la función.
// pins del encoder
const int encoder0PinA = 2;
const int encoder0PinB = 4;
// donde almacenas el valor actual del encoder
int valueEncoder = 0;
int encoderParityPlus = 0;
int encoderParityMinus = 0;
setup(){
// defines las entradas del encoder
pinMode(encoder0PinA, INPUT);
pinMode(encoder0PinB, INPUT);
// creas una interrupción para detectar cuando ha cambiado el estado del enconder, y que se ejecute la función que tu quieras
attachInterrupt(0, doEncoder, CHANGE);
}
loop(){
// aquí va tu programa.
}
// y esta es la función que se ejecuta cuando cambia el estado del encoder
void doEncoder() {
if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
encoderParityPlus++; // esta linea se ejecuta cuando gira a la derecha
if (encoderParityPlus%2 == 0){ valueEncoder++; }
delay(100);
} else {
encoderParityMinus++; // esta linea se ejecuta cuando gira a la izquierda
if (encoderParityMinus%2 == 0){ valueEncoder--; }
delay(100);
}
}
El programita es mio, así que no esperes gran cosa.
Pero yo lo estoy usando en una máquinita y me va de lujo.
Gracias por el aporte, respecto de la hoja de especificaciones del encoder, sinceramente no la tengo. Hace tres años pille en ebay un lote de rotarys y no tengo datos.
Tienen un switch, en realidad tiene tres patillas por un lado y dos patillas por el otro. Entiendo que su funcionamiento es seleccionas un valor con el rotary y con el switch lo fijas, memorizas o como sea.
Me da la impresión que son como estos:
Electrical Characteristics
Output .........................2-bit gray code
Closed Circuit Resistance ......3 ohms maximums
Contact Rating .................1 mA @ 5 VDC
Insulation Resistance ..........10 megohms @ 250 VDC
Dielectric Withstanding Voltage
Sea Level ......................50 VAC minimum
Electrical Travel ..............Continuous
Contact Bounce (15 RPM).........5.0 ms. maximum
RPM (Operating) ................100 maximum
Environmental Characteristics
Operating Temperature Range .....-30 °C to +70 °C (-22 °F to +158 °F)
Storage Temperature Range .......-40 °C to +85 °C (-40 °F to +185 °F)
Humidity.........................MIL-STD-202, Method 103B, Condition B
Vibration .......................30 G
Contact Bounce ..................10~55~10 Hz / 1 min. / Amplitude 1.5 mm
Shock ...........................100 G
Rotational Life..................30,000 cycles minimum
Switch Life .....................20,000 cycles minimum
IP Rating........................IP 40
Mechanical Characteristics
Mechanical Angle ................360 ° continuous
Running Torque ..................30.6 to 204 g-cm (0.42 to 2.83 oz.-in.)
Shaft Side Load (Static) ........2.04 kgf (4.5 lbs.) minimum
Weight ..........................3 gm (0.1 oz.) maximum
Terminals .......................Printed circuit board terminals
Terminals .......................Printed circuit board terminals
Soldering Condition
Wave Soldering...................Sn95.5/Ag2.8/Cu0.7 solder with no-clean flux: 260 °C max. for 3-5 seconds
Hand Soldering...................Not recommended
Hardware.........................Konb
Switch Characteristics
Switch Type .....................Contact Push ON Momentary SPST
Power Rating (Resistive Load) ...10 mA at 5 V DC
Switch Travel....................0.5 +0.4/-0.3 mm
Switch Actuation Force ..........360 +153/-102 gf (5 +2.1/-1.4 oz.-in.)
Este sketch lo saque de una web y a pesar de que tiene los comandos comentados, no se representa en el ordenador. Seria posible, en vez de números, cada pulso representase una letra, por ejemplo A para el sentido horario y B para el sentido antihorario????
Corrijo el sketch funciona bien en la terminal del puerto serie del Arduino, el problema seria lograr lo anteriormente citado, vamos un pulso para el sentido horario y otro para el antihorario y que windows lo interpretara como una letra
No se si existe algun método de identificar, porque estos carecen de numero de serie, marcas o similar.
Según entiendo quieres asignar un caracter a cada sentido de giro para luego enviárselo a windows.
Lo de asignar un caracter si que es posible, pero antes tienes que decodificar el sentido de giro, y luego asignarle la letra a la variable que pretendas utilizar.
En lo de enviárselo a windows no te puedo ayudar, no lo he hecho nunca.
Por lo del datasheet no creo que te tengas que preocupar. Yo he utilizado varios encoders y todos funcionaban igual. Al final solo sin microswitches que se van abriendo y cerrando en un orden u otro. Incluso con un tester lo puedes probar.
Si el código que has encontrado te sirve, entonces ya lo tienes. Solo tienes que enviárselo a windows por el socket que toque y listo.