Purpose:
The following is the sample code for the IR Challlenge.
/* IR Unknown This sketch uses the IR proximity sensors to inform the robot about the presence of a wall and then has a particular response. Your task is to figure out what it does and how. This will be an example of a poorly commented code. The IR sensors are connected to the following analog pins (a bit of a surprise) A2 Left IR proximity sensor A3 Right IR proximity sensor The actual behavior of the IR sensors is digital in that they are either on or off. HIGH (5V) is when the IR sensor sees nothing. LOW (0V) is when the IR sensor sees enough reflection from something to trigger. This sketch is a modification of other sketchs I have written that originally depend on sketchs in the public domain from Adafruit and others. Many thanks as always to the broad community of enthusiasts in this space. modified 7/19/20 Bruce Emerson */ // Define the sensor pins int sensorPinL = A2; int sensorPinR = A3; int sensorReadL = 0; // establish variable to hold the sensor readings int sensorReadR = 0; int rightMotor = 5; // the PWM pin for the right motor int leftMotor = 6; // the PWM pin for the left motor int rightForward = 7; // forward-reverse right motor int leftForward = 8; // forward-reverse left motor // settings int turnSpeed = 20; int turnTime = 100; int motorSpeed = 50; // logic stuff int keepGoing = 0; int huntCount = 0; int movingNow = 0; int huntTime = 100; int wallLast = 0; // This function runs once when you turn your Arduino on void setup() { // declare motor pins to be outputs: pinMode(rightMotor, OUTPUT); pinMode(leftMotor, OUTPUT); pinMode(rightForward, OUTPUT); pinMode(leftForward, OUTPUT); Serial.begin(9600); //Start the serial connection with the computer //to view the result open the serial monitor while (!Serial) { ; // wait for serial port to connect. Needed for native USB } Serial.println(); Serial.println("The Serial Monitor is ready for business!"); Serial.println(); delay(2000); // Identify the sensor pins as inputs. pinMode(sensorPinL, INPUT); pinMode(sensorPinR, INPUT); } void loop() { if (keepGoing == 0) { Serial.println("I'm happy moving forward"); if (movingNow == 1) { Serial.println("....already moving..."); } else { Serial.println("Turning on motors"); digitalWrite(rightForward, LOW); digitalWrite(leftForward, LOW); analogWrite(rightMotor, motorSpeed); analogWrite(leftMotor, motorSpeed); movingNow = 1; } } else { // what if I need to stop? } sensorReadL = digitalRead(sensorPinL); sensorReadR = digitalRead(sensorPinR); // print out sensor status Serial.print("Left sensor reading: "); Serial.println(sensorReadL); Serial.print("Right sensor reading: "); Serial.println(sensorReadR); if (sensorReadL == 0) { // if the wall is on the left analogWrite(rightMotor, 0); analogWrite(leftMotor, 50); while (sensorReadL == 0) { delay(50); sensorReadL = digitalRead(sensorPinL); } analogWrite(leftMotor, 0); wallLast = 0; // remember last wall was on left movingNow = 0; // currently stopped huntCount = 0; // reset counter } delay(huntTime); huntCount = huntCount+1; if (huntCount >= 10){ analogWrite(rightMotor, motorSpeed+10); delay(huntTime); huntCount = 0; } }
Copy and paste this into your sketch and then save it with a useful name of your choice.