Проблема при включении OLED LCD Display I2C 0.96 IIC Serial 128X64
- Войдите на сайт для отправки комментариев
Чт, 16/07/2015 - 15:38
Собираю небольшую метеостанцию.
Данные выводятся на OLED LCD Display I2C 0.96 IIC Serial 128X64. Прикрутил к метеостанции дальномер HC-SR04. Логика такая: при приближении к метеостанции включается дисплей, при удалении от нее отключается.
Так вот в чем вопрос: Дисплей подключен к 13 пину и дальномер следовательно открывает его и закрывает, но дисплей никак не реагирует. Так же когда питание дисплея подаю от ардуино все работает но как только выйму питани и вставлю обратно дисплей не стартует. Что это может быть.
#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_BMP085.h> #include <Wire.h> #include <DS1307RTC.h> #include <Time.h> #define OLED_RESET 4 #define Trig 9 #define Echo 8 #define Disp 13 Adafruit_SSD1306 display(OLED_RESET); Adafruit_BMP085 bmp; tmElements_t tm; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Could not find a valid BMP085 sensor, check wiring!"); while (1) {} } display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); RTC.read(tm); pinMode(Trig, OUTPUT); pinMode(Echo, INPUT); pinMode(Disp, OUTPUT); //13 пин - подключен дисплей } unsigned int impulseTime=0; unsigned int distance_sm=0; void loop() { //ВЫВОДИМ НА ДИСПЛЭЙ //----------------------------------------------------------------------------------------------------- //Температура display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.print("T= "); display.print(bmp.readTemperature()); display.println(" C"); display.display(); //Давление display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,20); display.print("P= "); display.print(bmp.readPressure()); display.display(); //Часы display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,40); print2digits(tm.Hour); display.print(":"); print2digits(tm.Minute); display.print(":"); print2digits(tm.Second); display.display(); delay(1000); display.clearDisplay(); // ДАЛЬНОМЕР //---------------------------------------------------------------------------------------------------- digitalWrite(Trig, HIGH); digitalWrite(Disp, LOW); //Дисплей выключен /* Подаем импульс на вход trig дальномера */ delayMicroseconds(25); // равный 10 микросекундам digitalWrite(Trig, LOW); // Отключаем impulseTime=pulseIn(Echo, HIGH); // Замеряем длину импульса distance_sm=impulseTime/58; // Пересчитываем в сантиметры Serial.println(distance_sm); // Выводим на порт if (distance_sm<30) // Если расстояние менее 30 сантиметром { digitalWrite(Disp, HIGH); // Дисплей горит } else { digitalWrite(Disp, LOW); // иначе не горит } delay(100); } void print2digits(int number) { //Функция добавления нуля если число (часы минуты секунды) от 0 до 10 if (number >= 0 && number < 10) { display.print('0'); } display.print(number); }
Дисплей подключен к 13 пину и дальномер следовательно открывает его и закрывает...
SDA ? SCL ? RST ? VCC ? какой из, и какие есть...
К 13 пину подключен VCC(он же 5в). А есть SDA. SCL. VCC. GND.
Можно тупо очищать дисплей и не выводить на него ничего, пока с дальномера сигнала нет.
Для текстовых дисплеев можно подсветку отключать, например.
А при вырубании дисплея его надо заново инициализировать.
К 13 пину подключен VCC(он же 5в). А есть SDA. SCL. VCC. GND.
эвано оно как.... я сним не работал, но:
1)там нога 13 еще не загнулась от тока (я не знаю его потребления)
2) ему точно не нужна инициализация после подачи питания которая прописана в сетапе? стр 24
Светодиод от 13 пина мигает (тестовый скетч) значит пи нормальный. Еще один интересный факт: питание с ардуино идет в бредборд. С бред борда питается дисплей, а дальномер питается с ардуины напрямую. Так вот когда отсоединяю VCC дисплея от бредборда то данные с дальномера перестают выводится в Serial... как это может быть связано???
Новый код с инициализацией
> К 13 пину подключен VCC(он же 5в)
> питание с ардуино идет в бредборд.
Кинуть провод от 5V ардуины и питать всё с доски никак?
Нахрена каждый раз задавать шрифт и цвет?
Для вывода времени почитай про printf/sprintf
Моё сообщение про флаг ты мимо ушей/глаз пропустил.
зачем дальномер ? PIR датчик присутствия специально для этой цели разработан и по цене столько же если не дешевле.
> К 13 пину подключен VCC(он же 5в)
> питание с ардуино идет в бредборд.
Кинуть провод от 5V ардуины и питать всё с доски никак?
Нахрена каждый раз задавать шрифт и цвет?
Для вывода времени почитай про printf/sprintf
Моё сообщение про флаг ты мимо ушей/глаз пропустил.
Спасибо большое получилось.
Я так и делал что питал всю доску от ардуины. Просто для эксперимента попробовал по другому. Вообщем цель достигнута. Дисплей выключается и включается. Спасибо. Про prinf обязательно почитаю.
Вот обновленный код может кому интересно или есть замечания. ()