Étape 7: Le CODE de l’ARDUINO
Le code du bloc principal est très simple :
void loop ()
{
checkBTcmd () ; VÉRIFIER si la commande est reçue de BT-télécommande
receiveCmd () ;
Si (Activ) manualCmd () ;
else stopRobot () ;
}
La première chose à faire est de vérifier si il n’y a aucune nouvelle commande BT à venir. Qui va vérifier cela est fonction de "checkBTcmd ()" :
void checkBTcmd () / / vérifier si la commande est reçue de BT-télécommande
{
Si (BT1.available ())
{
commande = BT1.read () ;
BT1.Flush () ;
}
}
La variable « Activ » est utilisée pour activer ou désactiver la charrue. La fonction "receiveCmd" sera chargé de définir le statut de cette variable en fonction de la commande reçue du module BT. Notez que la logique utilisée, chaque fois que vous appuyez sur le bouton rouge avec le symbole du « Pouvoir », le caractère « p » sera envoyé par l’app et variable « Activ » changera si value (de 1 à 0 et vice versa) :
receiveCmd Sub ()
{
interrupteur (commande)
{
case « p » :
Activ = Activ! ;
commande = 0 ;
analogWrite (LEDStatus, Activ * 128) ; ON robot - dirigé
un signal sonore (outBuz, 1000, 100) ;
BT1.Print (« commande / OFF ") ;
BT1.println (' \ n') ;
retard (200) ; Délai pour attirer l’attention sur le changement de mode
rupture ;
cas suis ': / / pas utilisé ici
rupture ;
}
}
Retour à la boucle principale, tandis que la variable « Activ » est élevé (1), la fonction "manualCmd" exécute une commande selon le caractère reçu :
manualCmd Sub ()
{
interrupteur (commande)
{
case « f » :
moveStop () ; Désactiver les deux moteurs
État = command ;
rupture ;
case « w » :
moveForward () ;
État = command ;
rupture ;
affaire aurait ":
moveRight () ;
rupture ;
case « a » :
moveLeft () ;
rupture ;
de l’affaire ":
moveBackward () ;
État = command ;
rupture ;
cas « + » :
Si (État == « w »)
{
MotorSpeed MotorSpeed = + 10 ;
Si (MotorSpeed > MAX_SPEED) MotorSpeed = MAX_SPEED ;
Command = « w » ;
} Else command = Etat ;
rupture ;
cas '-' :
Si (État == « w ») = MotorSpeed MotorSpeed - 10 ;
Si (MotorSpeed
commande = Etat ;
rupture ;
}
}
Par exemple, si la commande « w » est reçue la fonction spécifique d’avancer la charrette: "moveForward ()" est exécutée.
Si « PowerOn » est haute et que vous appuyez sur la touche « POWER », la variable « PowerOn », sera « bascule » à bas et fonction "stopRobot ()" s’effectuera au lieu de "manualCmd ()". Cette fonction garantit que le moteur arrière est arrêté, les LEDs et variables à zéro.
stopRobot Sub ()
{
digitalWrite (ledBlue, basse) ;
digitalWrite (ledRed, basse) ;
État = 0 ;
moveStop () ; Désactiver les deux moteurs
}