DIY handgjorda Hexapod med arduino (Hexdrake) (19 / 19 steg)
Steg 19: Programmera fjärrkontrollen:
Med alla tidigare lärande i varje modul behöver bara att anpassa programmen till kännetecknen av fjärrkontrollen genom att länka i två program: en för arduino fjärrkontrollen fungerar som en sändare och ett annat program för arduino hexapod fungerar som mottagare.
Enligt motion gränserna för servon, som jag fick från min tidigare instructable, måste du använda karta kommandot arduino för att konvertera värden som potentiometrar och accelerometern inom de lägsta gränsvärdena utbud av vinkar av servon. Att vara som följer:
< p > värden [0] = karta (värden [0], 23, 1000, 900, 1500); Värde från reglaget potten < br > värden [1] = karta (värden [1], 23, 1000, 2100, 1540); Värde från reglaget pott
värden [3] = karta (värden [3], 1, 1033,-295, 295); Värde från y-axeln av höger styrspak
värden [4] = karta (värden [4], 1, 1023,-295, 295); Värde från y-axeln på vänster joystick
värden [5] = karta (värden [5], 1, 1023,-360, 360); Värde från x-axeln på vänster joystick
värden [6] = karta (värden [6], 170, 500,-360, 360); Värde från x-axeln av accelerometern
värden [7] = karta (värden [7], 170, 510,-360, 360); Värde från y-axeln av accelerometern < /p >
Med någon av knapparna på en av joysticks jag ville använda exemplet på arduino sida som består i att räkna antalet gånger som en knapp trycks att skapa olika lägen där hexapod kommer att flytta.
http://Arduino.cc/en/tutorial/ButtonStateChange
< p > / * staten ändra upptäckt (edge detection) < br > i det här exemplet visar hur att upptäcka när en knapp eller knappen ändras från off till på
och på off.
*/
Denna konstant kommer inte att ändra:
CONST int buttonPin = 2; PIN-koden som tryckknappen fästs
CONST int ledPin = 13. PIN-koden att LED är ansluten till < /p >< p > / / variabler kommer att förändra:
int buttonPushCounter = 0; räknaren för antal knapptryckningar
int buttonState = 0; aktuell status för knappen
int lastButtonState = 0; tidigare tillstånd av knappen < /p >< p > void setup() {
initiera knappen PIN-koden som en ingång:
pinMode (buttonPin, ingång);
initiera LED som en utgång:
pinMode (ledPin, produktionen);
initiera seriell kommunikation:
Serial.BEGIN(9600);
} < /p >< p > void loop() {
Läs det tryckknapp ingångsstiftet:
buttonState = digitalRead(buttonPin);
Jämför buttonState till sitt tidigare tillstånd
om (buttonState! = lastButtonState) {
om staten har förändrats, öka räknaren
om (buttonState == hög) {
om det aktuella läget är hög då knappen
wend från av till på:
buttonPushCounter ++;
Serial.println("on");
Serial.Print ("antal knapp skjuter:");
Serial.println(buttonPushCounter);
}
annat {
om det aktuella läget är låg då på knappen
wend från på till:
Serial.println("off");
}
}
spara det aktuella läget som den förra staten,
för nästa gång genom öglan
lastButtonState = buttonState;
tänds lampan varje fyra knapp skjuter av
Kontrollera den modulo om knappen push counter.
den modulo funktion ger dig resten av
uppdelningen av två tal:
om (buttonPushCounter % 4 == 0) {
digitalWrite (ledPin, hög);
} annat {
digitalWrite (ledPin, låg);
}
} < /p >
Jag konvertera detta exempel och anpassa sig till min sketchs av fjärrkontrollen och till receptorn. Så
Så skapa jag tre typer av rörelser:
- Den första som tillåter linjär potentiometer och joysticks flytta hexapod
- Andra gör joysticks, potentiometer och accelerometer flytta hexapod
- Och den sista läget låta flytta hexapod promenad, gå baklänges, etc flyttar två joysticken samtidigt