Stap 10: P.3, Code: praten met een Servo
Seriële communicatie in de Arduino de Setup functie op 9600 baud-rate (bits per seconde) te starten:
Serial.begin(9600);
Ik afdrukken meestal een signaal aan het einde van de functie Setup om te bevestigen dat de Arduino werkt en klaar om te beginnen krijgen van seriële input is:
Serial.println ("Ik werk!");
Nu, in de hoofdlus, wij willen wachten totdat 3 tekens (bytes) hebben ontvangen, de Serial.available() functie vertelt ons hoeveel bytes in de buffer, zodat we poll het totdat de waarde 3 bereikt:
Als (Serial.available() == 3) {}
... wat code...
}
We gebruiken om te lezen bytes van de buffer, Serial.read(), die ook de Lees byte uit de buffer wordt gewist. Aangezien we 3 bytes ontvangen, betekent dit 3 oproepen naar Serial.read(). Elke byte vertegenwoordigt een cijfer gecodeerd in ASCII. Neem een kijkje op deze website: http://www.asciitable.com/
Verwittiging iets over waar 0, 1, 2... zijn? Dat klopt! Ze beginnen op 48, 49, 50...! Dat betekent dat u van de ASCII-waarde te krijgen van het overgedragen cijfer wilt aftrekken van 48 . (Ons daarvoor bedanken, want we waren stumped voor ongeveer een dag, totdat het scolton uitgelegd)
De buffer is FIFO (eerst in first-out), zo lezen we de honderden cijfers eerste, de tientallen tweede, en de laatste (dezelfde volgorde zoals ze werden toegezonden):
hoek (Serial.read() - 48) = * 100;
hoek += (Serial.read() - 48) * 10;
hoek += (Serial.read() - 48);
Nu, we willen schrijven die hoek naar een servo - de servo-bibliotheek te importeren:
#include < Servo.h >
Een servo-object voordat de installatiemethode declareren (dit is ook waar u declareert de hoek, die een geheel getal moet, of een vluchtige korte als je pedant = P):
Servo myServo;
Ten slotte, schrijven de ontvangen hoek binnenkant van het Serial.available() if-statement:
myServo.write(angle);
Als u gevolgd langs de laatste stap (of gecompileerd in het voorbeeld), moet u een console gebaseerde servo controller klaar om te gaan!
Hier is een video van ons testen van het gehele systeem. Het toepassingsgebied is het toezicht van de servo PWM golfvorm, Tim is het invoeren van getallen tussen 0 en 176 op de Mac's console en de Arduino is het instellen van de hoek van een servo:
YouTube video beschrijving:
"A command line tool geschreven in Objective-C om de positie van een servomotor met seriële interface en een Arduino Mega 2560 - de eerste stap in mijn robotarm project bepalen."
Ik heb een kopie van de Arduino-side-code toegevoegd zodat je of de zender en de ontvanger testen kunt. De hardware is vrij eenvoudig, steek een servo's signaal stekker op pin van de Arduino Mega's 50 (u kunt dit wijzigen), sluit de grond pin op de Arduino van grond en sluit + 5V op een externe voeding met, zijn grond ook aangesloten op de Arduino is gemalen. Het is noodzakelijk dat u een externe voeding gebruiken zoals de stromingen getrokken door een servo kunnen leiden de Arduino te brownout tot of onregelmatig gedragen.