Hacka en RC bil med Arduino och Android (7 / 9 steg)
Steg 7: ARDUINO koden
Koden för huvudblocket är mycket enkel:
Ogiltig loop)
{
checkBTcmd (); Kontrollera om kommandot tas emot från BT fjärrkontroll
receiveCmd ();
om (turnOn) manualCmd ();
annat stopRobot ();
}
Det första du kan göra är att kontrollera om det finns någon ny BT kommando kommer. Vem kommer att kontrollera detta är "checkBTcmd ()" funktion:
void checkBTcmd () / / kontrollera om kommandot tas emot från BT fjärrkontroll
{
om (BT1.available ())
{
kommandot = BT1.read ();
Bt1.flush ();
}
}
Variabeln "turnOn" används för att aktivera eller inaktivera i kassavagnen. Funktionen "receiveCmd ()" kommer att ansvara för fastställa status för denna variabel som en funktion av mottagna BT modul kommandot. Observera att använda logiken, varje gång trycker på den röda knappen med symbolen för "POWER", tecknet "p" kommer att skickas av app och variabeln "turnOn" kommer att förändras om värde (från 1 till 0 och vice versa):
receiveCmd (void)
{
Switch (kommando)
{
fallet "p":
turnOn = turnOn!;
kommandot = 0;
analogWrite (LEDStatus, turnOn * 128); Robot på - ledde på
pip (outBuz, 1000, 100);
Bt1.Print ("kommando på / OFF");
Bt1.println ("\ n');
fördröjning (200); Dröjsmål uppmärksamma lägesändring
bryta;
fallet är ": / / används inte här
bryta;
}
}
Funktionen "manualCmd ()" återvänder till huvudloop medan variabeln "turnOn" är hög (1), och utför ett kommando beroende på det mottagna tecknet:
manualCmd (void)
{
Switch (kommando)
{
fallet "f":
moveStop (); Stänga av båda motorer
State = kommando;
bryta;
fallet "w":
moveForward ();
State = kommando;
bryta;
fall skulle ":
moveRight ();
bryta;
fallet "a":
moveLeft ();
bryta;
fallet ":
moveBackward ();
State = kommando;
bryta;
fallet "+":
om (statligt == "w")
{
MotorSpeed MotorSpeed = + 10;
om (MotorSpeed > MAX_SPEED) MotorSpeed = MAX_SPEED;
kommandot = 'w';
} Annars kommandot = staten.
bryta;
fallet "-":
om (statligt == "w") = MotorSpeed MotorSpeed - 10.
om (MotorSpeed
kommandot = staten.
bryta;
}
}
Om kommandot "w" tas emot till exempel särskilda funktionen för att flytta vagnen fram: "moveForward ()" körs.
Om "PowerOn" är hög och "POWER" knappen trycks, variabeln "PowerOn", kommer att "växla" till låg och "(stopRobot)"-funktionen kommer att utföras i stället för "(manualCmd)". Denna funktion säkerställer att bakre motorn stoppas lysdioderna och variabler nollställs.
stopRobot (void)
{
digitalWrite (ledBlue, låg);
digitalWrite (ledRed, låg);
State = 0;
moveStop (); Stänga av båda motorer
}