Ошибка цикла Arduino: несколько секунд ждет ответа на изменение ввода

Я пытаюсь написать простую управляющую программу для Arduino Uno для эксперимента, на котором я работаю. Проще говоря, он просто должен прочитать, если входной вывод высокий, если нужно подождать 10 миллисекунд, чтобы превратить выходной вывод в высокий, удерживать в течение 10 миллисекунд, а затем перейти в низкий, иначе выходной вывод будет низким.

Моя проблема в том, что когда я запускаю это, он полностью игнорирует начальную задержку, и выходной вывод остается высоким в течение нескольких секунд, прежде чем становится низким. (с использованием delayMicroseconds)

void setup()
{
pinMode(8, INPUT);
pinMode(13, OUTPUT);
}

void loop()
{
if (digitalRead(8) == HIGH)
{
delayMicroseconds(10000);  //wait 10 milliseconds
digitalWrite(13, HIGH);   // Pump on
delayMicroseconds(10000);   // holds for pulse width of 10 millisecond
digitalWrite(13, LOW);   // Pump off
}
else
{
}
}

Я попытался настроить что-то более простое для отладки, используя функцию задержки, чтобы подождать секунду, затем увеличить выходной вывод, подождать секунду, а затем уменьшить выходной вывод. Я сделал это, чтобы я мог визуально отлаживать, используя встроенный светодиод Arduino. В результате он фактически продолжает цикл 3 раза после того, как входной контакт становится низким. (используя задержку)

void setup()
{
pinMode(8, INPUT);
pinMode(13, OUTPUT);
}

void loop()
{
if (digitalRead(8) == HIGH)
{
delay(1000);  //wait 1 second
digitalWrite(13, HIGH);   // Pump on
delay(1000);                  // hold for 1 second
digitalWrite(13, LOW);   // Pump off
}
else
{
}
}

Я не могу понять, почему он это делает. Я просмотрел все и не могу найти информацию о том, почему это произойдет. Я могу упустить что-то действительно простое, я не опытный кодер, я просто пишу то, что мне нужно для проведения экспериментов. Я пытался читать и записывать в регистр выводов напрямую, используя код c, и переключаясь с оператора if на цикл while, ни один из них не устранил проблему. Любое понимание очень ценится.

0

Решение

Вы должны посмотреть на внутренние подтягивающие резисторы на Arduino. Вы можете полностью отменить сигнал с вашей кнопки с помощью программного обеспечения:

void setup() {
pinMode(2, INPUT_PULLUP);
}

void loop() {
if (digitalRead(2) == LOW)  // NOTE THAT PULLUPS REVERSE YOUR LOGIC
{
delay(1000);  //wait 1 second
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
}
}
1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector