{"id":"8k9dpaHY5Q","url":"https://pastebin.ca/8k9dpaHY5Q","raw_url":"https://raw.anybin.ca/8k9dpaHY5Q","visibility":"public","access":"public","created_at":1793860789338,"expires_at":1794465589338,"fetch_limit":null,"fetches_used":0,"reads_remaining":null,"size_bytes":3420,"syntax_hint":null,"title":null,"filename":null,"change_note":null,"cipher":null,"cipher_meta":null,"parent_id":null,"root_id":"8k9dpaHY5Q","version":1,"owner_id":null,"recipient_id":null,"body":"/*\n  ELEC1100 Your Lab#06 & Project Template\n\n  To program the car tracking the white line on a dark mat\n\n  Group No. (number of your project box):  \n  Group Member 1 (name & SID):\n  Group Member 2 (name & SID):\n  \n*/\n\n// assign meaningful names to those pins that will be used\n\nconst int pinL_Sensor = A5;      //pin A5: left sensor \nconst int pinB_Sensor = A4;      //pin A4: bumper sensor\nconst int pinR_Sensor = A3;      //pin A3: right sensor \n\nconst int pinL_PWM = 9;          //pin D9: left motor speed\nconst int pinL_DIR = 10;         //pin D10: left motor direction\n\nconst int pinR_PWM = 11;         //pin D11: right motor speed\nconst int pinR_DIR = 12;         //pin D12: right motor direction\n\n//define variables to be used in script\n\nint bumperSensor = 1;  // not sensing white\nint leftSensor = 1;    // not sensing white\nint rightSensor = 1;   // not sensing white\n\nint countBumper = 0;   // bumper sensor not triggered yet\n\n// the setup function runs once when you press reset or power the board\n\nvoid setup ()\n{\n  // define pins as input and output\n  pinMode(pinB_Sensor, INPUT);\n  pinMode(pinL_Sensor, INPUT);\n  pinMode(pinR_Sensor, INPUT);\n  \n  pinMode(pinL_DIR, OUTPUT);\n  pinMode(pinR_DIR, OUTPUT);\n  \n  pinMode(pinL_PWM, OUTPUT);\n  pinMode(pinR_PWM, OUTPUT);\n  \n  // initialize output pins\n  digitalWrite(pinL_DIR, HIGH);   //forward direction    \n  digitalWrite(pinR_DIR, HIGH);   //forward direction\n  analogWrite(pinL_PWM, 0);       //stop at the start position \n  analogWrite(pinR_PWM, 0);       //stop at the start position \n}\n\n// the loop function runs over and over again forever\n\nvoid loop() {\n\n  // Arduino is reading the sensor measurements\n  bumperSensor = digitalRead(pinB_Sensor);\n  leftSensor = digitalRead(pinL_Sensor);\n  rightSensor = digitalRead(pinR_Sensor);\n  \n  // car stops at the start position when bumper sensor no trigger\n  if ( bumperSensor && countBumper == 0 ) {\n    analogWrite(pinL_PWM, 0);\n    analogWrite(pinR_PWM, 0);\n  }\n\n  // bumper sensor is triggered at the start position for the 1st time\n  else if ( !bumperSensor && countBumper == 0) {\n    analogWrite(pinL_PWM, 150);\n    analogWrite(pinR_PWM, 150);\n    countBumper = countBumper + 1;\n    delay(350);     //to let the car leave the start position with no miscount\n  }\n  // car is tracking on the white line\n  else if ( bumperSensor && countBumper == 1) \n  { \n    if ( !leftSensor && !rightSensor ) {\n        analogWrite(pinL_PWM, 180);\n        analogWrite(pinR_PWM, 180);\n        digitalWrite(pinL_DIR, HIGH);\n        digitalWrite(pinR_DIR, HIGH); \n      }\n    \n    // Case 2: Left sensor sees white, right sees dark -> Drifted right, steer left\n    if ( !leftSensor && rightSensor ) {\n        analogWrite(pinL_PWM, 50);\n        analogWrite(pinR_PWM, 180);\n        digitalWrite(pinL_DIR, HIGH);\n        digitalWrite(pinR_DIR, HIGH);  \n      }\n    \n    // Case 3: Left sensor sees dark, right sees white -> Drifted left, steer right\n    if ( leftSensor && !rightSensor ) {\n        analogWrite(pinL_PWM, 180);\n        analogWrite(pinR_PWM, 50);\n        digitalWrite(pinL_DIR, HIGH);\n        digitalWrite(pinR_DIR, HIGH);  \n      }\n    \n    // Case 4: Both sensors see dark -> Lost line, move forward to search\n    if ( leftSensor && rightSensor ) {\n        analogWrite(pinL_PWM, 150);\n        analogWrite(pinR_PWM, 150);\n        digitalWrite(pinL_DIR, HIGH);\n        digitalWrite(pinR_DIR, HIGH);  \n      }\n  }\n}"}