Animatronic Talking julgran - del 1 (11 / 15 steg)
Steg 11: Programmera Arduino
Nu när du förstår hur jag drift servon, låt oss skriva lite mer användbar kod för det.Vi börjar genom att definiera en massa funktioner med hjälp av de värden som vi spelade in i det sista steget som kommer att animera trädet, och även lägga till seriell kommunikation kapacitet och programmera vissa åtgärder att gå med på data som tas emot från den seriella porten.
Öppna upp en ny skiss på Arduino miljö och ange följande. (kom ihåg att du kommer att behöva använda egna värden för servo positioner)
int ledPin = 13. //assign stift 13 som pin att lamporna är tändaint mouthPin = 8; Detta är den PIN-kod där munnen är ansluten
int eyesPin = 9; ögon är på pin 9
för seriell kommunikation
int meddelande = 0;
void setup() {
Serial.BEGIN(9600); starta den seriella porten med en överföringshastighet av 9600
definiera utgångarna
pinMode(ledPin,OUTPUT);
pinMode(mouthPin,OUTPUT);
pinMode(eyesPin,OUTPUT);
Stäng ögonen
closeEyes();
Stäng munnen
closeMouth();
vänta några sekunder så vi kan bevittna öppnandet efter hitting reset
Delay(3000);
}
void loop() {
digitalWrite(ledPin,HIGH);
openEyes();
Talk(3);
IF(Serial.available() > 0) {//if den seriella porten skickar data
läsa den inkommande byten
meddelande = Serial.read();
Animera vår robot enligt den seriella data som vi får
om (meddelande == '1') {
Talk(1);
}
om (meddelande == '2') {
Talk(2);
}
om (meddelande == '3') {
openEyes();
}
om (meddelande == '4') {
closeEyes();
}
om (meddelande == "5") {
blinkEyes();
}
om (meddelande == '6') {
digitalWrite(ledPin,LOW);
}
om (meddelande == '7') {
digitalWrite(ledPin,HIGH);
}
}
}
{Ogiltig talk (int gånger)
för (int j = 0; j < gånger; j ++) {
först öppna vi munnen
för (int jag = 0; jag < 10; i ++) {
digitalWrite(mouthPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(1100); fördröjning för puls längd i deklarationer
digitalWrite(mouthPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
Stäng sedan det
för (int jag = 0; jag < 10; i ++) {
digitalWrite(mouthPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(500); fördröjning för puls längd i deklarationer
digitalWrite(mouthPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
}
}
void closeMouth() {
för (int jag = 0; jag < 10; i ++) {
digitalWrite(mouthPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(500); fördröjning för puls längd i deklarationer
digitalWrite(mouthPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
}
void openEyes() {
för (int jag = 0; jag < 30; i ++) {
digitalWrite(eyesPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(800); fördröjning för puls längd i deklarationer
digitalWrite(eyesPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
}
void closeEyes() {
för (int jag = 0; jag < 30; i ++) {
digitalWrite(eyesPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(2500); fördröjning för puls längd i deklarationer
digitalWrite(eyesPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
}
void blinkEyes() {
för (int jag = 0; jag < 10; i ++) {
digitalWrite(eyesPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(2500); fördröjning för puls längd i deklarationer
digitalWrite(eyesPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
för (int jag = 0; jag < 10; i ++) {
digitalWrite(eyesPin,HIGH); slå på servo stift, dvs skicka 5V
delayMicroseconds(800); fördröjning för puls längd i deklarationer
digitalWrite(eyesPin,LOW); Inaktivera servo pin tillbaka till slut pulsen
Delay(20);
}
}
Här är en video av vad den borde göra på denna punkt.