Hand spåra mekanisk Arm - Pyduino + språng Motion (4 / 11 steg)
Steg 4: Konfigurera Pyduino skiss
För att vi att dynamiskt styra vår Arduino enhet vi behöver ladda upp en skiss på den så att den kan tolka meddelanden skicka vi det från vår Python kod. Inrättandet av denna skiss är ganska enkelt. Arduino enheten kommunicerar med vår dator över den seriella porten. För mer information om seriell funktioner för Arduino kolla: http://www.arduino.cc/en/Reference/Serial . Arduino enheten kommer att kontrollera om det har alla tecken som finns i följetong mottagningsbufferten och om den gör det kommer att vara att tolka det inkommande meddelandet. Vid mottagning hela meddelandet enheten sedan tolkar vad man ska göra oavsett om det är en Läs funktion, skriv funktion eller ställa in en pin-läge. Detta är skiss är mångsidig nog att kunna ställa in pin lägen, utför Läs- och skrivbehörighet för digital och analog värden samt utför servo skriver. Några ytterligare funktioner kommer att behöva kodas i dig själv men för att detta projekt vi behöver inte tillägga något.
Kolla in den i koden nedan. Detta är vad vi kommer att använda för att få en servomotor arbetar med rörelsekontroll språng. Vi vill kunna få en servo arbeta innan vi gå vidare och få alla 4 där. Denna fil finns också tillgänglig på github sidan för detta instructable på: https://github.com/theown1/pyduino_leapmotion/blob...
Du kan gå vidare och ladda upp denna skiss till Arduino enheten. När du laddar upp det, bör du få en bild som liknar som ovan. En sak du kan behöva skriva ner är platsen för din Arduino enhet på din dator, du kan hitta detta på nederkant högra hörnet av arduino programmet när du laddar upp en skiss. För mig ligger min arduino på: / dev/ttyACM0
/*
* Skiss att styra stiften på Arduino via seriella gränssnittet
*
* Kommandon genomförs med exempel:
*
* - RD13 -> läser Digital ingång på stift 13
* - RA4 - > läser Analog ingång på pin 4
* - WD13:1 -> skriver 1 (hög) till digital utgång stift 13
* - WA6:125 -> skriver 125 till analog utgång pin 6 (PWM)
*/
#include
char drift; Innehar drift (R, W,...)
char läge; Innehar läget (D, A)
int pin_number; Innehar den pin-kod
int digital_value; Håller det digitala värdet
int analog_value; Håller det analoga värdet
int value_to_write; Innehar det värde som vi vill skriva
int wait_for_transmission = 5; Försening i ms för att få den seriella data
skapa objekt för att styra en servo servo
maximalt åtta servo objekt kan skapas
Servo SERVO2;
int SERVO2_PIN = 2; Detta är där servo är kopplad till vår styrelse
void setup() {
Serial.BEGIN(9600); Serial Port på 9600 baud
Serial.setTimeout(500); Istället för standard 1000ms, för
att påskynda Serial.parseInt()
SERVO2.attach(SERVO2_PIN);
SERVO2.write(180); Återställ till ursprungliga position
}
void servo_write (int pin_number, int servo_value) {
/*
* Utför en servo skriva på pin_number med servo_value
* Värdet måste vara 0 till 180 (kan ändras beroende på servo)
*/
om (pin_number == SERVO2_PIN)
{
SERVO2.write(servo_value);
Delay(10);
}
}
void loop() {
Kontrollera om tecken som finns i bufferten
om (Serial.available() > 0)
{
tolka information
artighet av lekum
operation = Serial.read();
Delay(wait_for_transmission); Om inte försenas, är andra tecknet inte korrekt läsa
läge = Serial.read();
pin_number = Serial.parseInt(); Väntar på en int översändas
om (Serial.read()==':')
{
value_to_write = Serial.parseInt(); Samlar in värdet skrivs
}
om vi får rätt ingång skriva servo
om (operation == "W")
{
om (läge == 'S ")
{
servo_write (pin_number, value_to_write);
}
}
}
}