Stap 4: Upload de arduino schets
Het uploaden van de meegeleverde schets aan de arduino.
Deze sketch is set up te zetten van de arduino te slapen als de zweem stempelkussen niet wordt ingedrukt, en de y-as van elk van de joysticks remapped waarmee de operate rotatie servo's dienovereenkomstig.
Doel: Om te werken van twee servo's met behulp van twee joysticks, die worden gebruikt voor het bedienen van de twee benen voor een robot. MAKE Course, aangeboden door de Universiteit van Zuid-Florida in de vereniging.
Gemaakt door: Brian Cantler / / datum: 12/01/2014
#include #include //this AVR bibliotheek bevat de methoden dat de slaap modi #define interruptNumber 0 //since pin 2 wordt gebruikt voor de externe interrupt, in besturingselementen is gekoppeld om te onderbreken nummer 0 #define TouchPadPin 2 //connect touch sensor output (pin "S") naar D2 (en "G" aan GND spelden en "V" pin naar 5V)
vluchtige byte TouchPadEventFlag; //all variabelen die zijn gewijzigd binnen een ISR moeten worden gedimensioneerd als 'vluchtige' //this variabele zal worden gebruikt om de hoofdlus vertellen dat een interrupt-gebeurtenis zich heeft voorgedaan.
Const int servo1 = 3; identificeert de eerste servo als het wordt aangesloten op de digitale pen 3 const int servo2 = 10; identificeert de tweede servo als het wordt aangesloten op de digitale pin 10 const int joy1 = 3; identificeert de eerste joystick als worden aangesloten op analoge pin 3 const int joy2 = 4; identificeert de tweede joystick als het wordt aangesloten op analoge pin 4
int servoVal; variabele gebruikt om te lezen van de waarden van de analoge pin
Servo myservo1; maakt servo-object om te bepalen van de eerste servo Servo myservo2; maakt servo-object om te bepalen van de tweede servo
VOID Setup {}
Servo's myservo1.attach(servo1); hecht de eerste servo myservo2.attach(servo2); hecht de tweede servo
Initialiseren van seriële Serial.begin(9600); pinMode(13,OUTPUT); sets pin 13 als uitgang zodat we gebruik van de ingebouwde maken kunnen LED op de arduino te controleren wanneer de arduino wordt aangedreven op digitalWrite(13,LOW); bochten pin 13, een van de ingebouwde LEDs op de arduino, uit pinMode (TouchPadPin, INPUT); definieert van de interrupt-pin als een invoer digitalWrite(2,HIGH); Hiermee activeert u de interne pull-up weerstand om te trekken op hoog wanneer de zweem stempelkussen niet wordt ingedrukt
}
void loop {}
Hiermee geeft u de waarden van de joystick met behulp van de seriële monitor outputJoystick();
Lees joystick iemands (waarde tussen 0 en 1023) servoVal = analogRead(joy1); servoVal = kaart (servoVal, 0, 2500, 70, 180); Hiermee schaalt u de waarden van de joystick om te kunnen gebruiken met de servo (resultaat tussen 90 en 180)
myservo2.write(servoVal); Hiermee stelt u de 360 servo's snelheid volgens de geschaalde waarde
Lees joystick two's (waarde tussen 0 en 1023) servoVal = analogRead(joy2); servoVal = kaart (servoVal, 0, 2500, 70, 180); Hiermee schaalt u de waarden van de joystick om te kunnen gebruiken met de servo (resultaat tussen 90 en 180)
myservo1.write(servoVal); Hiermee stelt u de 360 servo's snelheid volgens de geschaalde waarde
delay(15); wacht tot de servo te versnellen naar de geschaalde waarde sleepSetup(); blijft op ~ 27 mA totdat het touchpad is gedrukt op pin 2
}
/ ** * De joystick-waarden worden weergegeven in de seriële monitor * / outputJoystick() {} ongeldig
Serial.Print(analogRead(joy1)); Hiermee geeft u de waarden van de joystick voor de eerste joystick in de seriële monitor Serial.print ("- joystick_one---"); identificeert de waarden die worden weergegeven zijn voor de eerste joystick Serial.print(analogRead(joy2)); displayes de waarden van de joystick voor de tweede joystick in de seriële monitor Serial.println ("- joystick_two---"); identificeert de waarden die worden weergegeven zijn voor de tweede joystick}
VOID sleepSetup() {attachInterrupt (0, pinInterrupt, LOW), sleep_enable(); //Sets pin 2 als een interrupt en hecht Interrupt Service Routine (ISR) set_sleep_mode(SLEEP_MODE_PWR_DOWN) //define uitzetten-slaap modus digitalWrite(13,LOW); //turns de LED af aan slaap modus sleep_cpu(); //Set slaap inschakelen (SE) bit, dit zet de ATmega slaap Serial.println ("de strandbot wordt aangedreven op"); //When het wakker als gevolg van de interrupt het programma met de instructie blijft na sleep_cpu() digitalWrite (13 HOGE); draait de ingebouwde in LED op de arduino om aan te geven dat de arduino heeft gewekt}
VOID pinInterrupt() //ISR {sleep_disable(); //this is belangrijk. Het is mogelijk dat de interrupt heet tussen het uitvoeren van "attachInterrupt(...)" en sleep_CPU() in de hoofdlus //if dat gebeurt zonder de sleep_disable() in de ISR, de ISR zou worden genoemd, de interrupt los en het apparaat laten inslapen. Aangezien de interrupt zou op dat punt worden uitgeschakeld, zou er geen manier om het apparaat niet meer wakker te worden. door sleep_disable() in de ISR, zou sleep_cpu() geen effectieve tijdens die lus, d.w.z. de hoofdlus zou stormloop één meer tijd //and vervolgens goed hechten de interrupt alvorens naar de sleep_cpu() een tweede keer. Op dat punt het apparaat zou gaan slapen, maar //the interrupt zou nu worden geactiveerd, d.w.z. wakker kan worden opgewekt. detachInterrupt (0), //disable de interrupt. Dit debounces effectief de interrupt-mechanisme om te voorkomen dat meerdere interrupt aanroepen.
}