Stap 1: Rode ogen
De tas is gegeven aan iedere werknemer om te versieren. Ik gebruikte een Android robot speelgoed van Google. Het hoofd komt. Ik geboord uit de ogen en tri-color LEDs van Radio Shack (http://www.radioshack.com/product/index.jsp?productId=3020765) ingevoegd.
Er is een lintkabel met gaan door een gat in de zak en een gat in het deksel op het bord van de prototype aangesloten op de Arduino aansluiten (zie volgende stap). De kabel zoals gemaakt met behulp van een lintkabel (https://www.adafruit.com/products/793), en vervolgens de LEDs gesoldeerd na strippen van één uiteinde van de lint kabels en kale vrouwelijke aansluitingen (http://www.pololu.com/catalog/product/1930), verbonden met een aantal krimpen slangen gebruikt om de draden van kortsluiting.
Code is hieronder:
/*************************************************************
Motor shield
Functie pinnen per Hfdst. Een pinnen per Ch. B
Richting D12 D13
PWM D3 D11
Brake D9 D8
Huidige Sensing A0-A1
LCD-code uit http://www.arduino.cc/playground/Learning/SparkFunSerLCD
LCD is 20 x 4
voor Leonardo behoefte Serial1 klas te gebruiken
*************************************************************/
Const int IRthreshold = 180;
Const int IRPin = 3; Lees IR waarde op analoge 3
Const int SignalPin = A2; signaal afgeven aan geluid Arduino
Const int RedPin = A4;
Const int BluePin = A5;
Boole cardsensed = false;
Boole LEDflag = false;
de volgende variabelen zijn lange van omdat de tijd, in miliseconden, gemeten
snel zal uitgegroeid tot een groter aantal dan kan worden opgeslagen in een int.
lange timestamp = 0; gebruikt om bij te houden hoe lang geblokkeerd IR-sensor
Const lange MotorDelay = 500; houden motor gaan voor een halve seconde nadat IR sensor wordt gewist
Const lange LEDdelay = 4000;
int val = 0;
int count = 0;
VOID Setup
{
Setup kanaal A
pinMode (12, OUTPUT); Ingewijden Motor kanaal A pin
pinMode (9, OUTPUT); Ingewijden rem kanaal A pin
pinMode (SignalPin, uitvoer);
digitalWrite (SignalPin, laag);
pinMode (RedPin, uitvoer);
pinMode (BluePin, uitvoer);
Serial1.begin(9600);
delay(1000); tijd om zich te vestigen in, alleen in geval
clearLCD();
backlightOn();
selectLineOne();
delay(10);
Serial1.Print ("Happy Valentines Day");
delay(10);
selectLineTwo();
Serial1.Print ("CCE!");
delay(10);
selectLineThree();
Serial1.Print ("Ik heb nu:");
delay(10);
blueLED(); blauw op basislijn
}
void loop
{
Val = analogRead(IRPin);
Als (val > IRthreshold) / / pad geblokkeerd
{
cardsensed = true;
LEDflag = true;
timestamp = millis();
toekomen @ volle snelheid
digitalWrite (12, hoge); Stelt voorwaartse richting van kanaal A
digitalWrite (9, laag); Losraken van de rem voor kanaal A
analogWrite (3, 255); Draait de motor op kanaal A op volle snelheid
redLED(); rood als een kaart heeft gekregen
}
if(Val < IRthreshold)
{
if(cardsensed)
{
Als ((millis()-timestamp) > = MotorDelay)
{
cardsensed = false;
analogWrite(3,0); uitschakelen van de motor, maar laat het kust dus geen rem
Graaf ++;
selectLineFour();
Serial1.Print(Count);
Serial1.Print ("Valentines");
digitalWrite (SignalPin, hoge);
vertraging(20);
digitalWrite (SignalPin, laag);
}
}
if(LEDflag)
{
Als ((millis()-timestamp) > = LEDdelay)
{
LEDflag = false;
blueLED(); terug naar triest en blauw
}
}
}
}
///////////////////////////// FUNCTIONS ////////////////////////////////
VOID selectLineOne() {//puts de cursor op de regel 0 char 0.
Serial1.write(0xFE); vlag van de opdracht
Serial1.write(128); positie
}
VOID selectLineTwo() {//puts de cursor op regel 2 char 0.
Serial1.write(0xFE); vlag van de opdracht
Serial1.write(192); positie
}
VOID selectLineThree() {//puts de cursor op regel 3 char 0.
Serial1.write(0xFE); vlag van de opdracht
Serial1.write(148); positie
}
VOID selectLineFour() {//puts de cursor op regel 4 char 0.
Serial1.write(0xFE); vlag van de opdracht
Serial1.write(212); positie
}
VOID goTo (int positie) {//position = lijn 1:0-19, lijn 2: 20-39, etc, defaults 79 + terug naar 0
Als (positie < 20) {Serial1.write(0xFE); vlag van de opdracht
Serial1.write((Position+128)); positie
} else if (positie < 40){Serial1.write(0xFE); vlag van de opdracht
Serial1.write((Position+128+64-20)); positie
} else if (positie < 60){Serial1.write(0xFE); vlag van de opdracht
Serial1.write((Position+128+20-40)); positie
} else if (positie < 80){Serial1.write(0xFE); vlag van de opdracht
Serial1.write((Position+128+84-60)); positie
} else {goTo(0);}
}
ongeldig clearLCD() {}
Serial1.write(0xFE); vlag van de opdracht
Serial1.write(0x01); wissen, opdracht.
}
VOID backlightOn() {//turns op de achtergrondverlichting
Serial1.write(0x7C); opdracht vlag voor achtergrondverlichting stuff
Serial1.write(157); licht niveau.
}
VOID backlightOff() {//turns uit de achtergrondverlichting
Serial1.write(0x7C); opdracht vlag voor achtergrondverlichting stuff
Serial1.write(128); licht niveau voor uit.
}
VOID backlight50() {//sets de achtergrondverlichting bij 50% helderheid
Serial1.write(0x7C); opdracht vlag voor achtergrondverlichting stuff
Serial1.write(143); licht niveau voor uit.
}
VOID serCommand() {//a algemene aan te roepen functie de opdracht vlag voor de afgifte van alle andere opdrachten
Serial1.write(0xFE);
}
ongeldig blueLED() {}
digitalWrite (BluePin, laag); omgekeerde van gebruikelijke sinds common
digitalWrite (RedPin, hoge); anode
}
ongeldig redLED() {}
digitalWrite (BluePin, hoge);
digitalWrite (RedPin, laag);
}