Доброго времени стуок
дисплей SH1107 64*128
камень mega328p
кварц 16 мегагерц
загрузчик minicore
Столкнулся с проблемами конфликтов библиотек или не пойму как это назвать.
подключил дисплей - работает, дальше часы реального времени на DS1307 - работают, время показывают.
начинаю подключать DS18b20 - пропадает инициализация дисплея.
методом научного тыка и перестановкой очередности инициализации дисплея добился работы.
запустил ацп - работает.
сечас начинаю подключать библиотеку microLed и если раскоментировать "//microLED<NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;"
опять всё перестаёт работать.
подскажите пожалуйста, что делаю не так?
""upd при включении ком порта - тоже самое, дисплей не инициализируется, плата уходит в циклический ребут.
дисплей SH1107 64*128
камень mega328p
кварц 16 мегагерц
загрузчик minicore
Столкнулся с проблемами конфликтов библиотек или не пойму как это назвать.
подключил дисплей - работает, дальше часы реального времени на DS1307 - работают, время показывают.
начинаю подключать DS18b20 - пропадает инициализация дисплея.
методом научного тыка и перестановкой очередности инициализации дисплея добился работы.
запустил ацп - работает.
сечас начинаю подключать библиотеку microLed и если раскоментировать "//microLED<NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;"
опять всё перестаёт работать.
подскажите пожалуйста, что делаю не так?
""upd при включении ком порта - тоже самое, дисплей не инициализируется, плата уходит в циклический ребут.
C++:
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define SCREEN_WIDTH 64
#define SCREEN_HEIGHT 128
#define SH110X_I2C_ADDRESS 0x3C // Замените на 0x3D, если это адрес вашего дисплея
Adafruit_SH1107 display = Adafruit_SH1107(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
#include <Wire.h>
#include "RTClib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#define STRIP_PIN 9 // пин ленты
#define NUMLEDS 73 // кол-во светодиодов
#define COLOR_DEBTH 3
#include <microLED.h>
//microLED<NUMLEDS, STRIP_PIN, MLED_NO_CLOCK, LED_WS2818, ORDER_GRB, CLI_AVER> strip;
float input_volt = 0.0;
float akb = 0.0;
float AKB = 0.0;
byte a = 0;
int i = 0;
float temp=0.0;
float r1=1000000.0; //сопротивление резистора r1
float r2=100000.0; // сопротивление резистора r2
float temp1 = 0.0; // текущее значение температуры
RTC_DS1307 rtc;
DateTime now;
#define BUTTON_HOURS 3
#define BUTTON_MINUTES 4
#define BUTTON_RESET 5
#define GABARIT 8
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
DeviceAddress Thermometer;
void setup()
{
// Инициализация кнопок
pinMode(BUTTON_HOURS, INPUT_PULLUP);
pinMode(BUTTON_MINUTES, INPUT_PULLUP);
pinMode(BUTTON_RESET, INPUT_PULLUP);
// Инициализация часов
if (!rtc.begin())
{
while (1)
;
}
if (! rtc.isrunning())
{
//Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(2024, 6, 29, 0, 0, 0)); // 19 августа 2020 года 0:00:00
}
sensor.begin(); // инициализация DS18B20
sensor.getAddress(Thermometer, 0); // адрес DS18B20 (поиск по индексу)
sensor.setResolution(Thermometer, TEMPERATURE_PRECISION);
if (!display.begin(SH110X_I2C_ADDRESS, true))
{
while (1)
;
}
display.clearDisplay();
display.display();
display.setRotation(1);// 0-3 поворот изображения на дисплее
display.setTextSize(4);
}
void loop()
{
int analogvalue = analogRead(A0);
temp = (analogvalue * 5.0) / 1024.0; // формула для конвертирования значения напряжения
input_volt = temp / (r2/(r1+r2));
i++;
akb = akb+input_volt;
if(i >=10)
{
i=0;
AKB = akb/10;
akb = 0.0;
}
DateTime now = rtc.now();
// Проверка нажатия кнопок
if (digitalRead(BUTTON_HOURS) == LOW)
{
adjustHours();
}
if (digitalRead(BUTTON_MINUTES) == LOW)
{
adjustMinutes();
}
if (digitalRead(BUTTON_RESET) == LOW)
{
resetMinutes();
}
// Обновляем дисплей
display.clearDisplay();
display.setTextSize(4);
display.setTextColor(SH110X_WHITE);
display.setCursor(8, 0);//отступ вправо
if (now.hour() < 10)
display.print("0");
display.print(now.hour());
display.print(":");
if (now.minute() < 10)
display.print("0");
display.print(now.minute());
display.setTextSize(2);
display.setTextColor(SH110X_WHITE);
display.setCursor(12, 40);//отступ вправо
sensor.requestTemperatures(); // считывание значение температуры
temp1 = sensor.getTempC(Thermometer); // температура в градусах Цельсия
display.print(temp1,0);
display.setCursor(80, 40);//отступ вправо
display.print(AKB,1);
display.display();
delay(400);
/*
if (GABARIT != 0 )
{
if(a == 0)
{
strip.setBrightness(150);
strip.clear();
strip.show(); // вывод изменений на ленту
delay(2); // между вызовами show должна быть пауза минимум 40 мкс !!!!
for (int i = 0; i < NUMLEDS ; i++)
{
strip.leds[i] = mRGB(0, 255, 0);
strip.show(); // выводим изменения
delay(30);
}
a = 1;
}
strip.setBrightness(40);
strip.show(); // вывод изменений на ленту
delay(2); // между вызовами show должна быть пауза минимум 40 мкс !!!!
strip.fill( mRGB(0, 255, 0));
strip.show(); // выводим изменения
delay(30);
}
else
{
a = 0;
strip.clear();
strip.show();
delay(30);
}
*/
}
void adjustHours()
{
now = rtc.now();
int hours = now.hour();
hours = (hours + 1) % 24;
rtc.adjust(DateTime(now.year(), now.month(), now.day(), hours, now.minute(), now.second()));
}
void adjustMinutes()
{
now = rtc.now();
int minutes = now.minute();
minutes = (minutes + 1) % 60;
rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), minutes, now.second()));
}
void resetMinutes()
{
now = rtc.now();
rtc.adjust(DateTime(now.year(), now.month(), now.day(), 0, 0, 0));
}
Изменено: