Как сбросить/завершить ввод данных с помощью клавиатуры? Arduino Uno кормушка для домашних животных
Сейчас я создаю автоматическую кормушку для домашних животных с помощью Arduino Uno.
Что я хотел сделать, так это после того, как я ввел необходимые данные (дни, часы и минуты), я хочу остановить цикл дней, пока он не закончится, или «сбросить» входные данные, нажав «D». Я не хочу сбрасывать все Arduino, так как это повлияет на сервопривод и будет вращаться на 360°.
Единственное решение, которое у меня есть сейчас, это иметь кнопку, напрямую подключенную к контакту сброса Arduino, однако это повлияет на мой сервопривод; это то, чего я избегаю
if (keypressed == 'B' && stop == true)
{
if (keypressed == 'D') {
stop = false;
exit();
}
lcd.clear();
lcd.print(" Days setup ");
delay(1000);
lcd.clear();
lcd.print("Set no. of Day"); //B_days
char keypressed18 = myKeypad.waitForKey();
if (keypressed18 != NO_KEY && keypressed18 !='*' && keypressed18 !='#' && keypressed18 !='A' && keypressed18 !='B' && keypressed18 !='C' && keypressed18 !='D' )
{
c1 = keypressed18;
lcd.setCursor(0, 1);
lcd.print(c1);
}
i1=48-c1;
B_days=abs(i1);
Serial.print(B_days);
delay(500);
lcd.clear();
lcd.print(" MEAL 1 ");
delay(1000);
lcd.clear();
lcd.print("Set FEED hour");
char keypressed19 = myKeypad.waitForKey(); // здесь все программы останавливаются до тех пор, пока вы не введете четыре цифры, после чего сравнивается с кодом выше
if (keypressed19 != NO_KEY && keypressed19 !='*' && keypressed19 !='#' && keypressed19 !='A' && keypressed19 !='B' && keypressed19 !='C' && keypressed19 !='D' )
{
c2 = keypressed19;
lcd.setCursor(0, 1);
lcd.print(c2);
}
char keypressed20 = myKeypad.waitForKey();
if (keypressed20 != NO_KEY && keypressed20 !='*' && keypressed20 !='#' && keypressed20 !='A' && keypressed20 !='B' && keypressed20 !='C' && keypressed20 !='D' )
{
c3 = keypressed20;
lcd.setCursor(1, 1);
lcd.print(c3);
}
i1=(c2-48)*10;
i2=c3-48;
B_hour1=i1+i2;
delay(500);
lcd.clear();
lcd.print("Set FEED minutes");
char keypressed21 = myKeypad.waitForKey(); // здесь все программы останавливаются до тех пор, пока вы не введете четыре цифры, после чего сравнивается с кодом выше
if (keypressed21 != NO_KEY && keypressed21 !='*' && keypressed21 !='#' && keypressed21 !='A' && keypressed21 !='B' && keypressed21 !='C' && keypressed21 !='D' )
{
c1 = keypressed21;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed22 = myKeypad.waitForKey();
if (keypressed22 != NO_KEY && keypressed22 !='*' && keypressed22 !='#' && keypressed22 !='A' && keypressed22 !='B' && keypressed22 !='C' && keypressed22 !='D' )
{
c2 = keypressed22;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1=(c1-48)*10;
i2=c2-48;
B_minute1=i1+i2;
Serial.print(B_minute1);
delay(500);
lcd.clear();
lcd.print(" MEAL 2 ");
delay(1000);
lcd.clear();
lcd.print("Set FEED hour");
char keypressed23 = myKeypad.waitForKey(); // здесь все программы останавливаются до тех пор, пока вы не введете четыре цифры, после чего сравнивается с кодом выше
if (keypressed23 != NO_KEY && keypressed23 !='*' && keypressed23 !='#' && keypressed23 !='A' && keypressed23 !='B' && keypressed23 !='C' && keypressed23 !='D' )
{
c2 = keypressed23;
lcd.setCursor(0, 1);
lcd.print(c2);
}
char keypressed24 = myKeypad.waitForKey();
if (keypressed24 != NO_KEY && keypressed24 !='*' && keypressed24 !='#' && keypressed24 !='A' && keypressed24 !='B' && keypressed24 !='C' && keypressed24 !='D' )
{
c3 = keypressed24;
lcd.setCursor(1, 1);
lcd.print(c3);
}
i1=(c2-48)*10;
i2=c3-48;
B_hour2=i1+i2;
delay(500);
lcd.clear();
lcd.print("Set FEED minutes");
char keypressed25 = myKeypad.waitForKey(); // здесь все программы останавливаются до тех пор, пока вы не введете четыре цифры, после чего сравнивается с кодом выше
if (keypressed25 != NO_KEY && keypressed25 !='*' && keypressed25 !='#' && keypressed25 !='A' && keypressed25 !='B' && keypressed25 !='C' && keypressed25 !='D' )
{
c1 = keypressed25;
lcd.setCursor(0, 1);
lcd.print(c1);
}
char keypressed26 = myKeypad.waitForKey();
if (keypressed26 != NO_KEY && keypressed26 !='*' && keypressed26 !='#' && keypressed26 !='A' && keypressed26 !='B' && keypressed26 !='C' && keypressed26 !='D' )
{
c2 = keypressed26;
lcd.setCursor(1, 1);
lcd.print(c2);
}
i1=(c1-48)*10;
i2=c2-48;
B_minute2=i1+i2;
Serial.print(B_minute2);
delay(500);
lcd.clear();
AlarmIsActive=2;
keypressed=NO_KEY;
}
@AEZAKMI 12, 👍-1
Обсуждение1 ответ
Это не прямой ответ.
Ваш код излишне повторяющийся и сложный.
Используйте функцию для выполнения повторяющегося кода.
Вот пример того, как вы могли бы сделать числовой ввод в функцию.
Код не тестировался.
int getNumber(String msg) {
int data = 0;
bool numNotPressed = true; // флаговая переменная
lcd.clear();
lcd.print(msg);
lcd.setCursor(0, 1); // устанавливаем курсор на первую позицию во второй строке
while true {
char key = myKeypad.waitForKey();
if ( key != NO_KEY
&& key != '*'
&& key != '#'
&& key != 'A'
&& key != 'B'
&& key != 'C'
&& key != 'D'
) { // была нажата цифровая клавиша
lcd.print(key); // курсор автоматически перемещается
d10 = data * 10;
data = d10 + (key - 48); // собрать многозначный ввод
numNotPressed = false; // была нажата цифровая клавиша
}
else {
if (numNotPressed) data = -1; // -1 означает, что цифровая клавиша не была нажата
return data; // возвращаем значение вызывающему коду
}
}
}
// Применение
lcd.clear();
lcd.print(" MEAL 2 ");
delay(1000);
num = getNumber("Set FEED hour");
if (num > -1) {
B_hour = num; // обновить B_hour, если было введено числовое значение
}
- Вращающийся серводвигатель с использованием Arduino
- Сброс Arduino Uno в коде
- Как сбросить или отформатировать Arduino?
- Как заставить сервопривод вращаться на угол больше 180°
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
- Мигните светодиодом 5 раз с помощью цикла for
- Сброс последовательного порта Arduino в последовательном мониторе и Python
Пожалуйста, предоставьте минимальный воспроизводимый пример, который компилируется, когда мы копируем и пробуем его, а не просто отрывок с множеством других вещей. -- Что мешает обнаружить кнопку и выйти из цикла входа?, @the busybee
Пожалуйста, очистите комментарии в вашем коде... они не имеют смысла, потому что они не описывают функционирование кода, @jsotola