Ciao a tutti.
Volendo scrivere un programma di lettura di un encoder incrementale ho trovato in rete questo programma
// Wiring connections for my encoder:
// Red : VCC = 5V
// Black: 0V = GND
// White: OUTA = Digital pin 2
// Green: OUTB = Digital pin 3
// With these OUTA/OUTB connections and the interrupt code below,
// clockwise rotation gives positive encoder counts.
const int outA = 2;
const int outB = 3;
volatile long encoder = 0; // declare volatile since modified by interrupt routines
long encoder_save = 0;
byte contatore = 0;
int oldcontatore = 0;
void setup() {
// set encoder pins
pinMode(outA, INPUT_PULLUP);
pinMode(outB, INPUT_PULLUP);
pinMode(10, OUTPUT);
// attach interrupts to pins
// call digitalPinToInterrupt(pin) to be compatible with different Arduino boards
attachInterrupt(digitalPinToInterrupt(outA), outAChange, CHANGE);
attachInterrupt(digitalPinToInterrupt(outB), outBChange, CHANGE);
// initialize serial
Serial.begin(9600);
Serial.println("");
Serial.println("Rotary encoder test.");
}
void loop() {
if (encoder_save != encoder) { // only print if new value
encoder_save = encoder;
contatore = (encoder/10);
if((contatore) ==255){
contatore =254;
}
if((contatore) == 0){
contatore = 1;
}
Serial.print(" asse X ");
Serial.println(contatore);
analogWrite(10, contatore);
}
//delay(100);
}
// interrupt routines
void outAChange() {
// when outA changes, outA==outB means negative direction
encoder += digitalRead(outA) == digitalRead(outB) ? -1 : 1;
}
void outBChange() {
// when outB changes, outA==outB means positive direction
encoder += digitalRead(outA) == digitalRead(outB) ? 1 : -1;
}
io in parte l' ho modificata per comandare in pwm un led e vedere la variazione di luminosita , il programma funziona ma io non sono riuscito a capire certe istruzioni ? 1 : -1 messe in questa riga:
void outBChange() {
// when outB changes, outA==outB means positive direction
encoder += digitalRead(outA) == digitalRead(outB) ? 1 : -1;
}
rslogix52