Stap 5: Code uitleg.
Basic omlaag lopen van het Wetboek, sla deze als u wilt, het bevat geen stappen van de werkelijke bouwen.De code begint net als de meeste anderen, met de verklaring van de variabele. De meeste van deze moet rust gelaten, maar drie zijn nuttig te wijzigen als u wilt kalibreren van uw installatie. Dit zijn:
zweven del = 2;
zweven movedel = 2;
zweven printdel = 5;
"del" is de vertraging tussen de stappen van de beweging. Dit is (omgekeerd) de werkelijke snelheid van de laser. Als dit te laag is ingesteld, kan het problemen veroorzaken in etsen, of "motor fart", zoals ik het noemen, waar de motor maakt een luid buzz voor ongeveer de helft van een tweede. Omdat de motor de laser regelt, is dit een probleem. De andere twee variabelen worden gebruikt om te helpen bestrijden dit.
movedel is hoe lang het programma wacht tussen het ontvangen van de nummers van de seriële poort. Dit is nodig, omdat zonder de nummers af en toe drastisch veranderen van wat werd gestuurd, die een belangrijk probleem vormt.
printdel is hoe lang het programma wachten tussen het verzenden van een "1" en "2" voor verwerking. Ik zal bespreken dit meer in de volgende stap.
Na het opzetten van de variabelen, is er een oneven twee lijnen
"TCCR1B = TCCR1B & 0b11111000 | 0x01;
TCCR2B = TCCR2B & 0b11111000 | 0x01;"
Deze lijnen verhogen de snelheid van de PWM op de pennen. Als dit niet gebeurt, de sprekers zal schommelen met de pwm, dat normaal bij ongeveer 500Hz is (500 trillingen per seconde). Deze lijnen verhogen die boven 20KHz (20000 trillingen per seconde).
De meerderheid van de code is gewoon uitzoeken welk standpunt was verzonden, en die draaien in een waarde van de arduino kunt gebruiken. De echte code begint aan het einde van "ymove".
Hier, hoek de waarden voor X en Y (ib en iby) worden geschaald om te compenseren voor het verschil in afstand per die ontstaat, die het beeld de verder dat het is vanuit het midden (X en Y van 100) zou uitstrekken. Vervolgens cijfers het hoever elke stap van de laser moet worden. Om dat te doen, cijfers het eerste hoever elke as moet reizen:
MX = abs (ib - distx);
mijn = abs (iby - disty);
Vervolgens neemt de maximumwaarde tussen de twee en verdeelt ze allebei door die waarde:
Maxx = max(mx,my);
mijn = mijn/maxx;
MX = mx/maxx;
Dit resulteert in een van de waarden (mijn of mx) wordt één, en anderzijds een decimaal.
Het volgende deel maakt gebruik van deze, als de volgende terwijl verklaring herhaalt de leegte "pos();" het aantal keren er naar om elke as de afstand moet verplaatsen.
POS(); enkel detrmines als de waarde uit te gaan naar de luidsprekers moet gaan omhoog of omlaag, dan wordt toegevoegd of afgetrokken van de mx of mijn dienovereenkomstig, schrijft het vervolgens de analoge pin gonna die spreker aan de nieuwe, gewijzigde waarde, na het vertragen van de tijd die is opgegeven in het begin in "del".
Dan terug gaat, en het doet allemaal weer. honderden
keer per seconde.