Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /********* Pleasedontcode.com **********
- Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- - Terms and Conditions:
- You have a non-exclusive, revocable, worldwide, royalty-free license
- for personal and commercial use. Attribution is optional; modifications
- are allowed, but you're responsible for code maintenance. We're not
- liable for any loss or damage. For full terms,
- please visit pleasedontcode.com/termsandconditions.
- - Project: **Sensor Control**
- - Source Code NOT compiled for: Arduino Uno
- - Source Code created on: 2025-05-11 19:33:21
- ********* Pleasedontcode.com **********/
- /****** SYSTEM REQUIREMENTS *****/
- /****** SYSTEM REQUIREMENT 1 *****/
- /* find an obstacle by using ultrasonic sensor which */
- /* is placed on servomotor and go in front of */
- /* obstacle at distance of 5 cm */
- /****** END SYSTEM REQUIREMENTS *****/
- /* START CODE */
- /****** DEFINITION OF LIBRARIES *****/
- #include <Ultrasonic.h> //https://github.com/ErickSimoes/Ultrasonic
- #include <Servo.h> //https://github.com/arduino-libraries/Servo
- // ----- COLOR SENSOR DEFINITIONS -----
- #define S0 6
- #define S1 7
- #define S2 8
- #define S3 9
- #define OUT 10
- // ----- MOTOR PIN DEFINITIONS -----
- #define ML_Ctrl 13
- #define ML_PWM 11
- #define MR_Ctrl 12
- #define MR_PWM 3
- int redFreq, greenFreq, blueFreq;
- // ----- ULTRASONIC SENSOR DEFINITIONS -----
- Ultrasonic ultrasonic(2, 3); // Trigger pin 2, Echo pin 3
- const int desiredDistance = 5; // Desired distance in cm
- /****** FUNCTION PROTOTYPES *****/
- void setup(void);
- void loop(void);
- void findObstacleAndMove(void);
- /***** DEFINITION OF DIGITAL INPUT PINS *****/
- const uint8_t ultrasonic_HC-SR04_Echo_PIN_D3 = 3; // Note: This conflicts with MR_PWM
- // ***** DEFINITION OF DIGITAL OUTPUT PINS *****/
- const uint8_t myLED_LED_PIN_D4 = 4;
- // ***** DEFINITION OF PWM OUTPUT PINS *****/
- const uint8_t servomotor_Servomotor_PWMSignal_PIN_D5 = 5; // No conflict
- // ***** DEFINITION OF OUTPUT RAW VARIABLES *****/
- /***** used to store raw data *****/
- bool ultrasonic_HC-SR04_Trigger_PIN_D2_rawData = 0;
- bool myLED_LED_PIN_D4_rawData = 0;
- uint8_t servomotor_Servomotor_PWMSignal_PIN_D5_rawData = 0;
- /***** DEFINITION OF OUTPUT PHYSICAL VARIABLES *****/
- /***** used to store data after characteristic curve transformation *****/
- float ultrasonic_HC-SR04_Trigger_PIN_D2_phyData = 0.0;
- float myLED_LED_PIN_D4_phyData = 0.0;
- float servomotor_Servomotor_PWMSignal_PIN_D5_phyData = 0.0;
- /****** DEFINITION OF LIBRARIES CLASS INSTANCES*****/
- void setup(void)
- {
- // put your setup code here, to run once:
- pinMode(ultrasonic_HC-SR04_Echo_PIN_D3, INPUT);
- pinMode(myLED_LED_PIN_D4, OUTPUT);
- pinMode(servomotor_Servomotor_PWMSignal_PIN_D5, OUTPUT);
- // TCS3200 Color Sensor Setup
- pinMode(S0, OUTPUT);
- pinMode(S1, OUTPUT);
- pinMode(S2, OUTPUT);
- pinMode(S3, OUTPUT);
- pinMode(OUT, INPUT);
- digitalWrite(S0, HIGH);
- digitalWrite(S1, LOW);
- // Motor Setup
- pinMode(ML_Ctrl, OUTPUT);
- pinMode(ML_PWM, OUTPUT);
- pinMode(MR_Ctrl, OUTPUT);
- pinMode(MR_PWM, OUTPUT);
- stopMotors(); // Initialize motors to stop
- }
- void loop(void)
- {
- // put your main code here, to run repeatedly:
- updateOutputs(); // Refresh output data
- readColor(); // Read color sensor data
- Serial.print("R: "); Serial.print(redFreq);
- Serial.print(" G: "); Serial.print(greenFreq);
- Serial.print(" B: "); Serial.println(blueFreq);
- findObstacleAndMove(); // Check for obstacles and move accordingly
- delay(1000);
- }
- void findObstacleAndMove() {
- int distance = ultrasonic.read(); // Read distance from ultrasonic sensor
- if (distance < desiredDistance) {
- Serial.println("Obstacle detected! Moving back...");
- stopMotors();
- delay(1000); // Pause before moving
- moveForwardDistance(5); // Move back 5 cm
- } else {
- Serial.println("No obstacle detected. Moving forward.");
- moveForward(); // Continue moving forward
- }
- }
- void updateOutputs()
- {
- digitalWrite(ultrasonic_HC-SR04_Trigger_PIN_D2, ultrasonic_HC-SR04_Trigger_PIN_D2_rawData);
- digitalWrite(myLED_LED_PIN_D4, myLED_LED_PIN_D4_rawData);
- analogWrite(servomotor_Servomotor_PWMSignal_PIN_D5, servomotor_Servomotor_PWMSignal_PIN_D5_rawData);
- }
- // ----- COLOR SENSOR FUNCTIONS -----
- void readColor() {
- digitalWrite(S2, LOW);
- digitalWrite(S3, LOW);
- redFreq = pulseIn(OUT, LOW);
- digitalWrite(S2, HIGH);
- digitalWrite(S3, HIGH);
- greenFreq = pulseIn(OUT, LOW);
- digitalWrite(S2, LOW);
- digitalWrite(S3, HIGH);
- blueFreq = pulseIn(OUT, LOW);
- }
- bool isRed() {
- return redFreq < greenFreq * 0.6 && redFreq < blueFreq * 0.6;
- }
- bool isYellow() {
- return redFreq < greenFreq * 1.2 && redFreq > greenFreq * 0.8 &&
- blueFreq > redFreq * 1.5;
- }
- bool isGreen() {
- return greenFreq < redFreq * 0.7 && greenFreq < blueFreq * 0.7;
- }
- // ----- MOTOR CONTROL FUNCTIONS -----
- void moveForward() {
- digitalWrite(ML_Ctrl, HIGH);
- analogWrite(ML_PWM, 150);
- digitalWrite(MR_Ctrl, HIGH);
- analogWrite(MR_PWM, 150);
- }
- void stopMotors() {
- analogWrite(ML_PWM, 0);
- analogWrite(MR_PWM, 0);
- }
- void turnRight90() {
- digitalWrite(ML_Ctrl, HIGH);
- analogWrite(ML_PWM, 150);
- digitalWrite(MR_Ctrl, LOW);
- analogWrite(MR_PWM, 150);
- delay(600); // Adjust for 90° turn
- stopMotors();
- }
- void turn180() {
- digitalWrite(ML_Ctrl, HIGH);
- analogWrite(ML_PWM, 150);
- digitalWrite(MR_Ctrl, LOW);
- analogWrite(MR_PWM, 150);
- delay(1100); // Adjust for 180° turn
- stopMotors();
- }
- void moveForwardDistance(int cm) {
- // 150 PWM ≈ 1 cm = ~60 ms (depends on tank)
- int ms = cm * 60;
- moveForward();
- delay(ms);
- stopMotors();
- }
- /* END CODE */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement