В качестве школьного проекта у меня есть сенсорный датчик в виде переключателя включения / выключения, подключенного к arduino. При касании, когда он запускает подключенные двигатели, сервопривод и ультразвуковой датчик. Затем при повторном касании датчика ониМоя проблема в том, что я не могу заставить сервопривод и ультразвуковой аппарат повторить процесс поворота и вычисления расстояния более одного раза, и я не могу использовать цикл, так как я не могу знать, как долго будет работать схема, и если ясделать после нажатия кнопки во второй раз, мне придется ждать, пока количество циклов, которые я вставил, чтобы закончить, прежде чем все также останавливается.
Вот код на данный момент:
#include <Servo.h>
Servo servo;
int pos = 0;
const int trigPin = 4;
const int echoPin = 5;
long duration;
int distance;
#define TouchSensor 13
int relay = 2;
// motor one
int enA = 10;
int in1 = 6;
int in2 = 7;
// motor two
int enB = 5;
int in3 = 8;
int in4 = 9;
boolean currentState = LOW;
boolean lastState = LOW;
boolean RelayState = LOW;
void setup() {
Serial.begin(9600);
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(TouchSensor, INPUT);
servo.attach(3);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
currentState = digitalRead(TouchSensor);
if (currentState == HIGH && lastState == LOW){
Serial.println("pressed");
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
servo.write(40);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(500);
servo.write(80);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(500);
servo.write(120);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(500);
servo.write(160);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
delay(500);
delay(1);
if (RelayState == HIGH){
digitalWrite(relay, LOW);
RelayState = LOW;
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
} else {
digitalWrite(relay, HIGH);
RelayState = HIGH;
}
}
lastState = currentState;
}
Заранее спасибо.Извините за любые ошибки, английский не мой родной язык.