5110 пропадает текст
- Войдите на сайт для отправки комментариев
Ср, 25/01/2017 - 18:16
Всем привет.
имеется ардуино уно, к нему подключены bmp280, dht11 и дисплей 5110
библиотека была найдена где то тут - поддержка кириллицы.
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <DHT.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7);
#define DHTTYPE DHT11
#define DHTPIN 2
#define XPOS 0
#define YPOS 1
#define DELTAY 2
DHT dht(DHTPIN, DHTTYPE);
int tem;
int hem;
int dav;
Adafruit_BMP280 bme; // I2C
void setup()
{
Serial.begin(9600);
display.begin();
// установить контраст фона экрана
display.setContrast(60);
display.clearDisplay(); // очистить экран
display.setTextSize(1); // размер шрифта
display.setTextColor(BLACK); // цвет
display.cp437(true);
display.setCursor(15,15);
display.print(utf8rus("ЁжМетеоЭкспресс "));
display.display();
Serial.println(F("BMP280 test"));
if (!bme.begin()) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
dht.begin();
}
void loop()
{
int tem2 = dht.readTemperature();
int vlazh1 = dht.readHumidity();
delay(100);
Serial.print("tem ");
Serial.println(tem2);
Serial.print("vl ");
Serial.println(vlazh1);
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
tem=(bme.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure());
Serial.println(" Pa");
Serial.print("Approx altitude = ");
Serial.print(bme.readAltitude(1022)); // this should be adjusted to your local forcase
// Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(" m");
Serial.print("davl = ");
dav=(bme.readPressure()*0.007500637554192);
Serial.println(bme.readPressure()*0.007500637554192);
Serial.println();
display.setContrast(60);
display.clearDisplay(); // очистить экран
display.setCursor(0,0);
display.print(utf8rus("темп: "));
display.println(tem);
display.setCursor(0,10);
display.print(utf8rus("темп: "));
display.println(tem2);
display.setCursor(0,20);
display.print(utf8rus("влажность: "));
display.println(vlazh1);
display.setCursor(0,30);
display.print(utf8rus("давление: "));
display.println(dav);
display.display();
delay(1000);
}
/* Recode russian fonts from UTF-8 to Windows-1251 */
String utf8rus(String source)
{
int i,k;
String target;
unsigned char n;
char m[2] = { '0', '\0' };
k = source.length(); i = 0;
while (i < k) {
n = source[i]; i++;
if (n >= 0xC0) {
switch (n) {
case 0xD0: {
n = source[i]; i++;
if (n == 0x81) { n = 0xA8; break; }
if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
break;
}
case 0xD1: {
n = source[i]; i++;
if (n == 0x91) { n = 0xB8; break; }
if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
break;
}
}
}
m[0] = n; target = target + String(m);
}
return target;
}
проблема в том, что через некоторое время на экране просто пусто. в монитор при этом данные поступают. подскажите, пожалуйста, где я косякнул?
Сам дисплей на предмет глюков был проверен?
У меня зависал такой дисплей, когда запускал скетч, где использовались прерывания по таймеру. Когда прерывания убрал, все нормализовалось. В Ваших библиотеках прерывания не используются?
И еще... Один из моих дисплеев отказывался нормально работать. Я его даже записал в неисправные. Но когда подключил его с правильными напряжениями и сигналами 3.3 вольта все чудесным образом наладилось. Другие дисплейчиками работают нормально и с пятивольтовыми ардуинками.
Я не даю Вам советов, просто рассказал как было у меня.
Сам дисплей на предмет глюков был проверен?
как его правильно проверить?
кстати вчера раза два пердергивал питание - не "заводился"...а потом "завёлся" и почти полчаса показывал..
у меня как и у автора ниже тоже закрадываются подозрения по питанию... хотя ардуинка подключена к 5,2В 2А
Здесь одни изверги собрались? У этих дисплеев питание 2.8В вообще то. Вот правильное включение.