Stap 6: Programing fase
Nu dat ik had een checklist om uit te gaan van ik snel gaan werken met het schrijven van een script in mijn Arduino IDE (geïntegreerde ontwikkelomgeving). Ik ben niet van plan om te vervelen met alles wat er in mijn script, er zijn ook talloze YouTube-video's die er te zien hoe een script schrijven, maar ik zal uitleggen wat er gebeurt in het script.
Ik gebruik mijn Arduino Uno mijn Atmel 328 Chip programmeren.
Mijn in-/ uitgangen
Uitvoer = const int pivotoneerror = 7; Dit is een rode LED om aan te geven van een fout van de spil
Uitvoer = const int pivottwoerror = 8; Dit is een rode LED om aan te geven van pivot twee fout
Uitvoer = const int runled = 9; Dit is een Amber LED om aan te geven dat systeem is in een stormloop staat
Uitvoer = const int startbutton = 10; Dit is een startknop om systeem te starten
Input = const int engineRly = 11; Dit is de output voor relay, aangesloten op murphy switch
Uitvoer = const int testlight = 13; Dit is een mededeling test licht, wanneer test knop is ingedrukt op externe radio dit licht zal lite
De bibliotheken die ik gebruikte
#include //Xbee bibliotheek. Bron: http://code.google.com/p/xbee-arduino/
In het script SETUP start ik Xbee seriële poort met:
XBee.begin(9600);
Nu, voor de hoofdlus van het programma van mijn Arduino lijkt zoiets...
void loop {}
Lees de staat van de startknop in een lokale variabele:
StartButtonRead = digitalRead(startbutton);
StartButtonState = StartButtonRead;
Als startknop wordt ingedrukt en de status van de knop niet hetzelfde is als voorheen, wijzigt de status van START
Als (StartButtonState == HIGH & & StartButtonState! = StartButtonLastState) {}
START =! START;
}
ervoor te zorgen dat de volgende keer door de lus StartButtonLastState is gelijk aan de startknop Status
StartButtonLastState = StartButtonRead;
Als START is ingesteld op hoog, energize de motor estafette en voert LED
Als (START == true) {}
digitalWrite (engineRly, hoge);
digitalWrite (runled, hoge);
}
Als START is ingesteld op laag, deenergize motor relay en voert LED
Als (START == false) {}
digitalWrite (engineRly, laag);
digitalWrite (runled, laag);
}
pogingen om te lezen een pakje van Xbee
xbee.readPacket();
Als (xbee.getResponse().isAvailable()) {}
heb je iets
Als (xbee.getResponse().getApiId() == ZB_IO_SAMPLE_RESPONSE) {}
xbee.getResponse().getZBRxIoSampleResponse(ioSample);
Controleer als de xbee incheckt door ioSample Xbee adres met Xbee adres die ik heb in programing te vergelijken
Als (ioSample.getRemoteAddress64().getLsb() == pivotoneaddressLSB) {}
pivotonecheckin = millis(); merken draaien één xbee ingecheckt
}
else if (ioSample.getRemoteAddress64().getLsb() == pivottwoaddressLSB) {}
pivottwocheckin = millis(); merken draaien twee xbee ingecheckt
}
Zie als de pin die we willen laag is
Als (! ioSample.isDigitalOn(1)) {}
Er is een fout afgesloten motor
START = false;
laat controleren om te zien welke radio er uit, en het verzenden van het display.
Als (ioSample.getRemoteAddress64().getLsb() == pivotoneaddressLSB) {}
digitalWrite (pivotoneerror, hoge); Hiermee schakelt u LED1 voor fout
}
else if (ioSample.getRemoteAddress64().getLsb() == pivottwoaddressLSB) {}
digitalWrite (pivottwoerror, hoge); Hiermee schakelt u LED2 voor fout
}
}
Als (! ioSample.isDigitalOn(2)) {}
cyclus voltooid, afgesloten motor
START = false;
}
if(!ioSample.isDigitalOn(3)) {}
manier om te testen van knooppunt door te draaien op een LED
digitalWrite (testlight, hoge);
}
else {}
digitalWrite(testlight,LOW);
}
}
}
controleert als xbees hebben ingecheckt, in de laatste 1 min. als ze nog niet; afsluiten (xbees zijn
geprogrammeerd om checkin elke 20 sec.) Als Xbee niet gecontroleerd in systeem afsluiten en inschakelen
appropreat LED te tonen van de fout
Als (millis() - pivotonecheckin > = 60000) {}
START = false;
digitalWrite (pivotoneerror, hoge); Hiermee schakelt u LED1 voor fout
}
Als (millis() - pivottwocheckin > = 60000) {}
START = false;
digitalWrite (pivottwoerror, hoge); Hiermee schakelt u LED2 voor fout
}
} / / einde van lus