Stap 14: Samenbrengen van alle Code
Dit is een overzicht van de code die is besproken in de vorige stappen. Mijn laatste bestand is bijgevoegd voor uw gebruik.
De code bestaat uit deze klassen
- lightPen
- SVGHandler
- Stepper
- lightPlotter
- cmdInterface
LightPen klasse
Deze klasse verzorgt de communicatie met de ESP8266 wifi-gecontroleerde RGB LED via een HTML-interface. Het heeft drie functies
setColourRGBTuple() Deze functie wordt gebruikt om de huidige kleur ingesteld op een RGB-waarde verstrekt in de vorm van een tupel (R, G, B), waar de waarden van R, G en B liggen tussen 0 en 255 (grondtal 10 - decimaal)
setColourHexString() Deze functie wordt gebruikt om de huidige kleur ingesteld op een RGB-waarde verstrekt in de vorm van een hexadecimale tekenreeks "#rrggbb", waar de waarden rr, gg en bb tussen 00 en ff (basis 16 - hex liggen)
setColour() Deze functie wordt aangeroepen door de setColourRGBTuple of setColourHexString toe te passen van de kleur op de LEDS via HTML-verzoek. Als we deze functie rechtstreeks tussen motor stappen genoemd kon het met enige vertraging en interfereren met de vloeiendheid van onze intensivering. Om dit te vermijden het heet in een draad, zodat deze wordt gelijktijdig met de intensivering code uitgevoerd.
SVGHandler klasse
Deze klasse operatie werd uitgelegd in de stap "XY-coördinaten van een SVG" In het kort het leest in een SVG (die wordt verondersteld te hebben van de absolute coördinaten enige en lineaire padobjecten alleen) en slaat ze op als een lijst van de coördinaten van het begin en einde van regels, samen met de kleur van de lijn. De segmenten vormen een lijst van lijsten, met elk segment met de vorm [x 0 y0 x1 y1 RGB]. de x- en y coördinaten zijn genormaliseerd praalwagens (geschaald zodat het minimum 0 is en de maximumwaarde 1 is).
Stepper-klasse
Deze klasse is beschreven in de stap "Python Code om te rijden de steppers". Het verzorgt de I2C communicatie met de stappenmotoren en biedt een eenvoudige step() functie die ofwel beweegt de stepper vooruit of achteruit een stap.
LightPlotter klasse
De LightPlotter klasse brengt alle van deze andere klassen samen in een systeem dat afbeeldingen met licht kunt tekenen. Tijdens initialisatie zijn er een paar belangrijke variabelen die zijn geconfigureerd
- de twee motoren worden gedefinieerd als motor1 (linker motor) en motor2 (rechter motor), dit zijn exemplaren van de klasse stepper
- Het aantal horizontale stappen tussen motor1 en motor2 worden gedefinieerd (xRes). Dit moet proefondervindelijk worden bepaald en zal afhankelijk van de diameter van uw katrollen en de afstand tussen de motoren.
- De standaard tijd tussen stappen (stepTime) wordt gedefinieerd. een waarde van 10mS (0,01) werkte goed voor mij, maar u zal hebben om te bepalen hoe snel u kunt stap zonder ontbrekende stappen.
- De maximale stap tijd (stepTimeMax) ook is gedefinieerd, maar dit is eigenlijk gewoon een veiligheid voor bepaalde berekeningen, het hoeft niet een hardware-relevantie, koos ik 1 seconde, die nooit werd bereikt in de praktijk.
- usableArea. Zoals beschreven in de de "Understanding the geometrie van een String Plotter" stap, de extremiteiten direct onder de motoren en rechtstreeks tussen de motoren (boven) moet worden vermeden, zodat ik een variabele "usableArea", die bestaat uit een percentage van de theoretische gebied definiëren. 70% (of 0,7) is een goed uitgangspunt.
- Soms wilt u misschien uw hele afbeelding verschuiven naar beneden (bijvoorbeeld tot het opstellen van een karakter van de voeten op de grond), de "yOffset" variabele zorgt ervoor dat dit
Dit zijn de functies van de lightPlotter klasse
- setOrigin
- goTo
- runSteppers
- stepMotors
setOrigin() wordt gebruikt om te vertellen van de lichte plotter dat er momenteel op (0,0) die wordt gebruikt in de kalibratie.
runSteppers() is een gemak-functie waarmee in een aantal stappen die elke motor, evenals het interval tussen stappen voor elke motor wenden moet. Met threads zijn de twee motoren beide kunnen tegelijkertijd worden versterkt.
goTo() neemt een (X, Y) coördineren en berekent het aantal stappen dat elke motor verplaatsen moet om de LED naar die locatie. Daarnaast bepaalt de vertraging tussen stappen om ervoor te zorgen dat beide motoren tegelijkertijd te krijgen naar hun bestemming. Zodra deze gegevens zijn berekend, goTo() maakt gebruik van de functie runSteppers() om de motoren verplaatsen.
cmdInterface klasse
Deze klasse maakt gebruik van de zeer koele Python module "cmd" zodat we gemakkelijk bouwen een opdrachtregelinterface voor onze lichte plotter.
Functies die worden voorafgegaan door "do_" kunnen worden aangeroepen vanaf de opdrachtregel wanneer het script wordt uitgevoerd. U kunt zien dat ze allemaal bijna direct overeen met de functies van de verschillende klassen, in de meeste gevallen bevatten ze een beetje voor de foutcontrole om ervoor te zorgen dat de argumenten gezond zijn. De stap "Hoe te gebruiken the System" zal beschrijven hoe deze te gebruiken.
- do_plotsvg
- do_movesteps
- do_invertMotor
- do_disableMotor
- do_enableMotor
- do_setrgb
- do_goxy
- do_goxyrgb
- do_setusable
- do_setorigin
- do_setyoffset
- do_exit