Собран термогигрометр на датчике SHT10(20). Во времия работы стал зависать и показывать на дисплее авбракадабру. После перезагрузки (питания) снова начинает работать и опять повтор
#include <Sodaq_SHT2x.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
uint8_t bukva_Pe[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001
};
uint8_t bukva_L[8] = {
B00111,
B01001,
B01001,
B01001,
B01001,
B01001,
B10001
};
uint8_t bukva_G[8] = {
B10101,
B01110,
B00100,
B01110,
B10101,
B10101,
B10101
};
uint8_t bukva_gr[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000
};
LiquidCrystal_I2C lcd(0x27, 16, 2); // установка LCD address to 0x3F for a 16 chars and 2 line display
//LiquidCrystal_I2C lcd(0x3F, 16, 2);
void setup()
{
Serial.begin(9600);
lcd.init(); // Инициализируем lcd
lcd.clear();
// Печать приветствия на LCD.
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("TermoGigrometr");
//lcd.setCursor(3, 0);
//lcd.print("GRIGORIEV");
lcd.setCursor(5, 1);
lcd.print("NOVO.SU");
//lcd.setCursor(6, 1);
//lcd.print("PAVEL");
delay(5000);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("TermoGigrometr");
lcd.setCursor(5, 1);
lcd.print("NOVO.SU");
delay(5000);
lcd.clear();
lcd.createChar(1, bukva_Pe); // создаем символ и записываем его в память LCD
lcd.createChar(2, bukva_L);
lcd.createChar(3, bukva_G);
lcd.createChar(4, bukva_gr);
lcd.home();
}
void loop()
{
float temp_c;
float humidity;
// Читаем показания датчика SHT20
temp_c =SHT2x.GetTemperature();
humidity = SHT2x.GetHumidity();
Serial.print(temp_c);
lcd.clear();
// Выводим данные на LCD
lcd.setCursor(0, 0);
//lcd.print("Temperat: ");
lcd.print("T");
lcd.print("E");
lcd.print("M");
lcd.print("\1. ");
lcd.print(temp_c); //Если нужна коррекция температуры то + или - Х градусов
lcd.print("\4");
lcd.print("C ");
lcd.setCursor(0, 1);// вывод второй строки
//lcd.print("Vlazhnst: ");
lcd.print("B");
lcd.print("\2");
lcd.print("A");
lcd.print("\3");
lcd.print("H. ");
lcd.print(humidity);
lcd.println(" % ");
delay(1000);
}
Добавил програмный Reset думал поможет - стало получше - просто текст стал зависать
//термогигрометр на основе sht20 датчик питается от 3в и
//вешается по протоколу I2C data на А4 a clock на А5
#include <Wire.h>
#include "SHT2x.h"
SHT2x SHT2x;
//питание SHT20 от 3,3вольта
//дата и клок на А4 и Ф5
unsigned long timer;
#include <LiquidCrystal_I2C.h>
uint8_t bukva_Pe[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001
};
uint8_t bukva_L[8] = {
B00111,
B01001,
B01001,
B01001,
B01001,
B01001,
B10001
};
uint8_t bukva_G[8] = {
B10101,
B01110,
B00100,
B01110,
B10101,
B10101,
B10101
};
uint8_t bukva_gr[8] = {
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000
};
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
SHT2x.begin();
Serial.begin(9600);
//pinMode(dataPin, INPUT);
//pinMode(clockPin, INPUT);
lcd.begin();
lcd.clear();
lcd.backlight();// Печать приветствия на LCD.
lcd.setCursor(1, 0);
lcd.print("TermoGigrometr");
lcd.setCursor(5, 1);
lcd.print("NOVO.SU");
delay(4000);
lcd.clear();
lcd.createChar(1, bukva_Pe); // создаем символ и записываем его в память LCD
lcd.createChar(2, bukva_L);
lcd.createChar(3, bukva_G);
lcd.createChar(4, bukva_gr);
lcd.home();
timer = millis();
}
void loop()
{
float temp_c;
float humidity;
temp_c = SHT2x.GetTemperature(); // Читаем температуру датчика SHT20
humidity = SHT2x.GetHumidity();// Читаем влажность датчика SHT20
Serial.print(temp_c);
lcd.clear();
// Выводим данные на LCD
lcd.setCursor(0, 0);
//lcd.print("Temperat: ");
lcd.print("T");
lcd.print("E");
lcd.print("M");
lcd.print("\1. ");
lcd.print(temp_c); //Если нужна коррекция температуры то + или - Х градусов
lcd.print("\4");
lcd.print("C ");
lcd.setCursor(0, 1);// вывод второй строки
//lcd.print("Vlazhnst: ");
lcd.print("B");
lcd.print("\2");
lcd.print("A");
lcd.print("\3");
lcd.print("H. ");
lcd.print(humidity);
lcd.println(" % ");
delay(1000);
if (millis() - timer > 200000) {
Serial.println("reboot");
delay(100);
asm volatile("jmp 0x00");
}
}
В чем причина?
Кто подскажет