hello guys, in my project i want to get sensor data from 9 ultrasonic sensors and 1 rotary encoder data , i am unable to recieve both data at a time, if im trying to do using the code below i am getting a very late response in serial monitor my baud rate is 115200 , please check and tell me correction
static int pinA = 2; // Our first hardware interrupt pin is digital pin 2
static int pinB = 3; // Our second hardware interrupt pin is digital pin 3
volatile byte aFlag = 0;
volatile byte bFlag = 0;
volatile int encoderPos = 0;
volatile int oldEncPos = 0;
volatile int reading = 0;
#define trigPin 52
#define echoPin 53
#define trigPin1 50
#define echoPin1 51
#define trigPin2 48
#define echoPin2 49
#define trigPin3 46
#define echoPin3 47
#define trigPin4 44
#define echoPin4 45
#define trigPin5 42
#define echoPin5 43
#define trigPin6 36
#define echoPin6 37
#define trigPin7 38
#define echoPin7 39
#define trigPin8 40
#define echoPin8 41
int counter = 0;
int aState;
int aLastState;
float dist;
String data;
float duration, distance, duration1, distance1, distance2, duration2, distance3, duration3, distance4, duration4, distance5, duration5, distance6, duration6, distance7, duration7,distance8,duration8;
void setup() {
Serial.begin (115200);
pinMode(pinA, INPUT_PULLUP); // set pinA as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases)
pinMode(pinB, INPUT_PULLUP); // set pinB as an input, pulled HIGH to the logic voltage (5V or 3.3V for most cases)
attachInterrupt(0,PinA,RISING); // set an interrupt on PinA, looking for a rising edge signal and executing the "PinA" Interrupt Service Routine (below)
attachInterrupt(1,PinB,RISING); // set an interrupt on PinB, looking for a rising edge signal and executing the "PinB" Interrupt Service Routine (below)
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
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(trigPin5, OUTPUT);
pinMode(echoPin5, INPUT);
pinMode(trigPin6, OUTPUT);
pinMode(echoPin6, INPUT);
pinMode(trigPin7, OUTPUT);
pinMode(echoPin7, INPUT);
pinMode(trigPin8, OUTPUT);
pinMode(echoPin8, INPUT);
Serial.begin (115200);
}
void PinA(){
cli(); //stop interrupts happening before we read pin values
reading = PIND & 0xC; // read all eight pin values then strip away all but pinA and pinB's values
if(reading == B00001100 && aFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
encoderPos --; //decrement the encoder's position count
bFlag = 0; //reset flags for the next turn
aFlag = 0; //reset flags for the next turn
}
else if (reading == B00000100) bFlag = 1; //signal that we're expecting pinB to signal the transition to detent from free rotation
sei(); //restart interrupts
}
void PinB(){
cli(); //stop interrupts happening before we read pin values
reading = PIND & 0xC; //read all eight pin values then strip away all but pinA and pinB's values
if (reading == B00001100 && bFlag) { //check that we have both pins at detent (HIGH) and that we are expecting detent on this pin's rising edge
encoderPos ++; //increment the encoder's position count
bFlag = 0; //reset flags for the next turn
aFlag = 0; //reset flags for the next turn
}
else if (reading == B00001000) aFlag = 1; //signal that we're expecting pinA to signal the transition to detent from free rotation
sei(); //restart interrupts
if(oldEncPos != encoderPos)
{
dist=3.5*encoderPos;
//Serial.println(dist);
oldEncPos = encoderPos;
}
}
float ultrasonic()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) * 0.0343;
return distance;
}
float ultrasonic1()
{
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = (duration1 / 2) * 0.0343;
return distance1;
}
float ultrasonic2()
{
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = (duration2 / 2) * 0.0343;
return distance2;
}
float ultrasonic3()
{
digitalWrite(trigPin3, LOW);
delayMicroseconds(2);
digitalWrite(trigPin3, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin3, LOW);
duration3 = pulseIn(echoPin3, HIGH);
distance3 = (duration3 / 2) * 0.0343;
return distance3;
}
float ultrasonic4()
{
digitalWrite(trigPin4, LOW);
delayMicroseconds(2);
digitalWrite(trigPin4, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin4, LOW);
duration4 = pulseIn(echoPin4, HIGH);
distance4 = (duration4 / 2) * 0.0343;
return distance4;
}
float ultrasonic5()
{
digitalWrite(trigPin5, LOW);
delayMicroseconds(2);
digitalWrite(trigPin5, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin5, LOW);
duration5 = pulseIn(echoPin5, HIGH);
distance5 = (duration5 / 2) * 0.0343;
return distance5;
}
float ultrasonic6()
{
digitalWrite(trigPin6, LOW);
delayMicroseconds(2);
digitalWrite(trigPin6, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin6, LOW);
duration6 = pulseIn(echoPin6, HIGH);
distance6 = (duration6 / 2) * 0.0343;
return distance6;
}
float ultrasonic7()
{
digitalWrite(trigPin7, LOW);
delayMicroseconds(2);
digitalWrite(trigPin7, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin7, LOW);
duration7 = pulseIn(echoPin7, HIGH);
distance7 = (duration7 / 2) * 0.0343;
return distance7;
}
float ultrasonic8()
{
digitalWrite(trigPin8, LOW);
delayMicroseconds(2);
digitalWrite(trigPin8, HIGH);
delayMicroseconds(50);
digitalWrite(trigPin8, LOW);
duration8 = pulseIn(echoPin8, HIGH);
distance8 = (duration8 / 2) * 0.0343;
return distance8;
}
void loop()
{
//
//if(oldEncPos != encoderPos)
//{
//dist=3.5*encoderPos;
////Serial.println(dist);
//oldEncPos = encoderPos;
//}
String d0=String(ultrasonic());
String d1=String(ultrasonic1());
String d2=String(ultrasonic2());
String d3=String(ultrasonic3());
String d4=String(ultrasonic4());
String d5=String(ultrasonic5());
String d6=String(ultrasonic6());
String d7=String(ultrasonic7());
String d8=String(ultrasonic8());
String d9=String(dist);
Serial.print(d0+':'+d1+':'+d2+':'+d3+':'+d4+':'+d5+':'+d6+':'+d7+':'+d8+':'+d9);
}
final_code.ino (6.63 KB)