Привет, мне нужна помощь: Суть такова, мне нужно сделать чтобы пищалка пищала на частоте 1000 если какой то объект подносится к датчику расстояния F ближе чем на 75 сантиметров, на частоте 500 к датчику U, на частоте 255 к датчику D, и просто издает звуки если ни одно из условий не выполняется. Но есть проблема... пищалка пищит всегда и в мониторе последовательного порта-ничего. Изображения подключений https://drive.google.com/open?id=0B6q3FqDap-ybRWptcXlqcHRyTTQ Код (C++): #include <Wire.h> #include <GpioExpander.h> GpioExpander adio(42); int trigPin = 11; int echoPin = 12; int p = 3; long durationF, cmF, durationU, cmU, durationD, cmD; void setup() { Wire.begin(); Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); adio.pinMode(4, OUTPUT); adio.pinMode(5, INPUT); adio.pinMode(8, OUTPUT); adio.pinMode(7, INPUT); pinMode(10, OUTPUT); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(5); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); adio.digitalWrite(4, LOW); delayMicroseconds(5); adio.digitalWrite(4, HIGH); delayMicroseconds(10); adio.digitalWrite(4, LOW); adio.pinMode(5, INPUT); adio.digitalWrite(8, LOW); delayMicroseconds(5); adio.digitalWrite(8, HIGH); delayMicroseconds(10); adio.digitalWrite(8, LOW); adio.pinMode(7, INPUT); durationF = pulseIn(echoPin, HIGH); cmF = (durationF/2) / 29.1; durationU = pulseIn(5, HIGH); cmU = (durationU/2) / 29.1; durationD = pulseIn(7, HIGH); cmD = (durationD/2) / 29.1; if (durationF<4365) { tone(p,1000); } if (durationU<4365) { tone(p,500); } if (durationD<4365) { tone(p,255); } else if (durationF>=4365) { tone(p, 0); } else if (durationU>=4365) { tone(p, 0); } else if (durationD>=4365) { tone(p, 0); } Serial.print(cmF); Serial.print(" cm forward "); Serial.print(cmU); Serial.print(" cm upward "); Serial.print(cmD); Serial.print(" cm down "); Serial.println(); delay(250); }
В вашем скетче смешались в кучу кони-люди. 1. При работе с датчиками расстояния (я так понимаю это ультразвуковые?) надо давать импульс и считывать длительность эха одного датчика за раз. А затем посылать импульс другого датчика и слушать его эхо. А вы посылаете сразу все три импульса. Но ведь первая pulseIn будет ждать прихода эха или до таймаута, при этом до следующих pulseIn дело еще не дошло. 2. С ифами таки бардак