#include <SoftwareSerial.h>
#define irSensor A0
int sensorValue;
void setup() {
Serial.begin(115200);
pinMode(irSensor, INPUT);
}
void loop() {
sensorValue = analogRead(irSensor);
Serial.println(sensorValue);
delay(100);
}
#define motor1 4
#define MOTOR_RIGHT 5
#define MOTOR_LEFT 6
#define motor4 7
#define TRIGGER_PIN 8
#define ECHO_PIN 9
#define BUZZER_PIN 11
int distance;
int SPEED_TURN = 220;
int SPEED_FORWARD = 255;
#define SENSOR_PIN A0
int sensorValue;
int whiteReading, blackReading;
void setup() {
Serial.begin(115200);
pinMode(MOTOR_RIGHT, OUTPUT);
pinMode(MOTOR_LEFT, OUTPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
// testDrive();
Serial.println("Begin....");
beep();
beep();
} // void setup() {
void loop() {
sensorValue = analogRead(SENSOR_PIN);
// Serial.println(sensorValue);
printIRValues();
if (sensorValue > 600) Right(SPEED_TURN);
else if (sensorValue < 200) Left(SPEED_TURN);
else Forward(SPEED_FORWARD);
distance = measureShortDistance();
if (distance > 0 && distance <40 ) {
Stop();
beep();beep();beep();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
} // end void loop() {
void beep() {
digitalWrite(BUZZER_PIN, HIGH);
delay(100);
digitalWrite(BUZZER_PIN, LOW);
delay(100);
}
int measureShortDistance() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10); // מספיק קצר ומהיר
digitalWrite(TRIGGER_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH, 10000); // מקסימום המתנה של 10ms = עד 170 ס"מ בערך
long distanceCm = duration * 0.034 / 2; // חישוב מרחק בס"מ
if (distanceCm == 0 || distanceCm > 80) return -1; // מחוץ לטווח הרצוי או אין קריאה
return distanceCm;
}
void printIRValues() {
// Serial.print("White reading: ");
Serial.print(whiteReading);
// Serial.print(" | Current reading: ");
Serial.print(" <<< ");
Serial.print(sensorValue);
// Serial.print(" | Black reading: ");
Serial.print(" <<< ");
Serial.print(blackReading);
Serial.println();
}
void Stop() {
analogWrite(motor1, 0);
analogWrite(MOTOR_RIGHT, 0);
analogWrite(MOTOR_LEFT, 0);
analogWrite(motor4, 0);
}
void Forward(int speedINT) {
analogWrite(MOTOR_RIGHT, speedINT);
analogWrite(MOTOR_LEFT, speedINT);
}
void Right(int speedINT) {
analogWrite(MOTOR_RIGHT, 0);
analogWrite(MOTOR_LEFT, speedINT);
}
void Left(int speedINT) {
analogWrite(MOTOR_RIGHT, speedINT);
analogWrite(MOTOR_LEFT, 0);
}
void Backward(int speedINT) {
analogWrite(MOTOR_RIGHT, speedINT);
analogWrite(MOTOR_LEFT, speedINT);
}
void ForwardLeft(int speedINT) {
analogWrite(motor1, speedINT / 2);
analogWrite(motor4, speedINT);
}
void ForwardRight(int speedINT) {
analogWrite(motor1, speedINT);
analogWrite(motor4, speedINT / 2);
}
void BackwardLeft(int speedINT) {
analogWrite(MOTOR_RIGHT, speedINT / 2);
analogWrite(MOTOR_LEFT, speedINT);
}
void BackwardRight(int speedINT) {
analogWrite(MOTOR_RIGHT, speedINT);
analogWrite(MOTOR_LEFT, speedINT / 2);
}
void testDrive() {
int delayTime = 1000;
// Stop();
// delay(100);
Forward(SPEED_FORWARD);
delay(delayTime);
// Stop();
// delay(500);
Right(SPEED_FORWARD);
delay(delayTime);
// Stop();
// delay(500);
Left(SPEED_FORWARD);
delay(delayTime);
}
void checkSpeed() {
analogWrite(motor1, SPEED_TURN);
analogWrite(motor4, SPEED_TURN);
delay(2000);
analogWrite(motor1, 0);
analogWrite(motor4, 0);
delay(1000);
analogWrite(MOTOR_RIGHT, SPEED_TURN);
analogWrite(MOTOR_LEFT, SPEED_TURN);
delay(2000);
analogWrite(MOTOR_RIGHT, 0);
analogWrite(MOTOR_LEFT, 0);
delay(1000);
analogWrite(motor1, SPEED_FORWARD);
analogWrite(motor4, SPEED_FORWARD);
delay(100);
analogWrite(motor1, 0);
analogWrite(motor4, 0);
delay(500);
analogWrite(motor1, SPEED_FORWARD);
analogWrite(motor4, SPEED_FORWARD);
delay(100);
analogWrite(motor1, 0);
analogWrite(motor4, 0);
delay(500);
analogWrite(motor1, SPEED_FORWARD);
analogWrite(motor4, SPEED_FORWARD);
delay(100);
analogWrite(motor1, 0);
analogWrite(motor4, 0);
delay(500);
analogWrite(MOTOR_RIGHT, SPEED_FORWARD);
analogWrite(MOTOR_LEFT, SPEED_FORWARD);
delay(500);
analogWrite(MOTOR_RIGHT, 0);
analogWrite(MOTOR_LEFT, 0);
delay(1000);
}