Jansen koppling Robot (4 / 9 steg)
Steg 4: Ladda upp arduino skiss
Ladda upp den medföljande skissen till arduino.
Denna skiss är är sätta upp till sätta arduino att sova om inte pekplattan trycks, och y-axeln av joysticks konfigurationsutrymmet för att styra operate rotation servon därmed.
Syfte: Att driva två servon med två joysticks, som används för att driva två ben för en robot. I föreningen gör kurs, erbjuds av University of South Florida.
Skapad av: Brian Cantler / / datum: 12/01/2014
#include #include //this AVR bibliotek innehåller metoderna att kontroller sömn lägen #define interruptNumber 0 //since stift 2 används för extern avbrottet, fästas för att avbryta nummer 0 #define TouchPadPin 2 //connect touch sensor utdata (pin "S") till D2 (och pin "G" till GND och pin "V" till 5V)
flyktiga byte TouchPadEventFlag; //all variabler som ändras inom en ISR måste dimensioneras som "flyktig" //this variabel används för att berätta huvudloop för att avbryta händelse inträffade.
CONST int servo1 = 3; identifierar den första servon som att vara ansluten till digital stift 3 const int servo2 = 10; identifierar andra servo som att vara ansluten till digital stift 10 const int joy1 = 3; identifierar den första joysticken som att anslutas till analoga stift 3 const int joy2 = 4; identifierar andra joysticken som att vara ansluten till analog pinne 4
int servoVal; variabeln som används för att läsa värdena från det analoga stiftet
Servo myservo1; skapar objekt med servo för att kontrollera första servo Servo myservo2; skapar objekt med servo för att styra andra servo
void setup() {
Servon myservo1.attach(servo1); fäster den första servo myservo2.attach(servo2); fäster andra servo
Initiera följetong Serial.begin(9600); pinMode(13,OUTPUT); uppsättningar stift 13 som en utgång så vi kan använda den inbyggda i ledde på arduino för att övervaka när arduino drivs på digitalWrite(13,LOW); vänder stift 13, en av den inbyggda lysdioder på arduino, av pinMode (TouchPadPin, indata); definierar den avbryta pin som en input digitalWrite(2,HIGH); aktiverar den inre pull-up resistorn för att dra det till hög när styrplattan inte trycks
}
void loop() {
Visar joystick värdena med seriell övervaka outputJoystick();
Läs joystick sitt värde (värde mellan 0 och 1023) servoVal = analogRead(joy1); servoVal = karta (servoVal, 0, 2500, 70, 180); skalar joystick värdena för att kunna använda det med servo (resultat mellan 90 och 180)
myservo2.write(servoVal); ställer den 360 servon hastighet efter det skalade värdet
Läs joystick två värde (värde mellan 0 och 1023) servoVal = analogRead(joy2); servoVal = karta (servoVal, 0, 2500, 70, 180); skalar joystick värdena för att kunna använda det med servo (resultat mellan 90 och 180)
myservo1.write(servoVal); ställer den 360 servon hastighet efter det skalade värdet
Delay(15); väntar på servo till fart upp till skalad värde sleepSetup(); ligger kvar på ~ 27 mA tills pekplattan trycks på pin 2
}
/ ** * Visar joystick värdena i följetong monitor * / void outputJoystick() {
Serial.Print(analogRead(joy1)); visar joystick värdena för första joystick i följetong monitor Serial.print ("- joystick_one---"); identifierar de värden som visas är för första joystick Serial.print(analogRead(joy2)); visar joystick värdena för andra joystick i följetongen övervaka Serial.println ("- joystick_two---"); identifierar de värden som visas är för andra joystick}
void sleepSetup() {sleep_enable(); attachInterrupt (0, pinInterrupt, låg); //Sets stift 2 som ett avbrott och fäster avbryta tjänsten rutin (ISR) set_sleep_mode(SLEEP_MODE_PWR_DOWN); //define power ned sleep mode digitalWrite(13,LOW); //turns LED av för att ange sleep mode sleep_cpu(); //Set sömn aktivera (SE) bit, detta sätter ATmega att sova Serial.println ("strandbot drivs på"); //When det vaknar upp på grund av avbrottet programmet fortsätter med instruktioner efter sleep_cpu() digitalWrite (13 HÖG); vänder den inbyggda i LED på arduino att indikera att arduino har vaknat}
void pinInterrupt() //ISR {sleep_disable(); //this är viktigt. Det är möjligt att avbrottet kallas mellan verkställande "attachInterrupt(...)" och sleep_CPU() i de viktigaste loop //if som sker utan sleep_disable() i ISR, ISR skulle kallas, avbrottet lossnat och enheten somna. eftersom avbrottet skulle inaktiveras på den punkten, skulle det finnas något sätt att vakna enheten längre. genom att sätta sleep_disable() i ISR, skulle sleep_cpu() inte vara effektiv under det kretsar, dvs huvudloop skulle köra en mer tid //and och ordentligt fäst på avbryta innan du slår sleep_cpu() en andra gång. På den punkten enheten skulle somna, men //the avbrott skulle nu vara aktiverat, dvs väckning kan induceras. detachInterrupt (0); //disable avbrottet. Detta debounces effektivt avbrott mekanismen för att förhindra flera avbrott samtal.
}