rotarary chasing led
7 berichten
• Pagina 1 van 1
rotarary chasing led
hallo ik heb een chasing led gemaakt middels een rotary encoder
nu is linksom geen probleem en rechtsom gaat alleen led 6 branden..
ik heb geen idee..
vr gr Edwin
nu is linksom geen probleem en rechtsom gaat alleen led 6 branden..
ik heb geen idee..
- Code: Alles selecteren
/* interrupt routine for Rotary Encoders
tested with Noble RE0124PVB 17.7FINB-24 http://www.nobleusa.com/pdf/xre.pdf - available at pollin.de
and a few others, seems pretty universal
The average rotary encoder has three pins, seen from front: A C B
Clockwise rotation A(on)->B(on)->A(off)->B(off)
CounterCW rotation B(on)->A(on)->B(off)->A(off)
and may be a push switch with another two pins, pulled low at pin 8 in this case
raf@synapps.de 20120107
*/
// usually the rotary encoders three pins have the ground pin in the middle
enum PinAssignments {
encoderPinA = 2, // right
encoderPinB = 3, // left
clearButton = 4 // another two pins
};
volatile unsigned int encoderPos = 0; // a counter for the dial
unsigned int lastReportedPos = 1; // change management
static boolean rotating=false; // debounce management
// interrupt service routine vars
boolean A_set = false;
boolean B_set = false;
int led1 = 5;
int led2 = 6;
int led3 = 7;
int led4 = 8;
int led5 = 9;
int led6 = 10;
void setup() {
{
pinMode(led1,OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
pinMode(encoderPinA, INPUT);
pinMode(encoderPinB, INPUT);
pinMode(clearButton, INPUT);
// turn on pullup resistors
digitalWrite(encoderPinA, HIGH);
digitalWrite(encoderPinB, HIGH);
digitalWrite(clearButton, HIGH);
// encoder pin on interrupt 0 (pin 2)
attachInterrupt(0, doEncoderA, CHANGE);
// encoder pin on interrupt 1 (pin 3)
attachInterrupt(1, doEncoderB, CHANGE);
Serial.begin(9600); // output
}
// main loop, work is done by interrupt service routines, this one only prints stuff
void loop() {
rotating = true; // reset the debouncer
if (lastReportedPos != encoderPos ) {
//Serial.print("Index:");
//
if (encoderPos == 0){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if (encoderPos == 1){
digitalWrite(led1,HIGH);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(encoderPos == 2){
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(encoderPos == 3){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(encoderPos == 4){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
digitalWrite(led5,LOW);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(encoderPos == 5){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
digitalWrite(led6,LOW);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(encoderPos == 6){
digitalWrite(led1,LOW);
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
digitalWrite(led4,LOW);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
Serial.println(encoderPos, DEC);
lastReportedPos = encoderPos;
}
if
(lastReportedPos >= 7){
encoderPos = 1;
// lastReportedPos = encoderPos;
}
if
(lastReportedPos <= 0){
encoderPos = 6;
// lastReportedPos = encoderPos;
}
}
if (digitalRead(clearButton) == LOW ) {
encoderPos = 0;
}
}
// Interrupt on A changing state
void doEncoderA(){
// debounce
if ( rotating ) delay (1); // wait a little until the bouncing is done
// Test transition, did things really change?
if( digitalRead(encoderPinA) != A_set ) { // debounce once more
A_set = !A_set;
// adjust counter + if A leads B
if ( A_set && !B_set )
encoderPos += 1;
rotating = false; // no more debouncing until loop() hits again
}
}
// Interrupt on B changing state, same as A above
void doEncoderB(){
if ( rotating ) delay (1);
if( digitalRead(encoderPinB) != B_set ) {
B_set = !B_set;
// adjust counter - 1 if B leads A
if( B_set && !A_set )
encoderPos -= 1;
rotating = false;
}
}
vr gr Edwin
Advertisement
Re: rotarary chasing led
dat komt doordat je unsigned gebruikt hebt.
al die debounce is overigens niet nodig hoor, dat doet de encoder toch wel.
al die debounce is overigens niet nodig hoor, dat doet de encoder toch wel.
paul deelen
shooter@home.nl
shooter@home.nl
Re: rotarary chasing led
bedankt voor je antwoord.
en ik heb al is heftig aan het googlen geweest maar signed maken is niet simpel... toch?
kun je me een beetje in de goede richting sturen?
en ik heb al is heftig aan het googlen geweest maar signed maken is niet simpel... toch?
kun je me een beetje in de goede richting sturen?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: rotarary chasing led
Woordje unsigned weglaten
Re: rotarary chasing led
AHHHH ja idd pff (retroblond)
maar als ik dat weglaat kan ik niet retour roteren.. en DAT was eigenlijk wel de bedoeling...
maar als ik dat weglaat kan ik niet retour roteren.. en DAT was eigenlijk wel de bedoeling...
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: rotarary chasing led
Geen idee. Heb ook niet naar de code gekeken... en ook ff geen tijd voor
Re: rotarary chasing led
Die code kom ik op meerdere plaatsen tegen, en anderen hebben er ook problemen mee.
Dit zou de bron kunnen zijn: https://github.com/jandrieu/Rotary/blob/master/rotary_test/rotary_test.ino.
Mijn voorstel is om die code te vergeten, en een werkende library te nemen zoals deze: https://www.pjrc.com/teensy/td_libs_Encoder.html.
Wat dit is weet ik niet: http://playground.arduino.cc/Main/RotaryEncoders.
Dit zou de bron kunnen zijn: https://github.com/jandrieu/Rotary/blob/master/rotary_test/rotary_test.ino.
Mijn voorstel is om die code te vergeten, en een werkende library te nemen zoals deze: https://www.pjrc.com/teensy/td_libs_Encoder.html.
Wat dit is weet ik niet: http://playground.arduino.cc/Main/RotaryEncoders.
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten