Здравствуйте! Этот код выполняет такую задачу: Мотор вкл когда расстояние меньше указанного. НО Имеется такая проблема: когда расстояние меньше чем здесь мотор не должен работать. Но он продолжает работать. То есть проблема такая: Если расстояние больше чем 170 он не должен ничего делать и не делает. Макс пороговое значение в норме, но если расстояние меньше чем 170 и до 1см мотор крутится. Хотел написать скетч который выполняет такую функцию: чем ближе объект тем чаще вибрация и сильнее вибрация, но мне сказали что простой транзистор типа S8050 не подойдет. Буду благодарен если кто-то напишет такой код чем ближе объект тем чаще вибрация вибрация. Код (C++): #define trigPin 8 #define echoPin 7 #define motor 5 void setup() { /*analogWrite(motor, 250); delay(400); analogWrite(motor, 0);*/ Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(motor, OUTPUT); } void loop() { long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = (duration / 2) / 29.1; /*if (distance <= 170 && distance > 30) { digitalWrite(motor, HIGH); delay(50); analogWrite(motor, LOW); delay(50); digitalWrite(motor, HIGH); }*/ if (distance < 170) { analogWrite(motor, 250); delay(150); analogWrite(motor, 0); delay(100); analogWrite(motor, 250); } if (distance < 120) { analogWrite(motor, 180); delay(150); analogWrite(motor, 0); delay(50); analogWrite(motor, 180); } if (distance <= 50 && distance > 30) { analogWrite(motor, 250); delay(300); analogWrite(motor, 0); delay(50); analogWrite(motor, 250); } // else if (distance < 30) { digitalWrite(motor, LOW); } Serial.print("Расстояние до объекта: "); Serial.print(distance); Serial.println(" см."); delay(100); }
Разберитесь с операторами ветвления. Или так и должно быть, что при расстоянии 45 будут выполнятся все операторы под всеми ифами? Ведь, если расстояние 25, то опять же выполняются все ифы, только у последнего ветвь else пойдет.