Отключение OLED дисплея на PowerBank
- Войдите на сайт для отправки комментариев
Собираю потихоньку повербанк на 9 или 12 литиевых акуммов 3S3P или 3S4P (буду решать после приобретения ящика). Далее dc-dc преобразователь повышающий с 12 на 48 (250w), параллельно dc-dc понижайка на 5в для зарядки телефона. Тумблер включения и кнопка для пробуждения дисплея или всей ардуины. Далее хочу добавить ардуину для мониторинга заряда акуммов (два резистора, делитель), для мониторинга выходного напряжения ina226 (можно еще добавить выходной ток, но незнаю насколько ina226 будет прожорливой) , термистор для мониторинга температуры на преобразователе, и все выводить на OLED SH1106 или SSD1306 (SH1106 предпочтительнее). Нужна помощь с куском скетча или мини скетч, который при включении повербанка (всей системы) тумблером включает дисплей на 20 сек потом тушит, при нажатии на кнопку рядом с дисплеем включает дисплей на 20 сек, потом тушит. Я так понимаю delay не проканает, так как тормозит выполнение вычислений с датчиков. Пробовал кидать vcc дисплея на пин мк, и включать дисплей как светодиод, не помогло. Повербанк собираю для шашлычного сезона, запитать акустику (40w) или акустику (60w), можно будет и для ноута его юзать. Буду благодарен за помощь. Ну или у кого советы будут, как лучше реализовать и критику тоже принимаю.
А где скетч как пытались сделать ?
Тут на форуме масса примеров спящего режима, а ssd1306 отключается отправкой соответствующей команды - аналогично примеров много.
А где скетч как пытались сделать ?
Спасибо за ответ, неравнодушный человек. Я новичок. Умею только копипастить нужные куски из скетча если по честноку. В школе учил басик и паскаль, поэтому представляю, что такое прерывание. Скетч, пока в разработке. Затычка только в библиотеке Ina226(он не такой распространенный как INA219). Получил из Китая SH1106 он мне болше по душе, так как 1,3" кошернее смотрится чем 0,96". Графо библы выжирают память очень сильно, для SSD1306 перепробовал кучу: Adafruit, u8glib, oledI2C, SSD1306Ascii, SSD1306 Lexus2k. Оптимальными оказались u8glib, и SSD1306 Lexus2k так как подходят и для SH1106. Библиотека Лексуса отлично выключает дисплей, кастомные шрифты. Проблема в другом. Есть стенд кнопка и дисплей. Нажал на кнопку, дисплей ON, на 20 сек, потом OFF, а вычисления идут в режиме офф дисплея, или полностью ардуину лучше оффать?. Как этот кусочек реализовать.
Ну как тут говорили....начните с простейшего, сначала расчёт, потом дисплей, потом ещё что-то, потом отключение.
Все мы были начинающими, не все сразу.
Даже наверное начните с кнопки и светодиода чтоб горели по нужной логике
шеф, это пройдено. При нажатии кнопки светодиод горит, но тормозит начало вычислений с датчиков. Буду выкладывать фото кухни по мере сборки программинга.
Буду выкладывать фото кухни по мере сборки программинга.
Заменил делитель напряжения на Ina219 для контроля напряжения на акб. Вопрос как сделать так, чтобы при включении повербанка дисплей горел 20 сек потом тух, а при нажатии на кнопку (допустим 6 выход ардуины) дисплей он - на 20 сек. Комманды для дисплея ssd1306_displayOff / ssd1306_displayOn. Код:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <INA219.h>
#include <INA226.h>
#include "ssd1306.h"
#include "bat100.h"
#include "bat80.h"
#include "bat60.h"
#include "bat40.h"
#include "bat20.h"
#include "tutorial.h"
#include "Tahoma10x14.h"
INA219 Ina219;
INA226_Class Ina226;
#define ONE_WIRE_BUS 7
float Ubat = 0;
float Udcdc = 0;
char UdcdcOut[5];
float Tempdcdc =0;
char TempdcdcOut[5];
uint8_t devicesFound = 0;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup()
{
Ina219.begin();
devicesFound = Ina226.begin(1,100000);
Ina226.setAveraging(4);
Ina226.setBusConversion(7);
Ina226.setShuntConversion(7);
Ina226.setMode(INA_MODE_CONTINUOUS_BOTH);
sensors.begin();
sh1106_128x64_i2c_init();
ssd1306_fillScreen(0x00);
ssd1306_setFixedFont(Tahoma10x14);
}
void loop()
{
ssd1306_drawBitmap(0, 0, 31, 64, tutorial);
Ubat = Ina219.busVoltage();
if(Ubat>=11.8) {
ssd1306_drawBitmap(94, 0, 128, 64, bat100);
}
if(Ubat>=10.9 && Ubat<11.8) {
ssd1306_drawBitmap(94, 0, 128, 64, bat80);
}
if(Ubat>=10.0 && Ubat<10.9) {
ssd1306_drawBitmap(94, 0, 128, 64, bat60);
}
if(Ubat>=9.1 && Ubat<10.0) {
ssd1306_drawBitmap(94, 0, 128, 64, bat40);
}
if(Ubat<9.1) {
ssd1306_drawBitmap(94, 0, 128, 64, bat20);
}
Udcdc = Ina226.getBusMilliVolts();
Udcdc = Udcdc /1000.0;
dtostrf(Udcdc, 5, 2, UdcdcOut);
ssd1306_printFixed (36, 8, UdcdcOut, STYLE_NORMAL);
sensors.requestTemperatures();
Tempdcdc = (sensors.getTempCByIndex(0));
dtostrf(Tempdcdc, 5, 2, TempdcdcOut);
ssd1306_printFixed (36, 47, TempdcdcOut, STYLE_NORMAL);
delay(50);
};
И фото кухни http://uploads.ru/LERhC.jpg