Étape 1: Yeux rouges
Le sac est celui donné à chaque employé pour décorer. J’ai utilisé un jouet robot Android de Google. La tête se détache. J’ai percé sur les yeux et inséré tri-color LED de Radio Shack (http://www.radioshack.com/product/index.jsp?productId=3020765).
Il y a un câble en nappe avec en passant par un trou dans le sac et un trou dans le couvercle pour vous connecter à la carte prototype reliée à l’Arduino (voir étape suivante). Le câble comme faite à l’aide d’un câble en nappe (https://www.adafruit.com/products/793) et puis les LEDs soudées en après décapage une extrémité des câbles ruban et y attacher les connecteurs femelles nues (http://www.pololu.com/catalog/product/1930), avec certaines gaines thermorétractables utilisé pour garder les fils de court-circuit.
Code est ci-dessous :
/*************************************************************
Flasque arrière
Goupilles de fonction par Ch. Un badge par du chapitre B
Direction D12 D13
PWM D3 D11
Brake D9 D8
Cours télédétection A0 A1
code de l’écran LCD de http://www.arduino.cc/playground/Learning/SparkFunSerLCD
Écran LCD est de 20 x 4
pour Leonardo il fallait utiliser Serial1 classe
*************************************************************/
const int IRthreshold = 180 ;
const int IRPin = 3 ; Valeur de lecture IR sur analogique 3
const int SignalPin = A2 ; Envoyer le signal sonore Arduino
const int RedPin = A4 ;
const int BluePin = A5 ;
cardsensed booléen = false ;
LEDflag booléen = false ;
les variables suivantes sont longues de parce que le temps, mesuré en millisecondes,
deviendra rapidement un plus grand nombre que peuvent être stockés dans un int.
long timestamp = 0 ; utilisée pour garder une trace de combien de temps capteur IR bloqué
const long MotorDelay = 500 ; garder le moteur va pendant une demi-seconde après que capteur IR se dégage
const long LEDdelay = 4000 ;
int val = 0 ;
int count = 0 ;
void setup()
{
Canal d’installation A
pinMode (sortie 12,) ; Broche initiés moteur canal
pinMode (sortie 9) ; Broche initiés frein canal
pinMode (SignalPin, sortie) ;
digitalWrite (SignalPin, basse) ;
pinMode (RedPin, sortie) ;
pinMode (BluePin, sortie) ;
Serial1.Begin(9600) ;
Delay(1000) ; temps de s’installer, juste au cas où
clearLCD() ;
backlightOn() ;
selectLineOne() ;
Delay(10) ;
Serial1.Print ("Happy Valentines Day") ;
Delay(10) ;
selectLineTwo() ;
Serial1.Print ("CCE!") ;
Delay(10) ;
selectLineThree() ;
Serial1.Print ("J’ai maintenant:") ;
Delay(10) ;
blueLED() ; bleu au départ
}
void loop()
{
Val = analogRead(IRPin) ;
Si (val > IRthreshold) / / chemin d’accès bloqués
{
cardsensed = true ;
LEDflag = true ;
timestamp = millis() ;
avant @ pleine vitesse
digitalWrite (12, HIGH) ; Établit l’orientation vers l’avant du canal A
digitalWrite (9, faible) ; Débloquer le frein de chaîne A
analogWrite (3, 255) ; Fait tourner le moteur sur le canal A à pleine vitesse
redLED() ; en rouge quand il a obtenu une carte
}
if(Val < IRthreshold)
{
if(cardsensed)
{
Si ((millis()-timestamp) > = MotorDelay)
{
cardsensed = false ;
analogWrite(3,0) ; Éteignez le moteur, mais laissez-le donc pas de frein de la côte
Count ++ ;
selectLineFour() ;
Serial1.Print(Count) ;
Serial1.Print ("Valentines") ;
digitalWrite (SignalPin, élevé) ;
Delay(20) ;
digitalWrite (SignalPin, basse) ;
}
}
if(LEDflag)
{
Si ((millis()-timestamp) > = LEDdelay)
{
LEDflag = false ;
blueLED() ; Retour à être triste et bleu
}
}
}
}
///////////////////////////// FUNCTIONS ////////////////////////////////
void selectLineOne() {//puts le curseur au char ligne 0 0.
Serial1.Write(0xFE) ; drapeau de la commande
Serial1.Write(128) ; position
}
void selectLineTwo() {//puts le curseur au char ligne 2 0.
Serial1.Write(0xFE) ; drapeau de la commande
Serial1.Write(192) ; position
}
void selectLineThree() {//puts le curseur au char ligne 3 0.
Serial1.Write(0xFE) ; drapeau de la commande
Serial1.Write(148) ; position
}
void selectLineFour() {//puts le curseur au char ligne 4 0.
Serial1.Write(0xFE) ; drapeau de la commande
Serial1.Write(212) ; position
}
void goTo (int position) {//position = ligne 1:0-19, ligne 2: 20-39, etc., 79 + par défaut à 0
Si (position < 20) {Serial1.write(0xFE) ; drapeau de la commande
Serial1.Write((position+128)) ; position
} ElseIf (position < 40){Serial1.write(0xFE) ; drapeau de la commande
Serial1.Write((position+128+64-20)) ; position
} ElseIf (position < 60){Serial1.write(0xFE) ; drapeau de la commande
Serial1.Write((position+128+20-40)) ; position
} ElseIf (position < 80){Serial1.write(0xFE) ; drapeau de la commande
Serial1.Write((position+128+84-60)) ; position
} else {goTo(0);}
}
void clearLCD() {}
Serial1.Write(0xFE) ; drapeau de la commande
Serial1.Write(0x01) ; Désactivez la commande.
}
void backlightOn() {//turns le rétro-éclairage
Serial1.Write(0x7C) ; drapeau de la commande pour des trucs de rétro-éclairage
Serial1.Write(157) ; intensité lumineuse.
}
void backlightOff() {//turns désactiver le rétroéclairage
Serial1.Write(0x7C) ; drapeau de la commande pour des trucs de rétro-éclairage
Serial1.Write(128) ; éteigne niveau pour.
}
void backlight50() {//sets le rétro-éclairage à 50 % de luminosité
Serial1.Write(0x7C) ; drapeau de la commande pour des trucs de rétro-éclairage
Serial1.Write(143) ; éteigne niveau pour.
}
void serCommand() {//a générales fonction à appeler l’indicateur de commande pour la délivrance de toutes les autres commandes
Serial1.Write(0xFE) ;
}
void blueLED() {}
digitalWrite (BluePin, faible) ; inverse d’habitude depuis commun
digitalWrite (RedPin, élevé) ; anode
}
void redLED() {}
digitalWrite (BluePin, élevé) ;
digitalWrite (RedPin, basse) ;
}