Coding HELP needed

Hi All,
I'm Erez, currently building line following car & i need a programer to help me tidy up my code & coding touch-ups.

here are the topics where i'm struggle, hope someone can help me out:

1/ Code line following loop, front 5head IR sensor programed, need to program another IR rear sensor, black line i'm using is a closed line, so i need to add a start/finish point.
2/Code the 4 installed u.sonic so robot use anticollision loop while its moving +beeping when robot's way is blocked.
3/Code two driving speeds using pwm.
4/Code the car to run only when TEMP is under 60Deg, Humidity under 80%
using installed DHT12
5/Code alternating beep while reverse loop

heres is my code so far:

#include <Udi_RF433Remote.h>
#include <RCSwitch.h>
#include "DHT12.h"

RCSwitch mySwitch = RCSwitch();
DHT12 DHT(&Wire);

long previousMillis = 0;
long currentMillis = millis();
long Interval = 300;  // millis()
long ReceivedValue;
long duration, distance, RightSensor,BackSensor,FrontSensor,LeftSensor;
bool IR_F_VALUE_1, IR_F_VALUE_2, IR_F_VALUE_3, IR_F_VALUE_4, IR_F_VALUE_5;
bool IR_B_VALUE_1, IR_B_VALUE_2, IR_B_VALUE_3, IR_B_VALUE_4, IR_B_VALUE_5;
int InverterPin1,Buzzer,RelayPin2;


#define M1PWM 3
#define M2PWM 4
#define M3PWM 5
#define M4PWM 6

#define IR_F_1 31
#define IR_F_2 30
#define IR_F_3 29
#define IR_F_4 28
#define IR_F_5 27
#define IR_B_1 33
#define IR_B_2 34
#define IR_B_3 35
#define IR_B_4 36
#define IR_B_5 37

#define M1_S 8
#define M1_B 9
#define M1_F 10
#define M1_M 11
#define M2_S 14
#define M2_B 15
#define M2_F 16
#define M2_M 17
#define M3_S 45
#define M3_B 43
#define M3_F 44
#define M3_M 42
#define M4_S 38
#define M4_B 40
#define M4_F 39
#define M4_M 41
#define Buzzer 32
#define InverterPin1 26
#define RelayPin2 25

#define trigPin1 24
#define echoPin1 23
#define trigPin2 A14
#define echoPin2 A15
#define trigPin3 A13
#define echoPin3 A12
#define trigPin4 46
#define echoPin4 22


void setup() {
  Serial.begin(9600);
  mySwitch.enableReceive(0);
  
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(trigPin4, OUTPUT);
  pinMode(echoPin4, INPUT);
  
  pinMode(M1_S, OUTPUT);
  pinMode(M1_B, OUTPUT);
  pinMode(M1_F, OUTPUT);
  pinMode(M1_M, OUTPUT);

  pinMode(M2_S, OUTPUT);
  pinMode(M2_B, OUTPUT);
  pinMode(M2_F, OUTPUT);
  pinMode(M2_M, OUTPUT);

  pinMode(M3_S, OUTPUT);
  pinMode(M3_B, OUTPUT);
  pinMode(M3_F, OUTPUT);
  pinMode(M3_M, OUTPUT);

  pinMode(M4_S, OUTPUT);
  pinMode(M4_B, OUTPUT);
  pinMode(M4_F, OUTPUT);
  pinMode(M4_M, OUTPUT);

  pinMode(IR_F_1, INPUT);
  pinMode(IR_F_2, INPUT);
  pinMode(IR_F_3, INPUT);
  pinMode(IR_F_4, INPUT);
  pinMode(IR_F_5, INPUT);

  pinMode(IR_B_1, INPUT);
  pinMode(IR_B_2, INPUT);
  pinMode(IR_B_3, INPUT);
  pinMode(IR_B_4, INPUT);
  pinMode(IR_B_5, INPUT);

  pinMode(InverterPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);
  pinMode(Buzzer, OUTPUT);
}


void loop() {
  //handleRF433();
  //handleButtons();
    // AntiCollision();
 // handlePosition();
  //Toggle();
}


void SonarSensor(int trigPin,int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
}

void Toggle(){
  digitalWrite(InverterPin1, LOW);
}


void AntiCollision() {
SonarSensor(trigPin1, echoPin1);
RightSensor = distance;
SonarSensor(trigPin3, echoPin3);
LeftSensor = distance;
SonarSensor(trigPin4, echoPin4);
FrontSensor = distance;
SonarSensor(trigPin2, echoPin2);
BackSensor = distance;

//Serial.print(LeftSensor);Serial.println(" LeftSensor ");
//Serial.print(FrontSensor);Serial.println(" FrontSensor ");
//Serial.print(RightSensor);Serial.println(" RightSensor ");
//Serial.print(BackSensor);Serial.println(" BackSensor ");
}

void handlePosition() {
//  IR_B_VALUE_1 = !digitalRead(IR_B_1); //delay(10);
//  IR_B_VALUE_2 = !digitalRead(IR_B_2);//delay(10);
//  IR_B_VALUE_3 = !digitalRead(IR_B_3);//delay(10);
//  IR_B_VALUE_4 = !digitalRead(IR_B_4);//delay(10);
//  IR_B_VALUE_5 = !digitalRead(IR_B_5);//delay(10);
//
//  Serial.print(IR_B_VALUE_1);  Serial.print(" = ");
//  Serial.print(IR_B_VALUE_2);  Serial.print(" = ");
//  Serial.print(IR_B_VALUE_3); Serial.print(" = ");
//  Serial.print(IR_B_VALUE_4); Serial.print(" = ");
//  Serial.print(IR_B_VALUE_5);
//  Serial.println();


  IR_F_VALUE_1 = !digitalRead(IR_F_1); 
  IR_F_VALUE_2 = !digitalRead(IR_F_2);
  IR_F_VALUE_3 = !digitalRead(IR_F_3);
  IR_F_VALUE_4 = !digitalRead(IR_F_4);
  IR_F_VALUE_5 = !digitalRead(IR_F_5);

  Serial.print(IR_F_VALUE_1);  Serial.print(" = ");
  Serial.print(IR_F_VALUE_2);  Serial.print(" = ");
  Serial.print(IR_F_VALUE_3); Serial.print(" = ");
  Serial.print(IR_F_VALUE_4); Serial.print(" = ");
  Serial.print(IR_F_VALUE_5); 
  Serial.println();

  if (IR_F_VALUE_3) {
    Forward();
  }
  else if (IR_F_VALUE_4 || IR_F_VALUE_5) {
    RightOneSide();
    
  }
  else if (IR_F_VALUE_1 || IR_F_VALUE_2) {
    LeftOneSide();
    
  }
    else if (IR_F_VALUE_1 && IR_F_VALUE_2 && IR_F_VALUE_3 && IR_F_VALUE_4 && IR_F_VALUE_5) {
    Stop();  
  }
}

void Backward() {
  
  digitalWrite(M1_S, LOW);  
  digitalWrite(M1_B, HIGH); 
  digitalWrite(M1_F, LOW); 
  digitalWrite(M1_M, HIGH); 

  digitalWrite(M2_S, LOW);  
  digitalWrite(M2_F, LOW); 
  digitalWrite(M2_B, HIGH); 
  digitalWrite(M2_M, HIGH); 

  digitalWrite(M3_S, LOW);  
  digitalWrite(M3_F, LOW); 
  digitalWrite(M3_B, HIGH); 
  digitalWrite(M3_M, HIGH); 

  digitalWrite(M4_S, LOW);  
  digitalWrite(M4_F, LOW); 
  digitalWrite(M4_B, HIGH); 
  digitalWrite(M4_M, HIGH); 
}

void Forward(){
 
  digitalWrite(M1_S, LOW);  
  digitalWrite(M1_B, LOW); 
  digitalWrite(M1_F, HIGH); 
  digitalWrite(M1_M, HIGH); 

  digitalWrite(M2_S, LOW);  
  digitalWrite(M2_F, HIGH); 
  digitalWrite(M2_B, LOW); 
  digitalWrite(M2_M, HIGH); 

  digitalWrite(M3_S, LOW);  
  digitalWrite(M3_F, HIGH); 
  digitalWrite(M3_B, LOW); 
  digitalWrite(M3_M, HIGH); 

  digitalWrite(M4_S, LOW);  
  digitalWrite(M4_F, HIGH); 
  digitalWrite(M4_B, LOW); 
  digitalWrite(M4_M, HIGH); 
  
}
void RightOneSide() {
  digitalWrite(M1_S, HIGH);  
  digitalWrite(M1_B, LOW); 
  digitalWrite(M1_F, HIGH); 
  digitalWrite(M1_M, HIGH); 

  digitalWrite(M2_S, HIGH);  
  digitalWrite(M2_F, HIGH); 
  digitalWrite(M2_B, LOW); 
  digitalWrite(M2_M, HIGH); 

  digitalWrite(M3_S, LOW);  
  digitalWrite(M3_F, HIGH); 
  digitalWrite(M3_B, LOW); 
  digitalWrite(M3_M, HIGH); 

  digitalWrite(M4_S, LOW);  
  digitalWrite(M4_F, HIGH); 
  digitalWrite(M4_B, LOW); 
  digitalWrite(M4_M, HIGH); 
}

void LeftOneSide() {
  digitalWrite(M1_S, LOW);  
  digitalWrite(M1_B, LOW); 
  digitalWrite(M1_F, HIGH); 
  digitalWrite(M1_M, HIGH); 

  digitalWrite(M2_S, LOW);  
  digitalWrite(M2_F, HIGH); 
  digitalWrite(M2_B, LOW); 
  digitalWrite(M2_M, HIGH); 

  digitalWrite(M3_S, HIGH);  
  digitalWrite(M3_F, HIGH); 
  digitalWrite(M3_B, LOW); 
  digitalWrite(M3_M, HIGH); 

  digitalWrite(M4_S, HIGH);  
  digitalWrite(M4_F, HIGH); 
  digitalWrite(M4_B, LOW); 
  digitalWrite(M4_M, HIGH); 
}


void Stop() {
  digitalWrite(M1_S, HIGH);  
  digitalWrite(M1_B, LOW); 
  digitalWrite(M1_F, LOW); 
  digitalWrite(M1_M, LOW); 

  digitalWrite(M2_S, HIGH);  
  digitalWrite(M2_F, LOW); 
  digitalWrite(M2_B, LOW); 
  digitalWrite(M2_M, LOW); 

  digitalWrite(M3_S, HIGH);  
  digitalWrite(M3_F, LOW); 
  digitalWrite(M3_B, LOW); 
  digitalWrite(M3_M, LOW); 

  digitalWrite(M4_S, HIGH);  
  digitalWrite(M4_F, LOW); 
  digitalWrite(M4_B, LOW); 
  digitalWrite(M4_M, LOW); 
}

void handleButtons() {
  switch (ReceivedValue) {
    case BTN_ARR_4_01 :
      Forward();
      break;
      
    case BTN_ARR_4_02 :
      Backward();
      
      break;
      
    case BTN_ARR_4_04 :
    RightOneSide();
      break;
      
    case BTN_ARR_4_03:
    LeftOneSide();
      break;
  }
}

void handleRF433() {
  if (millis() - previousMillis > Interval) {
    Stop();
    Serial.println("=========NO RF=========");

  }
  ReceivedValue = 0;
  if (mySwitch.available()) {
    if (mySwitch.getReceivedValue()) {
      ReceivedValue = mySwitch.getReceivedValue();
    }
    mySwitch.resetAvailable();

    Serial.print("millis() - previousMillis:    ");
    Serial.println(millis() - previousMillis);


    previousMillis = millis();
    //    Serial.print(millis());
    //    Serial.print("   ");
    Serial.println(ReceivedValue);
  }
  delay(5);

}

Hello ErezYos

Welcome back.

I have checked the code a little.
This sketch seems to have grown organically through nested and dupilcate function calls.
This leads to spaghetti code and nodes in the logic that are functionally undesirable.

What to do.
There are two options.
Debug, using multiple Serial.println()'s to see what happens under different conditions. Nodes can be solved this way, but new ones can also be created in the process.
The second option is to rearrange the sketch. Based on the IPO model, structure the desired function of the sketch into basic functions. Take a sheet of paper and a pencil and draw a programme structure to identify the required functions, e.g. button, timer and display functions. All these functions can be coded and tested separately. To complete the project, you also need to design a control structure that uses events to call the above functions. In this way keep in mind to design objects and related services thus handle input/output actions.
That is all that needs to be done. Try them out.

Have a nice day and enjoy coding in C++.

additionally:

Your code contains a lot of functions.
Did you test each function separately?

Why doesn't the SonarSensor simply return the range, then you wouldn't have to copy a global into another global?

Shalom Semperldem , thank for taking the time to answer.
Your Absolutely right, can you help me combine SonarSensor & antiCollision into one?
Tnx, E.

Can you help others help you, and post your code in code tags?

float SonarSensor(int trigPin, int echoPin)
{
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  uint32_t duration = pulseIn(echoPin, HIGH);
  return (duration/2) / 29.1;
}

Hi,

To add code please click this link;

This will put your code in a scrolling window, making it easier to read.

Thanks... Tom.. :smiley: :+1: :coffee: :australia:

Just changed my original post, sorry for being so green :slight_smile:

Few photos of the car



Not the only thing, it seems.

(High CoG you've got there)

Haha, didn't know the term of art, but totally agree.

a7

void loop() {
  //handleRF433();
  //handleButtons();
    // AntiCollision();
 // handlePosition();
  //Toggle();
}

This forum works not that way that you post some dis-functional code and get your code corrected.

Your loop has everything commented out.
What was your best attempt to make a part of the code work?
What was uncommented = active in your try?
describe in detail what you observed how the code behaved
post an explanation what does not work as intended and describe which part of your code this is

Posting some general advice to you like

"write all your code non-blocking"

does not help

best regards Stefan

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.