Interaktiva Magic Mirror med Candy Dispenser (4 / 6 steg)
Steg 4: Arduino
> mirrormirror.ino
#include
#include
Servo myservo; Ny instans av Servo.h
int servoPin = 7. Servo används för att rotera CD
int pingPin = 4; Ping pin
int dtrPin = 3; DTR linje för C17A - DB9 stift 4
int rtsPin = 2; RTS linje för C17A - DB9 stift 7
int buttonState = 0; Initiera knappläge till låg
int bitDelay = 1; mS fördröjning mellan bitar (1 mS OK)
int counter = 0; räknare som används för att ändra/toogle LCD-meddelande
röding kod [32] = "";
booleska isEngaged = false;
int isitreal = 0;
void setup() {
myservo.attach(servoPin);
Serial.BEGIN(9600);
X10.init (rtsPin, dtrPin, bitDelay); Initiera X10 C17A
myservo.write(0);
dropCandy();
}
void loop() {
lång varaktighet, cm;
pinMode (pingPin, produktionen);
digitalWrite (pingPin, låg);
delayMicroseconds(2);
digitalWrite (pingPin, hög);
delayMicroseconds(5);
digitalWrite (pingPin, låg);
pinMode (pingPin, ingång);
längd = pulseIn (pingPin, hög);
cm = microsecondsToCentimeters(duration);
om (cm < 120) {
isitreal ++;
om (isitreal = 2) {
Serial.Print("A");
fördröjning (8 * 1000);
dropCandy();
fördröjning (15 * 1000);
isitreal = 0;
}
} else om (cm > 120 & & cm < 200) {
X10.sendCmd (hcA, 2, cmdOff);
}
Lyssna om datorn skickar signal till droppa godis.
om (Serial.available()) {
char c = (char)Serial.read();
om (c == '1') {
dropCandy();
}
}
Delay(100);
}
void dropCandy() {
Slå på X10 ljus och dimma
X10.sendCmd (hcA, 1, cmdOn);
X10.sendCmd (hcA, 3, cmdOn);
myservo.write(180);
Delay(500);
myservo.write(0);
Vänta 30 sekunder innan nästa godis
Slå på X10 ljus och dimma
X10.sendCmd (hcA, 1, cmdOff);
fördröjning (10 * 1000);
X10.sendCmd (hcA, 3, cmdOff);
}
lång microsecondsToCentimeters(long microseconds)
{
återvända mikrosekunder / 29 / 2;
}
Den följande Applescript hand tar om Arduino-USB-seriell anslutning. Observera att jag använt Xports för att ansluta Applescript till seriell port.
inställd zonea {"Vem är du", "Jag gillar din kostym", "Snurra runt för mig", "Vem är den skönaste av dem alla, du av kursen.", "vad är det magiska ordet?", "göra en dans för mig","Trick or treat, luktar mina fötter"}
inställd zoneb {"Happy Halloween!", "Hasta la vista baby", "Så long, farewell, auf Wiedersehen, god natt", "Tack för besöket, happy halloween"}
Set on till false
inställd use_port "/ dev/cu.usbmodem1d11"
Upprepa tills (get serialport lista) innehåller use_port
dröjsmål 3
avsluta repeat
om (få serialport lista) innehåller use_port sedan
Set on True
Ange myPort till serialport öppna use_port bps pris 9600 data bitar 8 paritet 0 stopp bitar 1 handslag 0
dröjsmål 1
om myPort är lika med -1 sedan
Visa dialogrutan "kunde inte öppna porten"
annat
Upprepa on är sant
Ange (shell script "katt" / full/path/of/file/state.txt "")
om staten är lika med "1" sedan
ange x till serialport läsa myPort
om x inte motsvarar "" sedan
om x är lika med "A" sedan
Ange randomPhraseA till vissa objekt av zonea
säga randomPhraseA
shell script ("sudo -u [användarnamn] arch - i386 osascript /full/path/of/file/animate.scpt & >/dev/null &")
dröjsmål 10
Ange randomPhraseB till vissa objekt av zoneb
säga randomPhraseB
slut om
slut om
annat
serialport skriva "1" till myPort
dröjsmål 5
shell script ("sudo -u [användarnamn] echo 1 > /full/path/of/file/state.txt")
shell script ("sudo -u [användarnamn] arch - i386 osascript /full/path/of/file/animate.scpt & >/dev/null &")
slut om
avsluta repeat
slut om
serialport nära myPort
slut om
Jag använde följande skript nästan trycka ner/lef/höger piltangenterna. Detta gjorde spegel spegel marionett flytta huvudet.
> animate.scpt
tala om för programmet "systemhändelser"
nyckel ner (ASCII-tecken 31)
dröjsmål 1
nyckel upp (ASCII karaktär 31)
nyckel ner (ASCII-tecken 28)
dröjsmål 1
nyckel upp (ASCII karaktär 28)
nyckel ner (ASCII-tecken 29)
dröjsmål 1
nyckel upp (ASCII-tecken 29)
tala om slutet