基本上我想做的是多路超声传感器,但是我只能从一个传感器获取数据,而从另一个传感器获取数据却无法。在下面的代码中,我仅使用两个超声波传感器和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]
中。