Целью следующего кода Arduino является взаимодействие с высокими и низкими сигналами, посылаемыми Raspberry Pi; Полное объяснение довольно сложное, поэтому я сэкономлю время. Сигналы, посылаемые от Pi (контакты 10 и 11), поворачивают шаговый двигатель, подключенный к приводу A4988, по часовой стрелке или против часовой стрелки. Штыри, которые диктуют это из Arduino, являются шагами и направляющими штифтами (9 и 8). Я пытаюсь включить sleepPin через 60 секунд бездействия выводов 10 и 11.
Аналогичным образом, я хочу прекратить принимать ввод с выводов 10 и 11, если они оба считывают один и тот же входной сигнал в течение более 3 секунд. Я искал способы, как включить время в скрипт Arduino, но не знаю, как его использовать в этом случае.
byte directionPin = 9;
byte stepPin = 8;
byte sleepPin = 12;
byte buttonCWpin = 10;
byte buttonCCWpin = 11;
boolean buttonCWpressed = false;
boolean buttonCCWpressed = false;
long previousMillis = 0;
long interval = 1000;
void setup() {
//determines length of stepper movement
pinMode(directionPin, OUTPUT);
pinMode(stepPin, OUTPUT);
//moves motors clockwise or counterclockwise
pinMode(buttonCWpin, INPUT_PULLUP);
pinMode(buttonCCWpin, INPUT_PULLUP);
}
void loop() {
readButtons();
actOnButtons();
}
void readButtons() {
buttonCCWpressed = false;
buttonCWpressed = false;
if (digitalRead(buttonCWpin) == LOW) {
buttonCWpressed = true;
}
if (digitalRead(buttonCCWpin) == LOW) {
buttonCCWpressed = true;
}
}
void actOnButtons() {
if (buttonCWpressed == true) {
digitalWrite(directionPin, LOW);
for(int x = 0; x < 1; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(515);
digitalWrite(stepPin,LOW);
delayMicroseconds(515);
}
}
if (buttonCCWpressed == true) {
digitalWrite(directionPin, HIGH);
for(int x = 0; x < 1; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(515);
digitalWrite(stepPin,LOW);
delayMicroseconds(515);
}
}
}
Буду признателен за любую помощь вместе с любыми советами или замечаниями.
Спасибо.