Styra en Furby med Arduino (eller andra mikrokontroller) (6 / 9 steg)
Steg 6: Projekt 1: grundläggande motorisk kontroll
De flesta av svåra är att få ett enkelt exempel arbetar, så de programmatiska målen för detta steg är grundläggande:
FAS 1: Motor test - interaktiva
- Tryck på en knapp och det går framåt (utan uppehåll)
- Tryck på den andra och det går i omvänd (utan uppehåll)
Behöver du två knappar, ansluten till stiften på arduino och GND.
Arduino behöver två funktioner, "setup" och "loop".
Setup() körs bara en gång. Det är där du definierar ditt stift.
void setup() {
sätta din installation kod här, om du vill köra en gång:pinMode (XCAM_HOME, indata);
digitalWrite (XCAM_HOME, hög); pulluppinMode (MOTOR_FORWARD, OUTPUT);
pinMode (MOTOR_REVERSE, OUTPUT);Knapparna är negativ logik
pinMode (XBUTTON_FWD, indata);
digitalWrite (XBUTTON_FWD, hög); pullup
pinMode (XBUTTON_REV, indata);
digitalWrite (XBUTTON_REV, hög); pullup} / / setup
Nästa, loop() - Detta går väldigt ofta, så du vill göra någon kod köra här så kort som möjligt:
osignerade motorForwardP = 1;
sätta din huvudsakliga kod här, för att köra flera gånger:
void loop() {
updateMotorFromButton();
} / / slinga
Slutligen, den kod som gör allt arbete: det läser från knapparna och sätter motor stiften på lämpligt sätt. Vi ange en global flagga att markera vilken riktning vi kommer.
/ * Läs knappen och ange variabler därmed * /
void updateMotorFromButton()
{
char forwardButton = (digitalRead(XBUTTON_FWD) == låg);
char reverseButton = (digitalRead(XBUTTON_REV) == låg);inte gör något om båda trycks
om (forwardButton & & reverseButton) återvända;om (forwardButton) {
motorForwardP = 1;
moveForward();
}om (reverseButton) {
motorForwardP = 0;
moveReverse();
}} / / updateMotorFromButton
Här är de metoder som aktivera motorn eller inaktivera framlänges eller vända. Märka vi ange båda låg från början att förhindra eventuella utbrändhet!
ställa in motor stift att gå framåt
void moveForward()
{
digitalWrite (MOTOR_REVERSE, låg);
digitalWrite (MOTOR_FORWARD, hög);
} / / moveForwardställa in motor stift att flytta omvänd
void moveReverse()
{
digitalWrite (MOTOR_FORWARD, låg);
digitalWrite (MOTOR_REVERSE, hög);
} / / moveReverse
Nu, testa det!