Alla hjärtans Box (1 / 4 steg)
Steg 1: Röda ögon
Väskan är den som gavs till varje anställd att dekorera. Jag använde en Android robot leksak från Google. Huvudet lossnar. Jag borrade ut ögonen och tri-color led från Radio Shack (http://www.radioshack.com/product/index.jsp?productId=3020765).
Det finns en bandkabel med går genom ett hål i påsen och ett hål i locket att ansluta till prototyp styrelsen ansluten till Arduino (se nästa steg). Kabeln som gjorts med en bandkabel (https://www.adafruit.com/products/793), och sedan lysdioderna lödda i efter strippning ena änden av bandet kablar och fästa kala honkontakter (http://www.pololu.com/catalog/product/1930), med några krympslang används för att hålla trådarna från kortslutning.
Koden är nedan:
/*************************************************************
Motoriska sköld
Funktionen stift per Ch. Ett stift per Ch. B
Riktning D12 D13
PWM D3 D11
Broms D9 D8
Aktuella fjärranalys A0 A1
LCD-koden från http://www.arduino.cc/playground/Learning/SparkFunSerLCD
LCD är 20 x 4
för Leonardo behovet att använda Serial1 klass
*************************************************************/
CONST int IRthreshold = 180;
CONST int IRPin = 3; Läs IR-värde på analoga 3
CONST int SignalPin = A2; signal till ljud Arduino
CONST int RedPin = A4;
CONST int BluePin = A5;
booleska cardsensed = false;
booleska LEDflag = false;
följande variabler är lång eftersom tiden, i millisekunder,
kommer snabbt att bli ett större antal än kan lagras i en int.
långa tidsstämpel = 0; används för att hålla reda på hur länge IR-sensorn blockerade
CONST long MotorDelay = 500. hålla motor går för en halv sekund efter IR-sensorn rensar
CONST long LEDdelay = 4000;
int val = 0;
int count = 0;
void setup()
{
Setup kanal A
pinMode (12, OUTPUT); Initierar Motor kanal A stift
pinMode (9, OUTPUT); Initierar broms kanal A stift
pinMode (SignalPin, OUTPUT);
digitalWrite (SignalPin, låg);
pinMode (RedPin, OUTPUT);
pinMode (BluePin, OUTPUT);
Serial1.BEGIN(9600);
Delay(1000); dags att bosätta sig i, bara i fall
clearLCD();
backlightOn();
selectLineOne();
Delay(10);
Serial1.Print ("glad Alla hjärtans dag");
Delay(10);
selectLineTwo();
Serial1.Print ("CCE!");
Delay(10);
selectLineThree();
Serial1.Print ("Jag har nu:");
Delay(10);
blueLED(); blå vid baslinjen
}
void loop()
{
Val = analogRead(IRPin);
om (val > IRthreshold) / / vägen blockerad
{
cardsensed = sant;
LEDflag = sant;
timestamp = millis();
vidarebefordra @ full fart
digitalWrite 12, hög. Upprättar riktning framåt av kanal A
digitalWrite (9, låg). Lossa bromsen för kanal A
analogWrite (3, 255); Snurrar motorn på kanal A i full fart
redLED(); röd när den har fått ett kort
}
IF(val < IRthreshold)
{
IF(cardsensed)
{
om ((millis()-timestamp) > = MotorDelay)
{
cardsensed = false;
analogWrite(3,0); stänga av motor, men låt det kusten så ingen broms
greve ++;
selectLineFour();
Serial1.Print(Count);
Serial1.Print ("Valentines");
digitalWrite (SignalPin, hög);
Delay(20);
digitalWrite (SignalPin, låg);
}
}
IF(LEDflag)
{
om ((millis()-timestamp) > = LEDdelay)
{
LEDflag = false;
blueLED(); tillbaka till att vara ledsen och blå
}
}
}
}
///////////////////////////// FUNCTIONS ////////////////////////////////
void selectLineOne() {//puts markören på rad 0 röding 0.
Serial1.write(0xFE); kommandot flagga
Serial1.write(128); ställning
}
void selectLineTwo() {//puts markören på rad 2 Tkn 0.
Serial1.write(0xFE); kommandot flagga
Serial1.write(192); ställning
}
void selectLineThree() {//puts markören på rad 3 röding 0.
Serial1.write(0xFE); kommandot flagga
Serial1.write(148); ställning
}
void selectLineFour() {//puts markören på rad 4 röding 0.
Serial1.write(0xFE); kommandot flagga
Serial1.write(212); ställning
}
Annullera goTo (int position) {//position = linje 1:0-19, linje 2: 20-39, etc, 79 + standardvärden till 0
om (position < 20) {Serial1.write(0xFE); //command flagga
Serial1.write((position+128)); ställning
} else om (position < 40){Serial1.write(0xFE); //command flagga
Serial1.write((position+128+64-20)); ställning
} else om (position < 60){Serial1.write(0xFE); //command flagga
Serial1.write((position+128+20-40)); ställning
} else om (position < 80){Serial1.write(0xFE); //command flagga
Serial1.write((position+128+84-60)); ställning
} annat {goTo(0);}
}
void clearLCD() {
Serial1.write(0xFE); kommandot flagga
Serial1.write(0x01); rensa kommando.
}
void backlightOn() {//turns på bakgrundsbelysningen
Serial1.write(0x7C); kommandot flagga för bakgrundsbelysning grejer
Serial1.write(157); lätt nivå.
}
void backlightOff() {//turns av bakgrundsbelysning
Serial1.write(0x7C); kommandot flagga för bakgrundsbelysning grejer
Serial1.write(128); ljus för.
}
void backlight50() {//sets bakgrundsbelysningen på 50% ljusstyrka
Serial1.write(0x7C); kommandot flagga för bakgrundsbelysning grejer
Serial1.write(143); ljus för.
}
void serCommand() {//a allmän funktion att kalla flaggan kommando för utfärdande av alla andra kommandon
Serial1.write(0xFE);
}
void blueLED() {
digitalWrite (BluePin, låg); omvänd av vanliga sedan common
digitalWrite (RedPin, hög); anod
}
void redLED() {
digitalWrite (BluePin, hög);
digitalWrite (RedPin, låg);
}