GyverPower. Обсуждение библиотеки

Primitive

✩✩✩✩✩✩✩
2 Фев 2021
4
1
Скачал библиотеку с сайта (https://alexgyver.ru/gyverpower/), импортирую в пустом коде:

C++:
#include <GyverPower.h>
void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}
При компиляции выдаёт ошибку:


C:\Users\Ђ«ҐЄбҐ©\Documents\Arduino\libraries\GyverPower\GyverPower.cpp: In member function 'uint8_t GyverPower::sleepDelay(uint32_t)':
C:\Users\Ђ«ҐЄбҐ©\Documents\Arduino\libraries\GyverPower\GyverPower.cpp:159:11: error: invalid conversion from 'uint8_t {aka unsigned char}' to 'sleepprds_t' [-fpermissive]
sleep(i); // уйти в сон
^
C:\Users\Ђ«ҐЄбҐ©\Documents\Arduino\libraries\GyverPower\GyverPower.cpp:80:6: error: initializing argument 1 of 'void GyverPower::sleep(sleepprds_t)' [-fpermissive]
void GyverPower::sleep(sleepprds_t period) {
^
Ошибка компиляции.


Может сломанная библиотека, или я делаю что-то не так?
 

poty

★★★★★★✩
19 Фев 2020
2,957
886
Модель Ардуино правильно выбрана?
 

bort707

★★★★★★✩
21 Сен 2020
2,860
850
Может сломанная библиотека, или я делаю что-то не так?
да, проблема в коде библиотеки.
Авторы неаккуратно обращаются с типами данных. которые сами и создали.
Например, для задержек описали перечислимый тип sleepprds_t , но в коде используют вместо него обычный uint8_t - а это генерит ошибки, если в настройках Ардуино ИДЕ включен ключик -fpermissive

Вариантов решения много :

-поменять настройки компилятора Ардуино, чтобы он не считал это ошибкой
-поправить библиотеку
-написать претензию автору, чтоб поправил
 
  • Лойс +1
Реакции: Primitive

Лазаренко

✩✩✩✩✩✩✩
10 Янв 2021
66
1
Москва
Вот код:

C++:
#include "GyverPower.h"

#define lightsensorPIN 7
#define indicatorPIN 13
#define lightPIN 2

const long seconds = 1000;
const long minute = seconds*60;
const long hour = minute*60;
const long day = hour*24;


void setup() {
  power.setSleepMode(POWERDOWN_SLEEP);

  // подключаем прерывание на пин
  attachInterrupt(0, isr, FALLING);
 
  pinMode(lightsensorPIN, INPUT);
  pinMode(lightPIN, OUTPUT);
 
}

void loop() {
  power.sleepDelay(day * 30);
  digitalWrite(lightPIN, digitalRead(lightsensorPIN));
}

// обработчик аппаратного прерывания
void isr() {
  // дёргаем за функцию "проснуться"
  // без неё проснёмся чуть позже (через 0-8 секунд)
  power.wakeUp(); 
}
в attachInterrupt прерывание указал 0, т.к. у меня датчик (освещенности) на D2, 0 потому что в примере рассматривался D3 и там было 1. (ардуино нано)
в целом слип работает, если например по вачдогу просыпается, а пот по прерыванию чет нет

кстати на D3 работает, ну видимо оно только на нем и работает, ок, так оставлю
 

Vladimir_S

✩✩✩✩✩✩✩
29 Мар 2020
1
0
Ребята, на GIThub скачайте обновленную версию библиотеки (v 1.6). На IDE версии 1.8.13 работает без этой ошибки.
 

Vanojan

✩✩✩✩✩✩✩
8 Сен 2021
2
0
Привет всем. Подскажите получилось ли у кого-нибудь подружить эту библиотеку с Rc-switch? По отдельности всё работает а как только пытаюсь их совместить в частности: mySwitch.enableReceive(0) , всё перестаёт засыпать. На D2 висит приёмник.
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
357
564
@Vanojan, используется радио 433 мгц? Оно ловит из эфира помехи с частотой в несколько кГц, библиотека заводит прерывания и МК сразу же просыпается