/* Exemple d'affichage de LEDs contrôlé par télécommande InfraRouge Largement inspiré du "Shift Register Example" disponible ici : http://www.arduino.cc/en/Tutorial/ShiftOut et du "Using an IR Sensor" disponible ici : http://learn.adafruit.com/ir-sensor/using-an-ir-sensor Ce programme lit l'entrée du capteur IR et s'en sert pour afficher des LEDs sélectivement dans une ligne à l'aide d'un registre 74HC595. Créé le 22/09/13 par Frédéric Lassinot */ #include //Pin connecté au latch pin (ST_CP) du 74HC595 const int latchPin = 8; //Pin connecté au clock pin (SH_CP) du 74HC595 const int clockPin = 12; //Pin conencté au Data in (DS) du 74HC595 const int dataPin = 11; // Pin de réception du signal IR const int RECV_PIN = 13; int valeurIR = 0; int position = 0; const int v0 = 16738455; const int v1 = 16724175; const int v2 = 16718055; const int v3 = 16743045; const int v4 = 16716015; const int v5 = 16726215; const int v6 = 16734885; const int v7 = 16728765; const int v8 = 16730805; const int v9 = 16732845; const int vMoins = 16754775; const int vPlus = 16748655; const int vRejeu = 4294967295; IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); // Start the receiver //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); Serial.begin(9600); Serial.println("reset"); // Reinit registerWrite(48, LOW); } void loop() { // Réception du signal if (irrecv.decode(&results)) { // Affichage de la valeur valeurIR = results.value; Serial.print("valeurIR = "); Serial.println(valeurIR); irrecv.resume(); // Receive the next value // Correspondance de la valeur reçue et de la LED à activer switch ( valeurIR ) { case v1: // On affiche la première LED position = 1; break; case v2: position = 2; break; case v3: position = 3; break; case v4: position = 4; break; case v5: position = 5; break; case v6: position = 6; break; case v7: position = 7; break; case v8: position = 8; break; case vMoins: if (position > 1) { position--; } break; case vPlus: if (position < 8) { position++; } break; case vRejeu: // on ne change pas la valeur break; default: break; } // Affichage de la LED // write to the shift register with the correct bit set high: registerWrite(position-1, HIGH); } } // This method sends bits to the shift register: void registerWrite(int pos, int whichState) { Serial.println("registerWrite"); Serial.print("pos = "); Serial.println(pos); Serial.println(); // the bits you want to send byte bitsToSend = 0; // turn off the output so the pins don't light up // while you're shifting bits: digitalWrite(latchPin, LOW); Serial.println("digitalWrite LOW"); // turn on the next highest bit in bitsToSend: // (récupère simplement la puissance de 2 correspondant à pos) bitWrite(bitsToSend, pos, whichState); Serial.println("bitWrite"); Serial.print("bitsToSend = "); Serial.println(bitsToSend); Serial.println(); // shift the bits out: shiftOut(dataPin, clockPin, MSBFIRST, bitsToSend); Serial.println("shiftOut"); // turn on the output so the LEDs can light up: digitalWrite(latchPin, HIGH); Serial.println("digitalWrite HIGH"); }