Приветствую, решил запилить датчик температуры в серверную и столкнулся с проблемой: при загрузке скетча в ардуино температура и влажность выводятся на дисплей, сетевуха не работает, убираю строки Код (C++): Adafruit_SSD1306 display(OLED_RESET); и Код (C++): display.begin(SSD1306_SWITCHCAPVCC, 0x3C); и сеть начинает работать, но соответственно не работает вывод информации на дисплей. Прошу помощи в данном вопросе. Спойлер: Код Код (C++): #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #include <EtherCard.h> static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; static byte myip[] = { 192,168,0,12 }; byte Ethernet::buffer[600]; BufferFiller bfill; int t=0; int h=0; void setup () { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) Serial.println( "Failed to access Ethernet controller"); ether.staticSetup(myip); dht.begin(); } static void ReadDHT11() { h = dht.readHumidity(); t = dht.readTemperature(); } // Web страница static word homePage() { bfill = ether.tcpOffset(); bfill.emit_p(PSTR( "HTTP/1.0 200 OK\r\n" "Content-Type: text/html; charset=utf-8\r\n" "Pragma: no-cache\r\n" "\r\n" "<meta http-equiv='refresh' content='10'/>" "<title>Серверная</title>" "<font size='3em'>Температура: $D C <br /><br />Влажность: $D %</font>"), t, h); return bfill.position(); } void loop () { int h = dht.readHumidity(); int t = dht.readTemperature(); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); display.println("Temp: "); display.println(t); display.println("Hum: "); display.println(h); display.display(); word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) // check if valid tcp data is received { ReadDHT11(); ether.httpServerReply(homePage()); } delay(1); }
Я так понял сеть и дисплей у Вас на SPI шине? тогда пины все таки должны пересекаться. И тогда вероятно дисплей не отпускает SPI.
Здесь Вы не указываете CS пин то есть подразумевается, что на SPI шине только дисплей Попробуйте вызов Код (C++): Adafruit_SSD1306(int8_t DC, int8_t RST, int8_t CS);
А вы проверте выходы SPI после активации дисплея. Возможно библиотека их случайно дергает. Или обновите библиотеку.
Библиотека последней версии. Убрал библиотеку #include <SPI.h> и дисплей заработал совместно с сетевухой, однако проблема с датчиком DHT11 по прежнему актуальна - показывает 0.
Я думал она после такой экзекуции не скомпилится! По DHT11 на мой взгляд два варианта: либо неправильно подключили, либо он не рабочий.
При выпиливании из кода строчек инициализации дисплея/сетевухи датчик работает и температуру показывает.
А можно уточнить после выпиливания дисплея или сетевухи? Попробуй другой пин, D7 например. Или D2 это как-то принципиально? Плата какая? nano?