Помогите разобраться со сном ардуинки.
- Войдите на сайт для отправки комментариев
Вс, 03/03/2019 - 15:09
Добрый день. Подскажите в чем дело? Не работает скетч. Задача следующая: нужно чтобы ардуинка считала нарастающий счетчик с определенного времени с помощью часов реального времени DS3231, просыпалась от тех же часов, включала дисплей lcd-1600 выводила нарастающее значение и засыпала через 10 секунд на 2 минуты. Скетч без дисплея работает, как только подключаю дисплей, скетч перестает работать. Питание дисплея подключаю на 11 пин. Подскажите пожалуйста, что я делаю не правильно?
[code] #include "LowPower.h" #include <Wire.h> #include <DS3231.h> #include "GyverTimer.h" #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3f, 16, 2); GTimer_ms myTimer1(1000); GTimer_ms myTimer2(1000); #define PIN 11 const int wakeUpPin = 2; int count = 0; int year; int month; int day; int hour; int min; unsigned long year_min; unsigned long month_min; unsigned long day_min; unsigned long hour_min; unsigned long min_min; unsigned long summ_min; int summ_min_of; int year_of = 2019; int month_of = 3; int day_of = 3; int hour_of = 12; int min_of = 0; int loga; DS3231 clock; RTCDateTime dt; void wakeUp() { } void setup() { pinMode(wakeUpPin, INPUT); pinMode(PIN, OUTPUT); Serial.begin (9600); clock.begin(); // clock.setDateTime(__DATE__, __TIME__); clock.enableOutput(false); clock.armAlarm1(false); clock.armAlarm2(false); clock.clearAlarm1(); clock.clearAlarm2(); } void loop() { setSleepTimer(2); timer (); digitalWrite(PIN, HIGH); lcd.init(); lcd.backlight(); lcd.clear(); lcd.setCursor(4, 0); lcd.print(summ_min); if (myTimer1.isReady()) { count++; Serial.println(count); } if (count >= 10) { Serial.println ("Timer: Entering Sleep mode"); Serial.println(summ_min); delay(100); count = 0; sleep (); } } void timer () { dt = clock.getDateTime(); year = dt.year; month = dt.month; day = dt.day; hour = dt.hour; min = dt.minute; year_min = (year - year_of) * 525600; month_min = (month - month_of) * 43200; day_min = (day - day_of) * 1440; hour_min = (hour - hour_of) * 60; min_min = min - min_of; summ_min = year_min + month_min + day_min + hour_min + min_min; } void sleep () { attachInterrupt(0, wakeUp, LOW); LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); detachInterrupt(0); } void setSleepTimer(int mins) { uint8_t hours = mins / 60; uint8_t mins_left = mins - hours * 60; dt = clock.getDateTime(); uint8_t hnow = dt.hour; uint8_t mnow = dt.minute; uint8_t sec = dt.second; mnow += mins_left; if (mnow >= 60) { mnow -= 60; hnow += 1; } hnow += hours; if (hnow > 23) { hnow -= 24; } clock.setAlarm1(0, hnow, mnow, sec, DS3231_MATCH_H_M_S); } [/code]
Ответ: продолжаете считать, что мы все сидим в вашей голове и точно знаем, что такое "перестаёт работать".
Буквально отсоединяю vcc (11 пин) и gnd дисплея от ардуинки, в сериал начинает выводиться отсчет до сна. Перед сном выводится нарастающая, потом через 2 минуты она просыпается и все по циклу. А если дисплей подключён как я написал, то вообще ничего не происходит... Не идёт отсчет до сна, не засыпает, не просыпается, не включает дисплей...
тебе надо идти, преподавать аратарское искусство... А не вот это вот всё.
Сколько тока употребляет LSD-1600? А максимально ардуина с пина скоко даёт?
Сколько тока употребляет LSD
Это смотря, на сколько ЛСД разбодяжен.))))
Дисплей потребляет 7 mA.
А пин вроде как 40 mA даёт.
Он без подсветки что-ли?
С подсветкой (тусклой наверное). Только мультимитр подключил, показывает 7 mA. Подключаю дисплей к постоянным 5 В на ардуинке, все работает и скетч прокручивпется, только вот когда ардуинка спит, дисплей не тухнет.
Не могу понять, почему виснет весь цикл когда я дисплей на цифровые пины подключаю?
может потому что вы его в лупе включаете каждый раз и каждый раз заново даете init() ? -думаю на третий -пятый раз у вас ардуина тупо виснет
И кстати. совершенно неясно, нафига дисплей каждый раз включать заново, если вы его в программе нигде не выключаете....
Наверное таки не 7мА. По даташиту сколько?
По даташиту 1,2 mA. А вот подсветка пишет, что максимум 260 mA.
Не включайте подсветку.
Не включая подсветку, все равно программа не работает как только питание дисплея подключено к цифровым пинам. Что за ерунда?
Провел тест. Подлючил только один дисплей (питание) без часов к цифровым выходам, и написал скетч для проверки хватит ли тока для работы дисплея от цифровых пинов. Результат - хватает с достатком и на подсветку тоже и потребление тока 7 mA.
Удивительные штуки - эти LSD. По даташиту 260мА, по факту 7....
Удивительные штуки - эти LSD. По даташиту 260мА, по факту 7....
одно слово - LSD
Мож лучше с косяка начать? Чо LSD то сразу?
Помогите разобраться пожалуйста!)
Так LSD то палёное, от Гайвера
Причём тут лсд и гайвер. Что за флуд?
Это не флуд. Если в программе используется
#include "GyverTimer.h"
то за помощью нужно обращаться не сюда, а на https://community.alexgyver.ru/
гайвер - потому что у вас в коде используется библиотека от гайвера. Кстати, зачем используется - непонятно, она там нафик не нужна.
А ЛСД - потому что если в даташите на дисплей указан ток 260мА - он НИКАК не может работать всего от 7 Ма. В 150 еще можно поверить - бывает, что в даташите пишут с запасом - но разница в 30 раз исключается.
Вы явно что-то не там или не то померяли.
С гайверской библиотекой просто гораздо удобнее паузы делать через millis. И ничего больше эта библиотека не делает. И какая разница 7 или 160. Проверил только дисплей запитав от цифрового пина, работает все и дисплей и подсветка. Значит дело не в том что не хватает тока на пине...
ИМХО после
все перезагружается и так по кругу, или виснит наглухо.
и че все ключи на пины ставят, надо напрямую мотор цеплять и удивляться потом.
Виснет. Через ключ ток и осталось наверное.
но это не факт, проверить можно вставив в сетап
Так отсчет до 10 прописан в сериал. И его нет как только на цифровой пин подключено питание дисплея.
так count сразу >10 становится ?
Сериал вообще молчит. Не идёт ни какого отсчёта. И часы ардуинку не будят. Она просто висит как будто. Как только отсоединяешь vcc дисплея от цифрового пина, программа запускается и работает все корректно.
Для разнообразия померяйте напряжение на питании контроллера (пин +5V).
как вы программы пишите...
зашли в лооп, 20 строка не выполнилось условие, дальше
24 строка не выполнилось условие, дальше
29 строка выполнилось - перезагрузка...
Этот скетч работает как нужно. Ни каких нариканий нет. На скетче в первом посте не работает дисплей при питании от цифрового пина.
блин, вот я слепой.
ссори тогда.
и че дисплей включается ??
Если запитать его от цифрового пина то ничего не включается. Программа висит. Отсоединяю провод, программа запускается, замеряю напряжение на этом пине, показывает 5 В. Фигня какая-то, не могу понять почему подключение питания дисплея на цифровой пин, виснет программа.
пойду 1602 достану, ток померяю...
дисплей с нашлепкой I2C
Похоже, как взял любую либу Гайвера - так сразу разжижение мозга. Проще ему, видите ли, через библиотеку, чем одна строка на миллис...
прям интересно стало :)
ну че мне еще ардуино с часами достать...
Так почему не подходит? Не понятно же...
подкинул часы
дуня какая ??
Уно
есть такая...
где брали LiquidCrystal_I2C откуда
в моей нет метода init есть begin, хочется воспроизвести один в один
.
Вот выложил.
https://1drv.ms/f/s!Ai-6GhJNEDRorzuFnuzSAsyeiC8F
потверждаю, без часов все работает ! (2 код)
И подсветка 7мА?