В основном я пытаюсь использовать ультразвуковые датчики Multiplex, но я могу получать данные только от одного датчика, а другой датчик не может получить данные.В приведенном ниже коде я использую только два ультразвуковых датчика и микросхему 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 (Enabler), S0, S1, Za (выход из чипа), Trigger pin (Arduino).
Я подключаю ECHO напрямуюв микросхему на выводе I0a в MUX.Значения ECHO хранятся в массиве sensorData[0]
.