Я пытаюсь написать простую управляющую программу для 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, ни один из них не устранил проблему. Любое понимание очень ценится.
Вы должны посмотреть на внутренние подтягивающие резисторы на 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);
}
}