CRANE spelet (3 / 34 steg)
Steg 3: Gör två saker på en gång!
Nästa sak att göra code-wise är att jamma tillsammans kontroller för stegmotor och DC-motor så kan du styra båda på en gång.
Om du tittar på koden i de föregående stegen ser du att jag använt olika stift och variabelnamn för varje uppsättning Provningsmetod. Detta låter oss jamma dem tillsammans utan mycket ändringar.
Jag har läst att det finns mycket bättre sätt att kombinera block av kod, men jag är fortfarande lärande, så allt jag har gjort är klipp-och-förflutna två program tillsammans.
Ive ' incrased anaolog värdena som används som "center" position styrspaken. Detta bidrar till att hindra dig från att oavsiktligt kör fel motorn.
Senare får vi skarva i en annan sats av kod för att styra motorn för att öppna och stänga klo!
Här är koden för Arduino att styra en stegmotor och en DC-motor (märkt DC motor A, eftersom vi kommer att lägga till B senare)
/////////////////////// ARDUINO CODE //////////////////////////
joystickj med 2 krukor att styra en stepper och DC motor hastighet och riktning *** / /
deklarera pins för Stepper
int potPin_X = 1;
int Step_X = 13.
int Dir_X = 12;
int Enable_X = 8;
deklarera värden för stepper
int Speed_X = 0; steg hastighet (fördröjning mellan stegen)
int val_X = 0;
int h = 0;
deklarera stift för DC-motor A
int potPin_A = 2; Välj input PIN-koden för potentiometer
int val_A = 0; variabel för att lagra värdet kommer från sensorn
Deklarera variabler för DC A
int j = 0;
int Dir_A = 4;
int Speed_A = 5;
void setup() {
setup upp stepper pins
pinMode (Step_X, OUTPUT);
pinMode (Dir_X, OUTPUT);
pinMode (Enable_X, OUTPUT);
setup DC motor A stift
pinMode (Dir_A, OUTPUT);
pinMode (Speed_A, OUTPUT);
Serial.BEGIN(9600); Observera att seriell comm kan användas för att felsöka
men det kommer att sakta ner koden och bromsa stegmotor mycket (och vara förvirrande för mig)
}
void loop() {
STEPPER LÄS OCH KONTROLL / / /
Läs placeringen av joystick och beräkna värden för stegmotor
val_X = analogRead(potPin_X); läsa värdet från sensorn
h = val_X - 517; 517 är center positioner - hur långt från centrum?
h = abs(h); absolut värde
Speed_X = 70000/h; Denna matematik inverterar värdet och skalor som behövs
70000 värde hittats genom försök och misstag
Fördröjningen mellan steg bestämmer hastigheten på motorn
/ / Fördröjning så, upp = hastighet ner
styra stepper motor / /
om (val_X > = 530) {
digitalWrite(Enable_X,LOW); aktiverar
digitalWrite (Dir_X, hög); Ange riktning
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
om (val_X < = 500) {
digitalWrite(Enable_X,LOW); / / aktivera
digitalWrite (Dir_X, låg); Andra hållet
digitalWrite(Step_X,HIGH);
delayMicroseconds(2);
digitalWrite(Step_X,LOW);
delayMicroseconds(Speed_X);
}
om (val_X < = 530 & & val_X > = 500) {
digitalWrite(Enable_X,HIGH); Inaktivera stepper motor om joystic är i centrum
}
DC MOTOR A - LÄS OCH KONTROLL / / /
Läs placeringen av joystick och beräkna avstånd och från center
val_A = analogRead(potPin_A); läsa värdet från sensorn
j = val_A - 517; 517 är center positioner - hur långt från centrum
j = abs(j); absolut värde
sätta några gränser för j att hålla PWM värden användbara
under 100 motorn kommer inte att flytta och PWM max är 255
om (j > = 510) {
j = 510; det mesta PWM stift kan göra är 255
}
om (j < = 200 & & j > = 10) {
j = 200. under 100 PWM motorn gör en hög pich låter och rör sig inte
}
om (j < = 10) {
j = 0; under 10 är joysticken mycket nära till centrum
}
Kör DC-motor A baserat på analog insignal från joystick
om (val_A > = 530) {
digitalWrite (Dir_A, hög); andra hållet
analogWrite (Speed_A, j/2); PWM ut (delar med 2 eftersom max är 255)
}
om (val_A < = 500) {
digitalWrite (Dir_A, låg); //
analogWrite (Speed_A, j/2); //
}
om (val_A < = 530 & & val_A > = 500) {
analogWrite (Speed_A, 0); Stäng av om joysticken är i centrum
}
skriva ut värden för felsökning
Serial.Print(val_A); Skicka nummer till PC så du kan se vad det händer
Serial.Print(",");
Serial.println(j);
}