使用Arduino Mega和74LS153N MUX芯片复用超声波传感器

时间:2018-12-16 19:16:11

标签: arduino multiplexing sensors

基本上我想做的是多路超声传感器,但是我只能从一个传感器获取数据,而从另一个传感器获取数据却无法。在下面的代码中,我仅使用两个超声波传感器和74LS153N MUX芯片,但是当我运行代码时,第二个传感器的串行监视器中未显示任何数据。

   // Multiplex input 
#define EN 7 // Latch enable
const int A = 6;
//#define A 6 // S0
const int B = 7;
//#define B 8 // S1
// PING sensor interface Pins
long int SEN_IN = 2 ;// Za
long int TRIGGER = 9 ;

// Data variables
long int inDist = 0, cmDist = 0;
long int sensorData[4] = {0,0,0,0};

// Function prototype for reading Data
void usReadData(long int sensor); //Reads sensor data Value

 void setup() {
  Serial.begin(9600); //Initialization serial output 
  //pinMode (EN, OUTPUT); // Latch Enable interface
  pinMode(TRIGGER, OUTPUT); // PING Trig interface
  pinMode(SEN_IN, INPUT); // INput for the PING Echo 
  digitalWrite(EN, HIGH); // Disable Mux
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
}  

  // Main execution of Arduino Code
   void loop()
  {
    usReadSen(); // Read raw Distance value
 cmDist = ((sensorData[0] / 29) / 2); // Distance in CM
 inDist = ((sensorData[0] / 74) / 2); // Distance in inches

 Serial.print("Sensor: "); // Sensor #1
 Serial.print(inDist, DEC); // Distance in inches
 Serial.print("inches, \t"); // Units
 Serial.print(cmDist, DEC); // Distance in cm
 Serial.print("cm \n"); // Units
  }

  // Reads sensor data Value
 void usReadSen()
  {     
     digitalWrite(A, LOW);
     digitalWrite(B, LOW);
     // Trigger a pulse on PING Sensor
     digitalWrite(TRIGGER, LOW); // Ensure Trigger is LOW
     delay(50); // Short delay
     digitalWrite(TRIGGER, HIGH); // Trigger PING
     delay(150); // Wait for trigger
     digitalWrite(TRIGGER, LOW); // Trigger back to LOW

  // Listen for the Echo, save value in array
  sensorData[0] = pulseIn(SEN_IN, HIGH);
  Serial.println(sensorData[0]);

}

我要多路复用的超级传感器的唯一部分是ECHO引脚,在这种情况下,使用上面的代码时,它只会是一个ECHO引脚。

如您在上面的代码中看到的,我正在正确定义所有内容: EN(启动器),S0,S1,Za(芯片输出),触发引脚(Arduino)。

我将ECHO直接连接到MUX的I0a引脚上的芯片中。 ECHO的值存储在数组sensorData[0]中。

0 个答案:

没有答案