Помогите разобраться со сном ардуинки.

SVD
Offline
Зарегистрирован: 05.04.2018

Добрый день. Подскажите в чем дело? Не работает скетч. Задача следующая: нужно чтобы ардуинка считала нарастающий счетчик с определенного времени с помощью часов реального времени 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]

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Ответ: продолжаете считать, что мы все сидим в вашей голове и точно знаем, что такое "перестаёт работать".

SVD
Offline
Зарегистрирован: 05.04.2018

Буквально отсоединяю vcc (11 пин) и gnd дисплея от ардуинки, в сериал начинает выводиться отсчет до сна. Перед сном выводится нарастающая, потом через 2 минуты она просыпается и все по циклу. А если дисплей подключён как я написал, то вообще ничего не происходит... Не идёт отсчет до сна, не засыпает, не просыпается, не включает дисплей...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

тебе надо идти, преподавать аратарское искусство...  А не вот это вот всё. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Сколько тока употребляет LSD-1600? А максимально ардуина с пина скоко даёт?

bwn
Offline
Зарегистрирован: 25.08.2014

sadman41 пишет:

Сколько тока употребляет LSD

Это смотря, на сколько ЛСД разбодяжен.))))

SVD
Offline
Зарегистрирован: 05.04.2018

Дисплей потребляет 7 mA.
А пин вроде как 40 mA даёт.

bwn
Offline
Зарегистрирован: 25.08.2014

Он без подсветки что-ли?

SVD
Offline
Зарегистрирован: 05.04.2018

С подсветкой (тусклой наверное). Только мультимитр подключил, показывает 7 mA. Подключаю дисплей к постоянным 5 В на ардуинке, все работает и скетч прокручивпется, только вот когда ардуинка спит, дисплей не тухнет.

SVD
Offline
Зарегистрирован: 05.04.2018

Не могу понять, почему виснет весь цикл когда я дисплей на цифровые пины подключаю?

b707
Offline
Зарегистрирован: 26.05.2017

SVD пишет:
Не могу понять, почему виснет весь цикл когда я дисплей на цифровые пины подключаю?

может потому что вы его в лупе включаете каждый раз и каждый раз заново даете init() ? -думаю на третий -пятый раз у вас ардуина тупо виснет

И кстати. совершенно неясно, нафига дисплей каждый раз включать заново, если вы его в программе нигде не выключаете....

sadman41
Offline
Зарегистрирован: 19.10.2016

Наверное таки не 7мА. По даташиту сколько?

SVD
Offline
Зарегистрирован: 05.04.2018

По даташиту 1,2 mA. А вот подсветка пишет, что максимум 260 mA.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не включайте подсветку.

SVD
Offline
Зарегистрирован: 05.04.2018

Не включая подсветку, все равно программа не работает как только питание дисплея подключено к цифровым пинам. Что за ерунда?

SVD
Offline
Зарегистрирован: 05.04.2018

Провел тест. Подлючил только один дисплей (питание) без часов к цифровым выходам, и написал скетч для проверки хватит ли тока для работы дисплея от цифровых пинов. Результат - хватает с достатком и на подсветку тоже и потребление тока 7 mA. 

[code]
#include <Wire.h>
#include "GyverTimer.h"
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f, 16, 2);
GTimer_ms myTimer1(1000);

#define PIN 11
int count = 0;


void setup()
{
  pinMode(PIN, OUTPUT);
  Serial.begin (9600);
}

void loop() {
  if (myTimer1.isReady()) {
    count++;
    Serial.println(count);
  }
  if (count > 10) {
    digitalWrite(PIN, LOW);
    delay(100);
    //    count = 0;
  }
  if (count <= 10) {
    digitalWrite(PIN, HIGH);
    lcd.init();
    lcd.backlight();
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print("Privet");
    delay(100);
    //    count = 0;
  }
  if (count >= 20) {
    count = 0;
  }
}


[/code]

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Удивительные штуки - эти LSD. По даташиту 260мА, по факту 7....

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Удивительные штуки - эти LSD. По даташиту 260мА, по факту 7....

одно слово - LSD

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Мож лучше с косяка начать? Чо LSD то сразу?

SVD
Offline
Зарегистрирован: 05.04.2018

Помогите разобраться пожалуйста!)

gfx125
Offline
Зарегистрирован: 27.05.2017

Так LSD то палёное, от Гайвера

SVD
Offline
Зарегистрирован: 05.04.2018

Причём тут лсд и гайвер. Что за флуд?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SVD пишет:
Причём тут лсд и гайвер. Что за флуд?

Это не флуд. Если в программе используется

#include "GyverTimer.h"

то за помощью нужно обращаться не сюда, а на https://community.alexgyver.ru/

b707
Offline
Зарегистрирован: 26.05.2017

SVD пишет:
Причём тут лсд и гайвер. Что за флуд?

гайвер - потому что у вас в коде используется библиотека от гайвера. Кстати, зачем используется - непонятно, она там нафик не нужна.

А ЛСД - потому что если в даташите на дисплей указан ток 260мА - он НИКАК не может работать всего от 7 Ма. В 150 еще можно поверить - бывает, что в даташите пишут с запасом - но разница в 30 раз исключается.

Вы явно что-то не там или не то померяли.

SVD
Offline
Зарегистрирован: 05.04.2018

С гайверской библиотекой просто гораздо удобнее паузы делать через millis. И ничего больше эта библиотека не делает. И какая разница 7 или 160. Проверил только дисплей запитав от цифрового пина, работает все и дисплей и подсветка. Значит дело не в том что не хватает тока на пине...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

ИМХО после

 digitalWrite(PIN, HIGH);

все перезагружается и так по кругу, или виснит наглухо.

и че все ключи на пины ставят, надо напрямую мотор цеплять и удивляться потом.

SVD
Offline
Зарегистрирован: 05.04.2018

Виснет. Через ключ ток и осталось наверное.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

SVD пишет:
Виснет.

но это не факт, проверить можно вставив в сетап

Serial.println ("Start...");

 

SVD
Offline
Зарегистрирован: 05.04.2018

Так отсчет до 10 прописан в сериал. И его нет как только на цифровой пин подключено питание дисплея.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

так count сразу >10 становится ?

SVD
Offline
Зарегистрирован: 05.04.2018

Сериал вообще молчит. Не идёт ни какого отсчёта. И часы ардуинку не будят. Она просто висит как будто. Как только отсоединяешь vcc дисплея от цифрового пина, программа запускается и работает все корректно.

sadman41
Offline
Зарегистрирован: 19.10.2016

Для разнообразия померяйте напряжение на питании контроллера (пин +5V).

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

как вы программы пишите...

зашли в лооп, 20 строка не выполнилось условие, дальше

24 строка не выполнилось условие, дальше 

29 строка выполнилось - перезагрузка...

 

 

SVD
Offline
Зарегистрирован: 05.04.2018

Этот скетч работает как нужно. Ни каких нариканий нет. На скетче в первом посте не работает дисплей при питании от цифрового пина.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

блин, вот я слепой.

ссори тогда.

и че дисплей включается ??

SVD
Offline
Зарегистрирован: 05.04.2018

Если запитать его от цифрового пина то ничего не включается. Программа висит. Отсоединяю провод, программа запускается, замеряю напряжение на этом пине, показывает 5 В. Фигня какая-то, не могу понять почему подключение питания дисплея на цифровой пин, виснет программа.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

SVD пишет:
Фигня какая-то, не могу понять почему подключение питания дисплея на цифровой пин, виснет программа.
Вот и я не понимаю, зачем питать всякие дисплеи через пины. Для этого обычно блок питания используется. И почему после этого только виснит программа, а не процесор  "пошел на перекур".

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

пойду 1602 достану, ток померяю...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

дисплей с нашлепкой I2C

b707
Offline
Зарегистрирован: 26.05.2017

SVD пишет:
Фигня какая-то, не могу понять почему подключение питания дисплея на цифровой пин, виснет программа.

Похоже, как взял любую либу Гайвера - так сразу разжижение мозга. Проще ему, видите ли, через библиотеку, чем одна строка на миллис...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

прям интересно стало :)

ну че мне еще ардуино с часами достать...

SVD
Offline
Зарегистрирован: 05.04.2018

Так почему не подходит? Не понятно же...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

подкинул часы

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

дуня какая ??

SVD
Offline
Зарегистрирован: 05.04.2018

Уно

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

есть такая...

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

где брали LiquidCrystal_I2C откуда

в моей нет метода init есть begin, хочется воспроизвести один в один 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

.

SVD
Offline
Зарегистрирован: 05.04.2018
xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

потверждаю, без часов все работает ! (2 код)

sadman41
Offline
Зарегистрирован: 19.10.2016

И подсветка 7мА?