Stap 5: Arduino code.
Hoe werkt de code is aan het begin van de lus wij controleren voor de waarde op de sensor, en dan beslissen als we moeten vooruit, of draai. It's gonna verlangen sommige test op de werkelijke waarden nodig om te beslissen of er een bult of wissen. Controleer ook op de documentatie voor de motor shield, welke pinnen zijn toegewezen voor de motorische controle pin en pwm pinnen. PWM bepaalt welke spanning aan uw motoren vervoederd mogen worden, en controle ingesteld of de motor hoog moet, of laag. Op, en uit, respectievelijk.
Ik ben met behulp van de onderstaande code. wijzigen M1, M2, E1, E2, volgens het pin-toewijzingen voor uw schild, en de sensor_max, de sensor_min volgens uw IR sensor-waarde wanneer er een obstructie. ook, volgens de methode, forward_motors(), er is een lijn, digitalWrite(M1,LOW); en digitalWrite(M2,LOW); .. .modify laag, te hoog, als de motoren zijn spinnen achteruit. Doe het tegenovergestelde voor reverse_motors() methode.
/ * volgorde:
willekeurige rotatie vertraging, willekeurige reverse vertraging, willekeurige
1. eerste boot, doen een reeks Lees, spin 10times en schakel gemiddelde.
2. lopen vooruit op de 50counts, vervolgens opnieuw opstarten.
*/
int in1 = A4; invoer pin
int led1 = 12; Blink led - signalen
int resetpin = 12;
int M1 = 7;
int M2 = 4;
int E1 = 6; linker motor
int E2 = 5; goede motor
int fspd = 255; voorwaartse snelheid vertraagd
int mspd = 255; normale motorsnelheid
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, uitvoer);
pinMode (M2, uitvoer);
pinMode (A1, INPUT);
Serial.begin(4800);
}
void loop //main lus volgorde
{
run_motor_seq2();
Serial.println("Count:");
Serial.println(iCount);
Serial.println ("waarde van de sensor:");
Serial.println(sensor_val);
}
VOID run_motor_seq2()
{
ddelay = 0;
sensor_val = 0;
sensor_val = analogRead(A1);
Als (sensor_val > sensor_min)
{
run_bump_seq();
iCount = 0;
count_limit = rand(35,50);
}
anders
{
Als (icount > 50)
{
run_bump_seq();
iCount = 0;
count_limit = rand(35,50);
}
anders
{
forward_motors();
}
}
iCount ++;
}
VOID run_bump_seq()
{
vertraging van de motor? of stoppen van de motor?
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 methoden
VOID forward_motors()
{
digitalWrite(M1,LOW); HOGE
digitalWrite(M2,LOW);
analogWrite(E1,fspd); De controle van de snelheid van de PWM
analogWrite(E2,fspd); De controle van de snelheid van de PWM
}
VOID brake_motors()
{
analogWrite(E1,0);
analogWrite(E2,0);
}
VOID reverse_motors()
{
digitalWrite(M1,HIGH); LAGE
digitalWrite(M2,HIGH);
analogWrite(E1,mspd); De controle van de snelheid van de PWM
analogWrite(E2,mspd); De controle van de snelheid van de PWM
}
ongeldig turn_motor() //turn toch?
{
digitalWrite(M1,HIGH);
digitalWrite(M2,HIGH);
analogWrite(E1,0); De controle van de snelheid van de PWM
analogWrite(E2,fspd); De controle van de snelheid van de PWM
}
---knipperen methoden
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);
}
---helper methodes;
int rand (int mini, int maxi) //random waarden
{
int randval = random(mini,maxi);
Return randval;
}
de arduino ide heeft een handige functie waarmee u de waarden die u weergeven controleren kunt wilt,
Net sluit de USB-kabel op de arduino en de pc, op de arduino, klikt u op
tools > seriële monitor. en je krijgt alle waarden uitgespuwd uit met de lijnen van de Println()
uit de bovenstaande code.