MOP robot för den wifey (5 / 6 steg)
Steg 5: Arduino kod.
hur koden fungerar är i början av slingan vi kontrollera värdet på sensorn och sedan besluta om vi måste gå framåt, eller vända. Det kommer att kräva några test på faktiska värden krävs för att avgöra om det är en bula eller avmarkera. också, kolla på dokumentation för motor shield, vilka stift tilldelas för motorisk kontroll pin och pwm stift. PWM bestämmer vad spänning ska matas till din motors och kontroll anger om motorn ska vara hög, eller låg. Och Off, respektive.
Jag använder koden nedan. ändra M1, M2, E1, E2, enligt Stifttilldelningar för din sköld, och sensor_max, sensor_min enligt din IR sensor värde när det finns ett hinder. också, enligt metoden, forward_motors(), det är en linje, digitalWrite(M1,LOW); och digitalWrite(M2,LOW); .. .modify låg till hög, om motorerna snurrar baklänges. göra motsatsen för reverse_motors() metod.
/ * sekvens:
slumpmässigt spin dröjsmål, slumpmässiga vända dröjsmål, random
1. den första boot, gör en Läs sekvens, snurra 10times och kolla genomsnittet.
2. run fram på 50counts, sedan starta om.
*/
int in1 = A4; ingångsstift
int led1 = 12. Blink ledde - signaler
int resetpin = 12;
int M1 = 7.
int M2 = 4;
int E1 = 6; vänster motor
int E2 = 5; rätt motor
int fspd = 255; framåt långsammare hastighet
int mspd = 255; normala varvtal
int ddelay = 0;
int icount = 0;
int count_limit = 35.
int min_delay = 250;
int max_spin_delay = 550;
int max_rev_delay = 500.
int sensor_max = 60.
int sensor_min = 69.
int sensor_min = 20;
int sensor_val = 0;
void setup()
{
pinMode (M1, OUTPUT);
pinMode (M2, OUTPUT);
pinMode (A1, indata);
Serial.BEGIN(4800);
}
void loop() //main loop sekvens
{
run_motor_seq2();
Serial.println("count:");
Serial.println(iCount);
Serial.println ("sensor värde:");
Serial.println(sensor_val);
}
void run_motor_seq2()
{
ddelay = 0;
sensor_val = 0;
sensor_val = analogRead(A1);
om (sensor_val > sensor_min)
{
run_bump_seq();
iCount = 0;
count_limit = rand(35,50);
}
annat
{
om (icount > 50)
{
run_bump_seq();
iCount = 0;
count_limit = rand(35,50);
}
annat
{
forward_motors();
}
}
iCount ++;
}
void run_bump_seq()
{
avmattningen motor? eller stoppa motorn?
brake_motors();
blink_fast();
reverse_motors();
ddelay = rand(min_delay,max_rev_delay);
Delay(ddelay);
brake_motors();
Delay(min_delay);
turn_motor();
ddelay = rand(min_delay,max_spin_delay);
Delay(ddelay);
brake_motors();
Delay(max_rev_delay);
blink_fast();
}
---motor metoder
void forward_motors()
{
digitalWrite(M1,LOW); HÖG
digitalWrite(M2,LOW);
analogWrite(E1,fspd); PWM varvtalsreglering
analogWrite(E2,fspd); PWM varvtalsreglering
}
void brake_motors()
{
analogWrite(E1,0);
analogWrite(E2,0);
}
void reverse_motors()
{
digitalWrite(M1,HIGH); LÅG
digitalWrite(M2,HIGH);
analogWrite(E1,mspd); PWM varvtalsreglering
analogWrite(E2,mspd); PWM varvtalsreglering
}
void turn_motor() //turn rätt?
{
digitalWrite(M1,HIGH);
digitalWrite(M2,HIGH);
analogWrite(E1,0); PWM varvtalsreglering
analogWrite(E2,fspd); PWM varvtalsreglering
}
---blinka metoder
void blink_fast()
{
digitalWrite(led1,HIGH);
Delay(100);
digitalWrite(led1,LOW);
Delay(100);
digitalWrite(led1,HIGH);
Delay(100);
digitalWrite(led1,LOW);
}
void blink_slow()
{
digitalWrite(led1,HIGH);
Delay(500);
digitalWrite(led1,LOW);
Delay(100);
digitalWrite(led1,HIGH);
Delay(500);
digitalWrite(led1,LOW);
}
---hjälpare metoder;
int rand (int mini, int maxi) //random värden
{
int randval = random(mini,maxi);
återvända randval;
}
arduino ide har en tjusig funktion som kan övervaka de värden du vill visa,
bara Anslut USB-kabeln på arduino och pc, på arduino, klicka på
Verktyg > seriell monitor. så får du alla värden spys ut med Println() linjer
från koden ovan.