Stap 4: Code
Respecteer dat het duurde een tijdje om erachter te komen en het schrijven van deze code:
Code door Jason McLaughlin
2015
Const int channel_a_enable = 6; starten van de motor een /left
Const int channel_a_input_1 = 4; positieve/negatieve 1
Const int channel_a_input_2 = 7; positieve/negatieve 2
Const int channel_b_enable = 5; Start motor b /right
Const int channel_b_input_3 = 3; positieve/negatieve 1
Const int channel_b_input_4 = 2; positieve/negatieve 2
Const int RightSensor = a1 worden verkregen; Lees de juiste sensor
Const int LeftSensor = A2; Lees de linker sensor
Variabele definities
int SensorLeft; Deze slaat de waarde van de pin van de Sensor van de links te gebruiken later in de schets
int SensorRight; Deze slaat de waarde van de pin van de Sensor van het recht gebruik later in de schets
int SensorDifference; Deze waarde wordt gebruikt om te bepalen van het verschil tussen links en rechts
VOID Setup {}
pinMode (channel_a_enable, OUTPUT); Kanaal A inschakelen
pinMode (channel_a_input_1, OUTPUT); Kanaal A ingang 1
pinMode (channel_a_input_2, OUTPUT); Kanaal A ingang 2
pinMode (channel_b_enable, OUTPUT); Kanaal B inschakelen
pinMode (channel_b_input_3, OUTPUT); Kanaal B ingang 3
pinMode (channel_b_input_4, OUTPUT); Kanaal B ingang 4
pinMode (LeftSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
pinMode (RightSensor, INPUT); Hiermee definieert u deze pin als input. De Arduino leest waarden uit deze pin.
digitalWrite (A1, hoge); Hiermee LDR
digitalWrite (A2, hoge); Hiermee LDR
Serial.begin(9600); Kan een seriële verbinding met behulp van de Arduino USB of UART (pinnen 0 & 1). Merk op dat de baud-rate is ingesteld op 9600
Serial.println ("\nBeginning-licht op zoek naar gedrag"); Aan het eind van de void setup zo geplaatst dat het is loopt eenmaal, vlak voor de void loop}
void loop {SensorLeft = 1023 - analogRead(LeftSensor); / / dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1);
SensorRight = 1023 - analogRead(RightSensor); Dit leest de waarde van de sensor, dan slaat het op het bijbehorende gehele getal.
delay(1);
SensorDifference = abs (SensorLeft - SensorRight); Dit berekent het verschil tussen de twee sensoren en slaat het op een geheel getal.
Dit gedeelte van de schets wordt gebruikt voor het afdrukken van de waarden van de / / sensoren door middel van seriële naar de computer. Nuttig voor het bepalen van / / als de sensoren werkt en als de code ook goed werkt.
Serial.Print ("Sensor links ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorLeft); Wordt de waarde van de Sensor links afgedrukt.
Serial.Print("\t"); Wordt een tabblad (spatie) afgedrukt.
Serial.Print ("Sensor rechts ="); De tekst binnen de aanhalingstekens wordt afgedrukt.
Serial.Print(SensorRight); Drukt de waarde van de recht-Sensor.
Serial.Print("\t"); Wordt een tabblad (spatie) afgedrukt.
Dit gedeelte van de schets is wat interperets eigenlijk de gegevens en voert de motoren dienovereenkomstig.
Als (SensorLeft > SensorRight & & SensorDifference > 75) {/ / Dit is geïnterpreteerd alsof de linker sensor meer leest licht dan de rechts-Sensor, dit doen:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, laag);
digitalWrite (channel_a_input_2, hoge);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, hoge);
digitalWrite (channel_b_input_4, laag);
Serial.println("left"); Dit drukt links wanneer de robot zou eigenlijk linksaf.
delay(50);
}
Als (SensorLeft < SensorRight & & SensorDifference > 75) {/ / Dit is geïnterpreteerd alsof de linker sensor minder leest licht dan de rechts-Sensor, dit doen:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, hoge);
digitalWrite (channel_a_input_2, laag);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, laag);
digitalWrite (channel_b_input_4, hoge);
Serial.println("right"); Dit drukt recht wanneer de robot zou eigenlijk turn Right.
delay(50);
}
else if (SensorDifference < 75) {/ / Dit is geïnterpreteerd alsof het verschil tussen de twee sensoren onder 125 (Experiment is aan onze sensoren), dit doen:
analogWrite (channel_a_enable, 255);
digitalWrite (channel_a_input_1, hoge);
digitalWrite (channel_a_input_2, laag);
analogWrite (channel_b_enable, 255);
digitalWrite (channel_b_input_3, hoge);
digitalWrite (channel_b_input_4, laag);
Serial.println("Forward"); Dit drukt Forward wanneer de robot eigenlijk vooruit zou gaan.
delay(50);
}
Serial.Print("\n");
}