Könnte es trotzdem mit der richtigen library funktionieren?Scanning...
No I2C devices found
das ist genau das Thema, das ich mit meinem obigen Post bereits angeschnitten hatte:...bekomme es auf dem Sunfounder UNO R3 zum laufen...Auf dem WeMos D1 sowie dem NodeMCU (beide mit Wifi) kommt nur Kauderwelsch aufs Display. Gibt es dafür eine einfache Erklärung?
wenn dein Display einen i2c-Chip hat, dann lass ggf mal als erstes einen i2c-Adress-Scanner damit laufen, ob es überhaupt per Wire() korrekt als Gerät mit seiner Adresse erkannt wird.
ps,
ich habe ähnliche Erfahrungen gemacht mit meinen i2c-OLED-Displays, auch da funktionierten keine normaler Arduino-Treiber (ebenso beim 1-Wire Sensor DHT22) , und es halfen erst andere Libs, die speziell angepasst waren für esp8266.
- Aber teste erst mal mit dem i2c-Scanner (falls es ein I2C Gerät ist)!
Geändert von HaWe (13.12.2017 um 13:10 Uhr)
Könnte es trotzdem mit der richtigen library funktionieren?Scanning...
No I2C devices found
ist denn ein I2C chip drauf?
ggf. welcher?
welche Lib verwendest du?
Sorry, ich habe keine Ahnung von der Hardware
Hier mal der Code, läuft ohne library:
int rck = 5;
int sck = 6;
int dio = 7;
byte num[11]={B11000000, B11111001, B10100100, B10110000,
B10011001, B10010010, B10000010, B11111000, B10000000, B10011000, B01000000};
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0.
byte pos[8]={1, 2, 4, 8, 16, 32, 64, 128};
void setup() {
pinMode(rck, OUTPUT);
pinMode(sck, OUTPUT);
pinMode(dio, OUTPUT);
}
int geo[] = {99, 99, 99, 99, 10, 1, 2, 3};
// 99 = " ";
// 10 = 0.
// Ausgabe: " 0.123"
void loop() {
for (int j = 0; j < 8; j++) {
digitalWrite(rck, LOW);
shiftOut(dio, sck, MSBFIRST, pos[j]);
shiftOut(dio, sck, MSBFIRST, num[geo[j]]);
digitalWrite(rck, HIGH);
delay(2); // This keeps the flicker above 60 Hz
}
}
sieht nach Schieberegister aus, damit kenne ich mich aber nicht aus.
Eventuell setze mal ein delay(1) hinter jedes digitalWrite und jedes shiftOut.
Andererseits verwendest du die GPIO-Nummern, nicht die D-Nummern: bist du sicher, dass du richtig verkabelt hast?
http://www.mikrocontroller-elektroni...inbelegung.png
Hast du den richtigen Arduino-Board-Treiber installiert und ausgewählt (nodeMCU 1.0) ?
Andererseits verwendest du die GPIO-Nummern, nicht die D-Nummern: bist du sicher, dass du richtig verkabelt hast?
http://www.mikrocontroller-elektroni...inbelegung.png
Danke!
haha, gern!
Jetzt muss ich mich doch noch einmal melden.. Ich hänge jetzt seit Stunden an dem gleichen Problem.
Alles läuft soweit wunderbar. Ich frage per GET eine Datenbank ab und gebe die Zahl auf dem Display aus. Das Problem ist, dass die Verbindung zum Server das System blockiert und das Display in der Zeit ausgesetzt ist. Es geschieht an dieser Stelle:
Gibt es eine Möglichkeit, dass ich während des Verbindungsaufbaus trotzdem meinen loop() durchlaufe? Ist es z.B. möglich, die Verbindung im Hintergrund aufzubauen, sodass laufende loops() nicht betroffen sind?Code:if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin("URL_ZUR_DB"); int httpCode = http.GET();
Oder alternativ (wobei ich hier keine wirkliche Chance sehe): Ist es möglich, das Display zu "freezen" und einfach die letzte Zahl stehen zu lassen solange die Verbindung aufgebaut wird? Nach meinem Verständnis kann immer nur ein Segment "stehen bleiben", niemals alle 8 Segmente. Deshalb ja die Endlosschleife...
ich kenne mich jetzt mit der HTTP library nicht genug aus, aber grundsätzlich ist paralleles arbeiten auf einem microcontroller ein riesen problem, die haben zwar interrupts die es erlauben die normale code ausführung zu unterbrechen um etwas anderes zu machen aber arduino bietet keine möglichkeit aufgaben gleichzeitig abzuarbeiten
ich hab mal spontan auf github ne lib gerfunden die das ermöglichen soll aber geteset habe ich jetzt nichts
https://github.com/ivanseidel/ArduinoThread
vielleicht kannst du damit was erreichen, ansonsten wäre der nächst beste ansatz für dich einen timer zu benutzen der immer die segmente umschaltet statt einer loop ... in der loop arbietet jetzt nurnoch die webabfrage und wann immer der timer tickt, wird der code kurz unterbrochen um die nächste ziffer umzuschalten
Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
nicht.
Timer bzw. Ticker kannte ich noch gar nicht. Klappt jetzt, danke!
Lesezeichen