Étape 4: Le Code de l’Arduino
Voici donc le code pour faire réellement ce projet fonctionne, assurez-vous que vous avez téléchargé la bibliothèque de télécommande IR premier ou il ne fonctionnera pas.
Explication rapide du code :
Lorsque le bouton est appuyé la LED rouge s’allume et l’arduino attendra ensuite pour n’importe quel signal IR à venir. Lorsqu’un signal est détecté que le signal est enregistré et est ensuite utilisé pour basculer le servo.
Le servo est configuré pour être toujours à 90 degrés jusqu'à ce que le signal est reçu, puis déplacé à soit 180 degrés ou à 1 degré, ce qui rend le palonnier a frappé le fil, allumage et extinction de la lumière.
#include < IRremote.h >
#include < Servo.h >
int RECV_PIN = 11 ;
IRrecv irrecv(RECV_PIN) ;
résultats de la decode_results ;
unsigned long CurrentValue = 0 ;
unsigned long StoredCode = 0 ;
const int buttonPin = 6 ; le nombre de la tige poussoir
const int ledPin = 4 ; le nombre de l’axe de la LED
const int outputPin = 3 ; le nombre de la broche de sortie LED
const int servoPin = 9 ;
int enableOutput = 0 ;
buttonState int = 0 ; variable pour la lecture de l’état de bouton poussoir
int RecordState = 0 ; est le récepteur en mode record
int outputState = 1 ; soit la sortie allumée ou éteinte
Servo myservo ;
int pos = 0 ;
void setup()
{
myservo.Attach(9) ;
Serial.Begin(9600) ;
irrecv.enableIRIn() ; Démarrer le récepteur
pinMode (ledPin, sortie) ; initialiser les broches de la LED en tant que sortie :
pinMode (outputPin, sortie) ; initialiser la tige poussoir comme entrée :
pinMode (buttonPin, entrée) ; initialiser la tige poussoir comme entrée :
}
void loop()
{buttonState = digitalRead(buttonPin); / / lecture de l’état de la valeur du bouton poussoir :
Si (irrecv.decode (et résultats)) {/ / si un signal est détecté, stocker la valeur
CurrentValue = (results.value) ;
Serial.println ("code reçu") ; affiche stocké le code pour référence
Si la valeur reçue égale la valeur programmée, puis basculer l’état de la sortie
if(CurrentValue == StoredCode) {}
enableOutput = 1 ;
}
Si (RecordState == 1) {/ / si le mode d’enregistrement est activé stocker la valeur actuelle la valeur programmée StoredCode = CurrentValue ;
RecordState = 0 ;
digitalWrite (ledPin, basse) ;
Serial.println(StoredCode) ; affiche stocké le code pour référence
}
Delay(500) ;
irrecv.Resume() ; Recevoir la valeur suivante
}
d’autre //if qu'aucun signal n’est détecté, alors la valeur actuelle est 0
{CurrentValue = 0 ;
} Si (buttonState == HIGH) {/ / vérifier si la touche record.
Si c’est le cas, le buttonState est haute :
tandis que (buttonState == HIGH) buttonState = digitalRead(buttonPin) ; Attendez que le bouton pour être libéré digitalWrite (ledPin, HIGH) ; allumer la LED pour indiquer que le mode record est sur
RecordState = 1 ;
}
Si ((outputState == 1) & &(enableOutput==1)) {//set l’état de sortie appropriée Serial.println("State=1,Enable=1") ; //displays stockées code de référence
POS = 1 ;
myservo.Write(POS) ;
Delay(1000) ;
POS = 90 ;
myservo.Write(POS) ;
Delay(15) ;
digitalWrite (outputPin, HIGH) ; outputState = 0 ;
}
sinon si ((outputState == 0) & &(enableOutput==1))
{
Serial.println("State=0,Enable=1") ; affiche stocké le code
POS = 180 ;
myservo.Write(POS) ;
Delay(1000) ;
POS = 90 ;
myservo.Write(POS) ;
Delay(15) ;
digitalWrite (outputPin, faible) ;
outputState = 1 ;
}
enableOutput = 0 ;
}