Stap 6: De programmalogica
Het belangrijkste blok ("lus") is eigenlijk heel simpel:
Controles voor berichten bij het bereiken van seriële buffer, van het Android apparaat Verifies als de bedieningswijze moet lokaal of extern (de standaardwaarde is lokale). Controleren of een opdracht uit te voeren van het "programma" (volgorde van stappen) werd gebruikt. Zo ja, draaien. Anders, het 'programma' is niet compleet en nog steeds nieuwe stappen moet schrijven. Als een "nieuwe positie" is gedefinieerd, toe te voegen aan het programma terug naar het begin en stap 1 opnieuw uitvoeren.
void loop)
{
checkBTcmd ();
defineLocalRemote ();
execTaskCmd = digitalRead (execTaskPin);
Als (execTaskCmd == || HIGH command == "runon")
{
RunProgram ();
}
anders recArmPosition ();
Command = "";
}
De functie checkBTcmd () assembleert een string met behulp van de personen personages die uit de BT module komt. Deze tekenreeks wordt doorgegeven aan de variabele "command".
De functie defineLocalRemote () acht de variabele 'command' controleren of een opdracht te wijzigen in de modus Extern wordt ontvangen of vice versa. De opdracht van het alarm wordt ook hier geanalyseerd. Voor het programmalogica, als de "Alarm" is geactiveerd in het Android apparaat, moet de arm noodzakelijk Ga naar de externe modus.
De functie RunProgram () voert de voorbereidingen, draaien van de LEDs op / af, etc en vooral het aanroepen van de functie: (ExecuteTask). De laatstgenoemde is de functie waarin de uitvoering van de logica van de volgorde van stappen. De functie verhoogt het verzenden van de positiegegevens naar arm één voor één met behulp van het hulpprogramma "positionIndex": armPosition (greep, base, schouder, elleboog).
Tot slot, de functie die echt de opdracht van de servo's en schrijft de "stappen" is het recArmPosition. Afhankelijk van de Android opdracht ontvangt, zal deze functie definiëren de positie van de servo's die via de potten, of via de "sliders" van Android app worden kunnen. Met elke positie van de verandering stuurt deze functie de coördinaten naar de servo's met behulp van de functie van de armPosition (greep, base, schouder, elleboog). De lezing van de werkelijke positie van de potten of schuifregelaars en de bijbehorende activering van servors treedt op tegen de tijd dat de opdracht 'Opslaan' of 'Programma' wordt geactiveerd. Op dat moment, de arrays'position-index wordt verhoogd en de stap opgeslagen.
Om inzicht te vereenvoudigen, was alle code gebaseerd op specifieke functies. Het Setup-blok, zijn Loop en de functies die hierboven beschreven vrijwel alle in het bestand:
MJRoBot_Arm_Robot_Task_Prgm.ino
De meer algemene functies zoals Lees BT commando: void checkBTcmd (); Klankbron: void pieptoon (int pin, int freq, lange ms) en debouncing: Booleaanse ontdendering (int pin); Ze zijn in het bestand:
General_Functions.Ino
Een belangrijk feit. Aangezien de Arduino instructies op basis van een klok van 16Mhz uitvoert, verwacht wordt dat de knoppen zijn leest honderden of zelfs duizenden keren per seconde, vandaar is het belangrijk om een "debouncing" knop waarin de stap van de opname.
Het vierde en laatste bestand is:
Arm_Ctrl_and_Display.Ino
In dit bestand zijn de potten lezing functies: bool readPotenciometers (); lezing van Android schuifregelaars: bool readSliders (); plaatsing van servo's: void armPosition (int gripp int basee, int schouder, elleboog int). De andere functies die zijn opgenomen in het bestand zijn voor weergave van de gegevens op de LCD, seriële Monitor, alarmen, enz.
De complete broncode voor het project kan worden gevonden op GITHUB:
https://github.com/Mjrovai/MJRoBot-Programmed-arm
of hier bij dit instructable
De video toont de robotarm 4DOF "meArm" wordt geprogrammeerd op afstand via de Android app.