Buonasera a tutto il forum
Per un progettino di un timer ON/OFF sto tentando di sostituire un lcd 16X2 I2C con un oled SH1106 128X64 a 1,3", con uno sketch di prova e i driver appropriati funziona perfettamente e visualizza l'ora, ma con il mio sketch si rifiuta di funzionare e con schermo nero, in fase di compilazione non ci sono errori ma non funziona, le ho provate tutte....mi dareste una dritta?
grazie a tutti
marelli_timer_1_ch_oledprova.ino (12.5 KB)
I driver non esistono come concetto su Arduino. C'e' uno sketch ed eventualmente una libreria che sa come colloquiare con quel dispositivo.
Quello che posti usi la libreria di Adafruit, mentre lo sketch di prova funzionante qual'è ?
Posta anche quello.
Si giusto libreria, ho usato praticamente le stesse librerie, posto qui il codice
#include <EEPROM.h>
#include <RTClib.h>
#include <Wire.h>
#include <Adafruit_SH1106.h>
#include <Adafruit_GFX.h>
RTC_DS3231 RTC;
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);
void setup() {
Wire.begin();
delay(3000);
display.begin(SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
DateTime now = RTC.now();
now = RTC.now();
display.invertDisplay(true);
delay(1000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(18,2);
display.print("MARELLI LIGHTING");
display.setTextSize(4);
display.setCursor(5,19);
if(now.hour() < 10)
{
display.print("0");
}
display.print(now.hour(), DEC);
display.print(":");
if(now.minute() < 10)
{
display.print("0");
}
display.print(now.minute(), DEC);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(22,55);
display.print("TIMER ML UVT20");
display.display();
}
Di primo acchito non vedo cose strane, la gestione lcd è uguale tra i due, ma il tuo codice è lungo.
Puoi usare la seriale USB ? Io ti consiglio di mettere un pò di Serial.println() nel codice (che poi toglierai) per vedere dove passi nel programma, se è attivo.
Poi ti consiglio di commentare molto del codice tra /* e */ ad esempio tutto il case 2 e 3
Cosi hai meno codice da analizzare.
Ok grazie del consiglio Nid69ita, ci provo subito
Ciao Nid mi stampa la seriale fino al punto 2 poi mi looppa sempre le prime due serial.print però non capisco ho riguardato quella porzione di codice, non vedo errori
void loop() {
current_up = debounce(last_up, up);
current_sel = debounce(last_sel, sel);
current_down = debounce(last_down, down);
DateTime now = RTC.now();
now = RTC.now();
Serial.println (1);
if(subpage1_counter==0 && subpage2_counter==0){
if (last_up== LOW && current_up == HIGH){
display.clearDisplay();
if(page_counter <3){
page_counter ++;
}
else{
page_counter= 1;
}
}
last_up = current_up;
if (last_down== LOW && current_down == HIGH){
display.clearDisplay();
if(page_counter >1){
page_counter --;
}
else{
page_counter= 3;
}
}
last_down = current_down;
}
Serial.println (2);
switch (page_counter){
case 1:
last_sel=current_sel;
Serial.println ("3");
display.clearDisplay();
display.invertDisplay(true);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print("MARELLI LIGHTING");
display.setTextSize(4);
display.setCursor(5,16);
if(now.hour() < 10)
{
display.print("0");
}
display.print(now.hour(), DEC);
display.print(":");
if(now.minute() < 10)
{
display.print("0");
}
display.print(now.minute(), DEC);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(22,55);
display.print("TIMER ML UVT20");
display.display();
Serial.println ("4");
//case 1
break;
Non vedi mai 03 ??
Se si, quindi non entra nel case 1, dove c'e' Serial.print ("02"); stampa anche il valore di page_counter
Pare si fermi prima del switch- case1, non stampa il valore del page counter.......che grattacapo però lo stesso codice ma con i comandi e la libreria per l'lcd 16X2 funziona regolarmente.
ora ho provato a posizionare la stampa del contatore delle pagine subito dopo lo 02 e mi stampa un valore strambo 1365
Buongiorno, ho risolto l'arcano grazie al consiglio di Nid69ita, sfruttando i serialprint ho capito che il problema era ner reset del display che nel #define era dichiarato sul 4, spostando il suo valore ora tutto funziona.
grazie ancora