Killer godis Robot 3000 (2 / 3 steg)
Steg 2: Kroppens funktioner
Jag satte två lådor tillsammans för att göra en kropp som var stor nog för mig att bära, huset elektronik, och har en godis låda. Jag tejpade det initialt tillsammans med silvertejp, målade det silver, sedan läggas klistermärken och vissa metalliskt band också. Grove Bar och godis låda indikatorerna (LEDs) fick tejpas på kroppen med metalliskt band så att det såg bättre. Dungen touch sensor jag placera på toppen av kroppen så att jag kunde nå det med mitt finger. Talaren hade monteras med tejp inuti kroppen så att den kan spela upp ljud när jag öppnade och stängda lådan.
Jag använde en Arduino Nano för att köra 14 lysdioder ordnade på kroppen likna datorskärmar sett i gamla filmer min pappa och jag titta på och riff på (som MST3K gör).
int demoMode = 0;
void setup() {
för (int l = 0; l < 15; l ++)
{
pinMode (l, produktionen);
}
randomSeed(analogRead(0));
}
loop rutinen körs för evigt om och om igen:
void loop() {
för (int LedIndex = 0; LedIndex < 15. LedIndex++)
{
IF(demoMode ==1)
{
digitalWrite (LedIndex, hög);
Delay(1000);
}
annat
{
int onOff = random(10);
om (onOff % 2 == 0)
{
på
digitalWrite (LedIndex, hög);
}
annat
{
utanför
digitalWrite (LedIndex, låg);
}
}
}
Delay(1000);
}
LinkIt en som majoriteten av robotens funktioner inuti kroppen. Detta tog ett tag att lista allt ut, speciellt hur man koppla servo till godis lådan så att det öppnat och stängt när jag trycker och släppt kontrollen beröring-känslig.
Här är koden för 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 = låg;
int barLevel = 1;
int maxOpenCount = 5;
int openCount = 0;
int bricka;
Servo myservo;
int maxTray = 90.
int minTray = 10;
SeeedLedBar bar (6, 5); CLK, DTA
void PlaySound(int soundId)
{
AudioStatus status.
Switch(soundId)
{
fall ROBOT_START:
LAudio.playFile (storageSD,(char*)"RobotStart.mp3");
bryta;
fall ROBOT_ON:
LAudio.playFile (storageSD,(char*)"RobotOn.mp3");
bryta;
fall ROBOT_OFF:
LAudio.playFile (storageSD,(char*)"RobotOff.mp3");
bryta;
fall OPEN_TRAY:
LAudio.playFile (storageSD,(char*)"RobotCandyDrawerOpen.wav");
bryta;
fall CLOSE_TRAY:
LAudio.playFile (storageSD,(char*)"RobotCandyDrawerClose.wav");
bryta;
}
}
void setup()
{
bricka = maxTray;
LAudio.begin();
LSD.begin(); Init SD-kort
bar.BEGIN (6, 5);
pinMode (pinTouch, ingång);
pinMode (pinLed, produktionen);
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);
bricka = minTray;
myservo.write(tray);
digitalWrite (REDLED, låg);
digitalWrite (GREENLED, hög);
openCount ++;
IF(openCount > maxOpenCount)
{
openCount = 0;
barLevel ++;
IF(barLevel > 10)
barLevel = 1;
bar.setLevel(barLevel);
}
}
void CloseTray()
{
PlaySound(CLOSE_TRAY);
bricka = maxTray;
myservo.write(tray);
digitalWrite (REDLED, hög);
digitalWrite (GREENLED, låg);
}
void toggleTray()
{
om (fack == minTray)CloseTray();
annat OpenTray();
}
void checkButton()
{
int state = digitalRead(pinTouch);
om (statligt! = lastState)
{
lastState = staten.
toggleTray();
}
}
void loop()
{
checkButton();
}