Stap 2: Lichaamsfuncties
Ik twee vakken samen te stellen zodat een lichaam dat groot genoeg voor mij om te dragen was, huis de elektronica, en heb een snoep-lade. Ik geplakt het aanvankelijk samen met plakband, schilderde het zilver, waarna stickers en sommige metalen band ook toegevoegd. De Grove Bar en snoep lade indicatoren (LEDs) moest worden geplakt op het lichaam met behulp van metallisch tape zodat het zag er beter uit. De Grove touch sensor die ik op de bovenkant van het lichaam zodat ik het met mijn vinger bereiken kon. De spreker moest worden gemonteerd met behulp van tape in het lichaam, zodat het geluiden afspelen kan wanneer ik opende en de lade gesloten.
Ik gebruikte een Arduino Nano te rijden 14 LEDs gerangschikt op het lichaam te lijken op computerschermen gezien in oude films mijn vader en ik kijken en riff op (zoals MST3K doet).
int demoMode = 0;void setup() { for(int l = 0; l < 15; l++) { pinMode(l, OUTPUT); } randomSeed(analogRead(0)); }
// the loop routine runs over and over again forever: void loop() { for(int LedIndex = 0; LedIndex < 15; LedIndex++) { if(demoMode ==1 ) { digitalWrite(LedIndex, HIGH); delay(1000); } else { int onOff = random(10); if(onOff % 2 == 0) { // on digitalWrite(LedIndex, HIGH); } else { // off digitalWrite(LedIndex, LOW); } } } delay(1000); }
De LinkIt One verstrekt het merendeel van de robot de functies in het lichaam. Dit duurde een tijdje te figuur alles uit, met name hoe u de servo koppelt aan de snoep lade zodat het geopend en gesloten wanneer ik op en de controle van de touch-gevoelige vrijgegeven.
Hier is de code voor de LinkIt One.
#include "Suli.h"#include #include #include #include "Seeed_LED_Bar_Arduino.h" #include const int ROBOT_START = 1; const int ROBOT_ON = 2; const int ROBOT_OFF = 3; const int TRICK_TREAT = 4; const int THANK_YOU = 5; const int pinTouch = 4; const int pinLed = 8; const int REDLED = 8; const int GREENLED = 7; int lastState = LOW; int barLevel = 1; int maxOpenCount = 5; int openCount = 0; int tray; Servo myservo; int maxTray = 90; int minTray = 10; SeeedLedBar bar(6, 5); // CLK, DTA
void PlaySound(int soundId) { AudioStatus status; switch(soundId) { case ROBOT_START: LAudio.playFile( storageSD,(char*)"RobotStart.mp3"); break; case ROBOT_ON: LAudio.playFile( storageSD,(char*)"RobotOn.mp3"); break; case ROBOT_OFF: LAudio.playFile( storageSD,(char*)"RobotOff.mp3"); break; case OPEN_TRAY: LAudio.playFile( storageSD,(char*)"RobotCandyDrawerOpen.wav"); break; case CLOSE_TRAY: LAudio.playFile( storageSD,(char*)"RobotCandyDrawerClose.wav"); break; } }
void setup() { tray = maxTray; LAudio.begin(); LSD.begin(); // Init SD card bar.begin(6, 5); pinMode(pinTouch, INPUT); pinMode(pinLed, OUTPUT); LAudio.setVolume(3); bar.setLevel(1); myservo.attach(3); myservo.write(tray); pinMode(REDLED, OUTPUT); pinMode(GREENLED, OUTPUT); // PlaySound(ROBOT_START);
}
VOID OpenTray() {PlaySound(OPEN_TRAY); lade = minTray; myservo.write(tray); digitalWrite (REDLED, laag); digitalWrite (GREENLED, hoge); openCount ++; if(openCount > maxOpenCount) {openCount = 0; barLevel ++; if (barLevel > 10) barLevel = 1; bar.setLevel(barLevel); void OpenTray() { PlaySound(OPEN_TRAY); tray = minTray; myservo.write(tray); digitalWrite(REDLED, LOW); digitalWrite(GREENLED, HIGH); openCount++; if(openCount > maxOpenCount) { openCount = 0; barLevel++; if(barLevel > 10) barLevel = 1; bar.setLevel(barLevel); } } void CloseTray() { PlaySound(CLOSE_TRAY); tray = maxTray; myservo.write(tray); digitalWrite(REDLED, HIGH); digitalWrite(GREENLED, LOW); } void toggleTray() { if(tray == minTray)CloseTray(); else OpenTray(); } void checkButton() { int state = digitalRead(pinTouch); if(state != lastState) { lastState = state; toggleTray(); } } void loop() { checkButton(); } } ongeldig CloseTray() {PlaySound(CLOSE_TRAY); lade = maxTray, myservo.write(tray), digitalWrite (REDLED, hoge); digitalWrite (GREENLED, laag);VOID toggleTray() {als (lade == minTray)CloseTray(); anders OpenTray();VOID checkButton() {int staat = digitalRead(pinTouch); als (staat! = lastState) {lastState = staat; toggleTray();} void loop {checkButton();