Всем привет. Недавно начал работать с ардуино, всех тонкостей конечно не знаю. На форуме по поиску ничего не нашел, может быть потому что моя проблема и не проблема вовсе) Итак у меня есть: 1. Arduino UNO R3 (Китай BETEMCU)) 2. Шилд Data logging shield V1.0 (кардридер и часы на DS1307) 3. OLED дисплей 0,96 дюйма работающий по протоколу I2C Мое устройство должно при определенном событии записывать его на карту памяти с регистрацией времени и одновременно с этим выводить некоторую информацию на экран. Написав код я удачно его скомпилировал, однако после того, как залил его в чип - ничего не произошло. После долгих попыток разобраться в чем дело я выяснил следующее: 1. Дисплей, работающий через библиотеку OLED_I2C.h и подключенный к пинам А0, А1, ладит с часами (DS1307.h, пины А4, А5). Данные о времени выводятся на дисплей без нареканий, Serial порт тоже в этот момент работает и передает данные 2. Часы ладят с SD картой (SD.h, пин 10). Записывать данные на карту я не пробовал, но думаю это получится без проблем - карта инициализируется, основной код выполняется, Serial порт работает 3. При подключении всех библиотек разом дисплей уходит в осадок, отображая рэндомные пиксели (или вовсе не отображая их). Иногда выводит часть данных. Часы при этом не отвечают вовсе. Сериал порт либо молчит, либо выводит рэндомные данные. 4. Если в коде удалить все, что касается дисплея, кроме строчки # include <OLED_I2C.h>, то все работает прекрасно (естественно за исключением самого дисплея). Как только я добавляю следующую строку инициализации OLED myOLED(A1, A0, 8); - все перестает работать. Я пробовал отключать дисплей физически и менять пины - не помогло. Так же я пробовал менять очередной подключения библиотек - бестолку. Дисплей никак не хочет дружить с SD картой. Вот скетч #include <DS1307.h> DS1307 rtc(A4, A5); //Подключение библиотеки часов #include <SD.h> Sd2Card card; const int chipSelect = 10; // Подключение библиотеки SD карты #include <OLED_I2C.h> // Подключение библиотеки дисплея //OLED myOLED(A1, A0, 8); // Если убрать комментарий с этой строки - все перестает работать String time; //Переменная для хранения текущего времени void setup() { Serial.begin(9600); rtc.halt(false); pinMode(10, OUTPUT); if (!card.init(SPI_HALF_SPEED, chipSelect)) { time = rtc.getTimeStr(); Serial.print(time+" - "); Serial.println("Card bad"); return; } else { time = rtc.getTimeStr(); Serial.print(time+" - "); Serial.println("Card ok"); } } void loop() {}
Сейчас запустил этот код на "голой" ардуине. В результате я получил на мониторе порта: 00:00:85 - Card bad При нажатии Reset на монитор приходит тоже самое Удалил комментарий со строки - на мониторе тишина. Резет - все равно тишина. Думаю это конфликт именно программный
Пересадил часы на пины А4, А5 ( подправил строку OLED myOLED(SDA, SCL, 8), отключил библиотеку часов, добавил в код вывод информации на дисплей - работает. Подключаю библиотеку часов - работает. Запрашиваю время - зависает
Сейчас попытался вывести время на дисплей (и часы и экран на одних пинах), при отключенной библиотеке SD карты - выдало время 27:85:85. На сериал порте то же самое. Подключаю SD - в сериал порте кошмар из набора символов. Отключаю и SD и дисплей - на порте все впорядке