Lätt Arduino ljus efter Robot (4 / 4 steg)
Steg 4: kod
Vänligen respektera att det tog ett tag att lista ut och skriva denna kod:
Kod av Jason McLaughlin
2015
CONST int channel_a_enable = 6; starta motorn en/Left
CONST int channel_a_input_1 = 4; positiva/negativa 1
CONST int channel_a_input_2 = 7. positiv/negativ 2
CONST int channel_b_enable = 5; Start motor b/höger
CONST int channel_b_input_3 = 3; positiva/negativa 1
CONST int channel_b_input_4 = 2; positiv/negativ 2
CONST int RightSensor = A1; Läs rätt sensorn
CONST int LeftSensor = A2; Läs vänstra sensorn
Varierande definitioner
int SensorLeft; Detta lagrar värdet för vänster givarstaven att använda senare i skissen
int SensorRight; Här lagras värdet av rätt givarstaven att använda senare i skissen
int SensorDifference; Detta värde används för att avgöra skillnaden mellan vänster och höger
void setup() {
pinMode (channel_a_enable, produktionen); Kanal A aktiverar
pinMode (channel_a_input_1, produktionen); Kanalisera en ingång 1
pinMode (channel_a_input_2, produktionen); Kanalisera en ingång 2
pinMode (channel_b_enable, produktionen); Kanal B aktiverar
pinMode (channel_b_input_3, produktionen); Kanal B ingång 3
pinMode (channel_b_input_4, produktionen); Kanal B ingång 4
pinMode (LeftSensor, indata); Definierar detta stift som indata. Arduino läser värden från detta stift.
pinMode (RightSensor, indata); Definierar detta stift som indata. Arduino läser värden från detta stift.
digitalWrite (A1, hög); Gör det möjligt för LDR
digitalWrite (A2, hög); Gör det möjligt för LDR
Serial.BEGIN(9600); Kan en seriell anslutning via Arduino till antingen USB eller UART (stift 0 & 1). Observera att överföringshastigheten är inställd 9600
Serial.println ("\nBeginning ljus söker beteende"); Placeras i slutet av void Setup() så att det körs en gång, precis innan den ogiltiga Loop()}
void loop() {SensorLeft = 1023 - analogRead(LeftSensor); / / Detta läser värdet i sensorn, och sedan sparar den till motsvarande heltal.
Delay(1);
SensorRight = 1023 - analogRead(RightSensor); Detta läser värdet i sensorn och sedan sparar den till motsvarande heltal.
Delay(1);
SensorDifference = abs (SensorLeft - SensorRight); Detta beräknas skillnaden mellan de två sensorerna och sedan sparar den till ett heltal.
Detta avsnitt av skiss används för att skriva ut värdena i de / / sensorer via seriell till datorn. Användbart för att bestämma / / om sensorer arbetar och om koden också fungerar korrekt.
Serial.Print ("vänster Sensor ="); Skriver ut texten i citat.
Serial.Print(SensorLeft); Skriver ut värdet på vänster sensorn.
Serial.Print("\t"); Skriver ut en flik (mellanslag).
Serial.Print ("rätt Sensor ="); Skriver ut texten i citat.
Serial.Print(SensorRight); Skriver ut värdet av rätt sensorn.
Serial.Print("\t"); Skriver ut en flik (mellanslag).
Detta avsnitt av skiss är vilken faktiskt interperets data och sedan körs motorerna därefter.
om (SensorLeft > SensorRight & & SensorDifference > 75) {/ / detta tolkas som om vänstra sensorn läser mer ljus än höger sensorn, göra detta:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, låg);
digitalWrite (channel_a_input_2, hög);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, hög);
digitalWrite (channel_b_input_4, låg);
Serial.println("left"); Detta skriver vänster när roboten skulle faktiskt sväng vänster.
Delay(50);
}
om (SensorLeft < SensorRight & & SensorDifference > 75) {/ / detta tolkas som om vänstra sensorn läser mindre ljus än höger sensorn, göra detta:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, hög);
digitalWrite (channel_a_input_2, låg);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, låg);
digitalWrite (channel_b_input_4, hög);
Serial.println("Right"); Detta skriver rätt när roboten skulle faktiskt sväng höger.
Delay(50);
}
annars om (SensorDifference < 75) {/ / detta tolkas som om skillnaden mellan de två sensorerna är under 125 (Experiment som passar våra sensorer), gör detta:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, hög);
digitalWrite (channel_a_input_2, låg);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, hög);
digitalWrite (channel_b_input_4, låg);
Serial.println("forward"); Detta skriver fram när roboten skulle faktiskt gå framåt.
Delay(50);
}
Serial.Print("\n");
}