Мультиплексирование ультразвукового датчика с использованием Arduino Mega и чипа 74LS153N MUX - PullRequest
0 голосов
/ 16 декабря 2018

В основном я пытаюсь использовать ультразвуковые датчики 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].

...