Активный вольтметр на Arduino
- Войдите на сайт для отправки комментариев
Приветствую всех.
Прошу помощи вот в таком вопросе, есть ардуина, есть код замера напряжения на выводе А7 и все работает прекрасно, выбрали в меню тест батарейки, посмотрели напряжение и вроде как все должно быть прекрасно, нажали кнопку, вышли в основное меню а экран взял и потух... Не учел я то, что аккумулятор даже разряженный из последних сил будет выдавать положенные 7,4 в (или около того) в первые секунды включения, а потом уже упокоится с миром...
Проблема в том, что я никак не могу заключить проверку в цикл, при том, чтобы программа проверяла нажатие клавиши, чтобы закончить цикл и выйти в основное меню. Понимаю что я нуб, и проблема наверное плевая, но я никак не смог ее решить, пол ночи парился... либо я проверяю напряжение без остановки, либо определенное колличество раз, но на кнопку никак не реагирую... Помогите пожалуйста))
void battery_test() { int sensorValue = analogRead(A7); //read the A7 pin value float voltage = (sensorValue * 5.0)/1023.0/0.1656299; //0.1656299 это 20кОм/(20кОм+100кОм) lcd.setCursor(0,0); lcd.print("Voltage = "); lcd.print(voltage); //print the voltage to LCD lcd.print(" V"); if(voltage > 6.50) { tone(tonepin,2400,30); digitalWrite(GREENLED, HIGH); lcd.setCursor(0,1); lcd.print("Battery OK"); } else { tone(tonepin,2600,3000); digitalWrite(REDLED, HIGH); lcd.setCursor(0,1); lcd.print("Low charge"); } keypad.waitForKey(); tone(tonepin,2400,30); menuPrincipal(); }
читал пять раз, так и не понял, что вы хотите проверять ( напряжение батареи или нажатие клавиши ) и в каком цикле.?
вроде бы логично было бы сделать задержку и по окончании ее автоматически перейти в основное меню.
также можно просто сделать в конце кода battery_test проверку нажата ли та же кнопка, что вы зашли в подпрограму проверки, если да то крутим это меню, нет - идем в основное, как я понял - menuPrincipal
естественно кнопку придется удерживать.
if (кнопка нажата) battery_test();
else menuPrincipal();
и нужно видеть весь скетч, многие обходятся без кейпада или просто не используют библиотеку под него.
читал пять раз, так и не понял, что вы хотите проверять
напряжение разряженой батареи - это же очевидно
читал пять раз, так и не понял, что вы хотите проверять ( напряжение батареи или нажатие клавиши ) и в каком цикле.?
вроде бы логично было бы сделать задержку и по окончании ее автоматически перейти в основное меню.
также можно просто сделать в конце кода battery_test проверку нажата ли та же кнопка, что вы зашли в подпрограму проверки, если да то крутим это меню, нет - идем в основное, как я понял - menuPrincipal
естественно кнопку придется удерживать.
if (кнопка нажата) battery_test();
else menuPrincipal();
и нужно видеть весь скетч, многие обходятся без кейпада или просто не используют библиотеку под него.
Извиняюсь если не подробно расписал) Суть в следующем: в основном меню (menuPrincipal) есть несколько различных подменю. Один из них, это проверка напряжения батареи. Как это происходит сейчас - вы пролистываете основное меню, выбираете тест батареи, происходит опрос А7 и результаты выводятся на экран. Дальше при нажатии любой кнопки - вы выходите в основное меню. Проблема в том, что опрос А7 происходит один раз, а как я описывал даже разряженная батарейка первые несколько секунд очень даже не плохо работает, а потом напряжение падает. А что я хотел - вы заходите в тест батареи и пока не нажата кнопка (любая или определенная) должен происходить цикл опроса датчика и вывода результатов, то есть как в мультиметре, в режиме проверки напряжения. Вот как то так...
Сейчас подумал... возможно вы правы с If? Только сделать так?
if (keypad.waitForKey()) menuPrincipal;
else battery_test();
Или не взлетит?) К сожалению пока нет возможности опробовать, пока не приду домой с работы.
напряжение разряженой батареи - это же очевидно
тоже подумал про это, но смысл проверять уже разряженную на кизяк батарею...
может ТС хотел вставить цикл проверки батареи в скетч в автомате и при предельно низком напряжении выводить на экран результат.
так же можно было постояно писать результат замера в переменную и при входе по нажатию видеть уже готовый результат. возможно контроллер работает постоянно, а при нажатии кейпада зажигается экран.
напряжение разряженой батареи - это же очевидно
тоже подумал про это, но смысл проверять уже разряженную на кизяк батарею...
может ТС хотел вставить цикл проверки батареи в скетч в автомате и при предельно низком напряжении выводить на экран результат.
так же можно было постояно писать результат замера в переменную и при входе по нажатию видеть уже готовый результат. возможно контроллер работает постоянно, а при нажатии кейпада зажигается экран.
Эх... не получается у меня объяснить правильно...
В общем суть в следующем: Включаем питание - в основном меню выбираем тест батареи - входим в него - у нас должно быть показано напряжение батареи, значение которого должно обновлятся раз в 100мс - нажали любую кнопку - вышли в основное меню.
Вот как то так. То есть мне нужен цикл опроса датчика с выводом результата на экран, который будет завершатся при нажатии на любую кнопку. Если в тело цикла вставить команду keypad.waitForKey() то цикл замирает и ждет когда я нажму на клавишу. А мне надо чтобы он проверил нажата ли клавиша и если нет то продолжил цикл...
Извиняюсь что объясняюсь каким то быдловским языком)
А функции KeyPad.KeyPressed нет случайно в используемой вами библиотеке? Ну или какойто подобной, которая не wait, а только check ?
А функции KeyPad.KeyPressed нет случайно в используемой вами библиотеке? Ну или какойто подобной, которая не wait, а только check ?
Воооооот!!!! Вот что мне надо!!) Сейчас сижу читаю библиотеку, используется стандартная Keypad.h правда пока ничего не нашел...
Examples
Serial.println(key); меняем на
menuPrincipal();
Урааааааааааааааааааааааа!!!! Заработалоооо!!!! Огромнейшее спасибо!!!!
Теперь это нормально действующий тестер напряжения!!! Сейчас проверил регулируемым блоком питания!
При падении ниже 6,5 вольт начинает противно пищать. Все шикарно!)