#define trigPin1 2
#define echoPin1 4
#define trigPin2 13
#define echoPin2 12
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
char data = 0;
void setup(){
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop(){
if(Serial.available() > 0){
data = Serial.read();
if (data == 'a'){
int duration1, distance1;
digitalWrite (trigPin1, HIGH);
delayMicroseconds (1000);
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 > 25 ) {
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, 0);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, 0);
}
else if (distance1 < 25) {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
delay(5);
}
else if(data == 'A') {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
else if(data == 'B') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else if(data == 'C') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, HIGH);
}
else if(data == 'D') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else if(data == '1') {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else if(data == '2') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else if(data == '5') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
else if(data == '6') {
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
}
}
if (distance1 > 25 )
{
...
}
else if (distance1 < 25)
{
...
}
Not sure what you mean by "isn't working" but what happens if distance1 == 25
What does "not working" mean?
What should the program do?
Why is duration1 an int? pulseIn returns an unsigned long so duration1 should be an unsigned long. Probably not the cause of whatever your problem is, though.
I would suggest that you add Serial.print statements in strategic places in your code to find out what is going on.
Press CTRL-T in the IDE to indent your code correctly too... this is a mess to read
#define trigPin1 2
#define echoPin1 4
#define trigPin2 13
#define echoPin2 12
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
char data = 0;
void setup()
{
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
if(Serial.available() > 0)
{
data = Serial.read();
if (data == 'a')
{
int duration1, distance1;
digitalWrite (trigPin1, HIGH);
delayMicroseconds (1000);
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
if (distance1 > 25 )
{
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, 0);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, 0);
}
else
if (distance1 < 25)
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
delay(5);
}
//-------------------------------------------------------
else
if(data == 'A') //L6B:
{ //L6C:
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
else
//===============================
if(data == 'B')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else
if(data == 'C')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, HIGH);
}
else
if(data == 'D')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else
if(data == '1')
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else
if(data == '2')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
else
if(data == '5')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
else
if(data == '6')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//=========================================
//---------------------------------------------------------
}
}
the indentation is still challenging ![]()
#define trigPin1 2
#define echoPin1 4
#define trigPin2 13
#define echoPin2 12
#define motorPin1 8
#define motorPin2 9
#define motorPin3 10
#define motorPin4 11
char data = 0;
void setup()
{
Serial.begin(9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
}
void loop()
{
if (Serial.available() > 0)
{
data = Serial.read();
if (data == 'a')
{
int duration1, distance1;
digitalWrite (trigPin1, HIGH);
delayMicroseconds (1000);
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
distance1 = (duration1 / 2) / 29.1;
if (distance1 > 25 )
{
digitalWrite (motorPin1, HIGH);
digitalWrite (motorPin2, 0);
digitalWrite (motorPin3, HIGH);
digitalWrite (motorPin4, 0);
}
else if (distance1 < 25)
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
delay(5);
}
//-------------------------------------------------------
else if (data == 'A')
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == 'B')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == 'C')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, HIGH);
}
//-------------------------------------------------------
else if (data == 'D')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == '1')
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == '2')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == '5')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, 0);
}
//-------------------------------------------------------
else if (data == '6')
{
digitalWrite(motorPin1, 0);
digitalWrite(motorPin2, 0);
digitalWrite(motorPin3, 0);
digitalWrite(motorPin4, 0);
}
//---------------------------------------------------------
}
}
that's better ![]()
int duration1, distance1; // <<----------DURATION1 SHOULD BE AN UNSIGNED LONG
....
digitalWrite (trigPin1, HIGH);
delayMicroseconds (1000); // <<---------- USUALLY THIS IS 2, not 1000
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
I would change else if (distance1 < 25) into just else
the instructions for 'B', 'D', '2' and '6' are the same... they could be grouped
Now the true question is what's not working as asked by @evanmars in the first answer...
Not sure what you mean by "isn't working" but what happens if distance1 == 25
The following Flow Chart indicates the course of program action when distance == 25.
The codes of the OP are compiled without error; so,what is wrong there?
the instructions for 'B', 'D', '2' and '6' are the same... they could be grouped
The following Flow Chart supports the above proposition.
GolamMostafa:
The following Flow Chart indicates the course of program action when distance == 25.
well.. in the original code the OP has
if (distance1 > 25 ) { ... }
else if (distance1 < 25) { ... }
and in your flow chart you indicated >=
distance is not greater (>) than 25; it is not less (<) than 25; so, it must be equal (==) to 25? Am I correct?
GolamMostafa:
distance is not greater (>) than 25; it is not less (<) than 25; so, it must be equal (==) to 25? Am I correct?
yeah but OP's code does not do anything in that case - it's not captured
seems you edited your picture with > only now ??
seems you edited your picture with > only now ??
I have drawn the Flow Chart to remain one-to-correspondence with OP's codes except the accumulation of your observation (the instructions for 'B', 'D', '2' and '6' are the same... they could be grouped). I have not added any block to test greater than (>) condition.
I have not answered this question (but what happens if distance1 == 25) of Post#1; rather I was questioned by you which I tried to answer, and I have passed.
You edited your post after my answer, so not sure what changed. I did not have my glasses so I might have read your flow chart wrongly then...
I think that I added your observation (the instructions for 'B', 'D', '2' and '6' are the same... they could be grouped) by directing the program branching to Process4 for the true conditions of 'B', 'D', '2', and '6'.