Light Plotter with Intel Edison (14 / 16 steg)
Steg 14: Samla All kod
Detta är en översikt över den kod som har diskuterats i föregående steg. Min slutliga filen bifogas för din användning.
Koden består av dessa klasser
- lightPen
- SVGHandler
- stepper
- lightPlotter
- cmdInterface
LightPen klass
Denna klass hanterar kommunikation med ESP8266 wifi-kontrollerad RGB LED via ett HTML-gränssnitt. Den har tre funktioner
setColourRGBTuple() Denna funktion används för att ange den aktuella färgen för ett RGB-värde som tillhandahålls i form av en tupel (R, G, B), där värdena R, G och B är mellan 0 och 255 (bas 10 - decimal)
setColourHexString() Denna funktion används för att ange den aktuella färgen för ett RGB-värde som tillhandahålls i form av en hex-sträng "#rrggbb", där värdena rr, gg och bb är mellan 00 och ff (bas 16 - hex)
setColour() Denna funktion kallas av setColourRGBTuple eller setColourHexString att tillämpa färg på Lysdioderna via HTML-begäran. Om vi kallas denna funktion direkt mellan motor steg kan det orsaka en försening och störa jämnhet i våra kliva. För att undvika detta kallas det i en tråd, så att det körs samtidigt med stegmotor koden.
SVGHandler klass
Denna klass operation förklarades i steg "XY koordinater från ett SVG" kort sagt den läser in en SVG (som antas ha absoluta koordinater enda och linjär väg objekt endast) och lagrar dem som en lista med början och slut koordinaterna för linjer, tillsammans med linjens färg. Segmenten bildar en lista av listor, med varje segment med formuläret [x 0 y0 x1 y1 RGB]. x- och y-koordinaterna är normaliserad flöten (skalas så att minst är 0 och högsta är 1).
Stepper klass
Denna klass beskrivs i steg "Python kod att köra steppers". Det hanterar I2C kommunikation med stegmotorer och ger en enkel step() funktion som antingen stepper framåt eller bakåt ett steg.
LightPlotter klass
Klassen LightPlotter sammanför alla dessa andra klasser i ett system som kan rita bilder med ljus. Det finns några viktiga variabler som konfigureras under initiering
- de två motorerna definieras som motor1 (vänstra motor) och motor2 (högra motor), dessa är förekomster av klassen stepper
- Antalet horisontella steg mellan motor1 och motor2 definieras (xRes). Detta måste fastställas experimentellt och kommer att bero på diametern på din remskivor och avståndet mellan motorerna.
- Defaults tiden mellan steg (stepTime) definieras. ett värde på 10 MS (0,01) fungerat bra för mig, men du måste bestämma hur snabbt du kan gå utan saknas steg.
- Den maximala steg tid (stepTimeMax) definieras också, men detta är egentligen bara en säkerhet för vissa beräkningar, den har inte en betydelse för hårdvara, jag valde 1 sekund, som nåddes aldrig i praktiken.
- usableArea. Som beskrivs i den "Förståelse the geometri av en sträng Plotter" steg, extremiteter direkt under motorerna och direkt mellan motorerna (överst) bör undvikas, så jag definierar en variabel "usableArea" som är en procentandel av det teoretiska området. 70% (eller 0,7) är en bra utgångspunkt.
- Ibland kanske du vill flytta hela bilden (till exempel rita en karaktärs fötter på golvet), variabeln "yOffset" tar hand om detta
Detta är klassen lightPlotter funktioner
- setOrigin
- gå till
- runSteppers
- Tryckluft
setOrigin() används för att berätta den lätta plottern att det är för närvarande på (0,0) som används i kalibrering.
runSteppers() är en bekvämlighet funktion som tar i ett antal steg som varje motor bör vända, och intervallet mellan steg för varje motor. Med trådar är två motorerna både kan utökas samtidigt.
goTo() tar i ett (X, Y) samordna och beräknar antalet steg som varje motor måste flytta för att få lampan till den platsen. I tillägg bestämmer fördröjningen mellan åtgärder för att säkerställa att båda motorerna samtidigt för att komma till deras destination. När dessa detaljer beräknas, goTo() gör användning av funktionen runSteppers() för att få motorerna flyttar.
cmdInterface klass
Den här klassen använder sig av den väldigt cool Python module "cmd" ger oss möjlighet att enkelt bygga ett kommandoradsgränssnitt för våra ljus plotter.
Funktioner som är prefixet "s" kan anropas från kommandoraden när skriptet körs. Du kan se att de alla motsvarar nästan direkt till funktionerna av de olika klasserna, i de flesta fall omfattar de lite av felkontroll för att se till att argumenten är sane. "Hur att använda systemet" steg beskriver hur man använder dessa.
- do_plotsvg
- do_movesteps
- do_invertMotor
- do_disableMotor
- do_enableMotor
- do_setrgb
- do_goxy
- do_goxyrgb
- do_setusable
- do_setorigin
- do_setyoffset
- do_exit