Programmerade robotarm (6 / 7 steg)
Steg 6: Programmets logik
Det största blocket ("Loop") är egentligen ganska enkelt:
Kontroller för meddelanden anländer till seriell buffert, från Android enheten kontrollerar om styrsätt ska vara lokal eller fjärr (standard är lokala). Kontrollera om ett kommando för att köra "program" (sekvens av steg) användes. Om så, kör det. Annars "program" är inte komplett och fortfarande måste skriva nya steg. Om en "ny position" definieras, lägga till programmet tillbaka till början och utför steg 1 igen.
Ogiltig loop)
{
checkBTcmd ();
defineLocalRemote ();
execTaskCmd = digitalRead (execTaskPin);
om (execTaskCmd == || Frihetsarmén == "runon")
{
RunProgram ();
}
annat recArmPosition ();
kommandot = "";
}
Funktionen checkBTcmd () monterar en sträng med hjälp av de enskilda tecken som anländer från BT-modulen. Den här strängen skickas till variabeln "kommando".
Funktionen defineLocalRemote () anser att variabeln "kommando" kontrollera om ett kommando för att ändra läget till fjärrkontrollen tas emot eller vice versa. Kommandot alarmet också analyseras här. För programmets logik, om "Alarm" utlöses i Android-enhet, måste armen nödvändigtvis gå till avlägsna läge.
Funktionen RunProgram () utför förberedelserna, vrida lysdioder på / off, etc och särskilt åberopa funktionen: ExecuteTask (). Det senare är den funktion som innehåller det utförandet logiken i olika stegen för. Funktionen ökar den "positionIndex" positionsdata skickas till arm en efter en med hjälp av verktyget: armPosition (grepp, base, skuldra, armbåge).
Slutligen är den funktion som verkligen kommandot servon och skriver "stegen" (recArmPosition). Beroende på mottagande kommandot Android, kommer att denna funktion definiera placering av servon som kan ske genom krukor, eller via "reglagen" av Android app. Med varje position förändring skickar denna funktionen koordinaterna till servon med funktionen armPosition (grepp, base, skuldra, armbåge). Läsningen av verkliga ställning krukor eller reglagen och motsvarande aktiveringen av servors inträffar när kommandot "Spara" eller "PROGRAM" utlöses. I det ögonblicket, arrays'position index ökas och steget lagras.
För att förenkla förståelsen, var all kod utifrån specifika funktioner. Setup blocket, är Loop och de funktioner som beskrivs ovan så gott som alla i filen:
MJRoBot_Arm_Robot_Task_Prgm.ino
Den mer allmänna funktion såsom Läs BT kommando: void checkBTcmd (); tongenereringen: annullera beep (int pin, int freq, lång ms) och debouncing: boolean debounce (int pin); De är på filen:
General_Functions.ino
Ett viktigt faktum. Arduinoen utför instruktioner baserat på en klocka av 16Mhz, det förväntas att knapparna är läst hundratals eller tusentals gånger per sekund, därför är det viktigt att göra en "debouncing" knapp som anger inspelningsfas.
Den fjärde och sista filen är:
Arm_Ctrl_and_Display.ino
I den här filen är krukorna behandlingen funktioner: bool readPotenciometers (); läsning av Android reglagen: bool readSliders (); placering av servon: void armPosition (int gripp, int basee, int skuldra, armbåge int). Övriga funktioner i filen är för data som visas på LCD, Serial Monitor, larm, etc.
Den kompletta källkoden för projektet finns på GITHUB:
https://github.com/Mjrovai/MJRoBot-Programmed-arm
eller här på detta instructable
Videon visar robotarmen 4DOF "meArm" programmeras distans genom den Android app.