Buona sera, ho comprato un display oled SSD1327 128x128 e tralasciando il fatto che con la libreria adafruit ssd1327 non riesco a farlo funzionare (ci sono riuscito con la U8g2lib) il display risulta poco luminoso e i caratteri si vedono a malapena.. vi è mai capitato ?? sapete darmi una spiegazione?
Più info per favore.
Posta il link al prodotto che hai comprato. Poi, come lo alimenti ? A cosa lo hai collegato ?
Ho provato con arduino uno rev 3 e rev 4 wifi,
pinnatura: gnd,+5v, sda A4 scl A5 (cambiato alimentazione con quella 3 volt nn si accende)
impostando il contrasto con l'istanza u8g2.setContrast() si va da un minimo che poco più che le font si vedono a un massimo anche questo basso.
Dal sito dove hai comprato non dicono se è progettato per i 5V o per i 3.3V ? Perché se è solo a 3.3V collegandolo a 5V dopo un pò si può danneggiare.
Non sono un elettronico (sono programmatore) ma forse il problema è la poca corrente che Arduino eroga attraverso i suoi 5V (sul 3.3V da ancora meno corrente perciò facile non si accenda neppure). Occhio che parlo di corrente e non di tensione (volt). Arduino in generale è pensato per fare da controllore di circuiti e non per erogare ed alimentare dispositivi che consuma molta corrente.
La nuova Arduino rev 4 in teoria leggo che dovrebbe erogare più corrente della rev.3
Da quale pin della 4 prendi i 5V per il display ? Come è alimentato Arduino ? Dalla usb del pc ?
l'alimentazione del display la prendo dalla classica 5v vicino a i due pin gnd e si, l'alimentazione del arduino la prendo dal pc...
Io proverei con la rev 4 ma scollegata dalla usb ed alimentata con 12V sul jack nero ma con alimentatore da almeno 1A.
Altrimenti proverei ad alimentare separatamente il display da alimentatore a 5V (stabili!!) da almeno 1A. Mettendo anche la gnd in comune. Se dico cacate, gli elettronici che leggono mi correggano. ^-^
P.S. in precedente thread parlavano/parlavi di modifiche fisiche a questo display. Lo hai modificato ??
Proverò! tanto ho un alimentatore da 12 v 5 A a due canali, posso usarne uno per arduino e uno per il display ( quello del display ci metto un integrato stabilizzatore a 5V )
No purtroppo nn l ho fatta la modifica perchè ho la stazione saldante fuori uso e il display costa 10 euro mi dispiacerebbe rovinarlo
Ma no!... Quanto vuoi che consumi???...
Hai già fatto esperienza con il 1306?
Ciao! si quello è il mio preferito e non ho alcun problema, c'ho realizzato una piccola stazione metereologica con tanto di bitmap nuvoloso o sereno.. invece con quest'altro nnt , ho appena provato i consigli del ragazzo ma ho sempre lo stesso problema
ciao! forse mi sai aiutare tu su un altra questione...... cambiamo il display e prendiamo un st7789.
voglio leggere data e ora da un real timer ds3231.. ma purtroppo il display non mi si aggiorna nel senso che mi sovrascrive i numeri.! per esempio i secondi mi scrive 1poi scrive due senza però cancella l'1 poi scrive il 3 senza cancellare 1 e 2 e così via... con la libreria adafruit st7789 c'è un istanza per aggiornare il display?? se c'è non riesco ad individuarla !
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define TFT_MOSI 11 // Data out
#define TFT_SCLK 13 // Clock out
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
#include <Wire.h>
#include <RTClib.h>
RTC_DS3231 rtc;
void setup(void) {
tft.init(240, 320);
tft.fillScreen(ST77XX_BLACK);
tft.setRotation(3);
if(!rtc. begin()){
tft.setTextColor(ST77XX_RED);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.print("Check Wiring DS3231!");
while(true);
}
if(rtc.lostPower()){
rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));
}
}
void loop() {
DateTime now = rtc.now();
tft.drawRect(5, 5, 310, 230, ST77XX_WHITE);
tft.drawLine(5, 30, 314, 30, ST77XX_WHITE);
tft.setTextColor(ST77XX_ORANGE);
tft.setTextSize(2);
tft.setCursor(10,11);
tft.println("DATA:");
tft.setCursor(69,11);
tft.println(now.year(), DEC);
tft.setCursor(117,11);
tft.println("/");
tft.setCursor(130,11);
tft.println(pad(now.month()));
tft.setCursor(155,11);
tft.println("/");
tft.setCursor(168,11);
tft.println(pad(now.day()));
tft.drawLine(5, 60, 314, 60, ST77XX_WHITE);
tft.setCursor(10,37);
tft.println("ORA");
tft.setCursor(59,37);
tft.println(pad(now.hour()));
tft.setCursor(80,37);
tft.println(":");
tft.setCursor(89,37);
tft.println(pad(now.minute()));
tft.setCursor(110,37);
tft.println(":");
tft.setCursor(119,37);
tft.println(pad(now.second()));
}
//memory allocation per padding
char *res = malloc(5);
String pad(int n){
sprintf(res, "%02d", n);
return String(res);
}
Se non devi visualizzare pagine diverse, il sistema più pulito è visualizzare una sola volta nel setup ciò che è fisso e poi aggiornare solo ciò che varia:
void setup() {
tft.drawRect(5, 5, 310, 230, ST77XX_WHITE);
tft.drawLine(5, 30, 314, 30, ST77XX_WHITE);
tft.setTextColor(ST77XX_ORANGE);
tft.setTextSize(2);
tft.setCursor(10,11); tft.println("DATA:");
tft.setCursor(117,11); tft.println('/');
tft.setCursor(155,11); tft.println('/');
tft.drawLine(5, 60, 314, 60, ST77XX_WHITE);
tft.setCursor(10,37); tft.println("ORA");
tft.setCursor(80,37); tft.println(':');
tft.setCursor(110,37); tft.println(':');
}
void loop() {
DateTime now = rtc.now();
tft.setTextColor(ST77XX_ORANGE);
tft.setCursor(69,11); tft.println(now.year(), DEC);
tft.setCursor(130,11); tft.println(pad(now.month()));
tft.setCursor(168,11); tft.println(pad(now.day()));
tft.drawLine(5, 60, 314, 60, ST77XX_WHITE);
tft.setCursor(59,37); tft.println(pad(now.hour()));
tft.setCursor(89,37); tft.println(pad(now.minute()));
tft.setCursor(119,37); tft.println(pad(now.second()));
}
Nota che per i caratteri singoli ho usato ':' anziché ":" altrimenti diventano stringhe con il terminatore e occupano un byte in più!
Per quanto riguarda le scritte sovraimpresse, non è come in un LCD 1602 o simile in cui un carattere sostituisce un altro! Qui devi cancellare i caratteri precedenti. Hai 3 strade, a partire dalla più brutale che provoca intermittenza di tutto fino alla più veloce:
- Cancelli tutto il display e riscrivi tutto...
- Prima di scrivere nuovamente, scrivi un rettangolo pieno nero in corrispondenza dei caratteri che devi aggiornare;
- Salvi di volta in volta la scritta precedente e poi, prima di scrivere nuovamente, la scrivi in nero.
grazie per le info ! adesso ho abbastanza chiara l'idea di come funzioni questo tipo display, quindi i caratteri non vengono sostituiti e per forza si deve cancellare "quello che c'era prima".
Purtroppo non ho ancora le capacità per trovare la soluzione e gli esempi mi sembrano molto tosti da capire!
ho provato ha disegnare un rettangolo nero sopra l'ora per fare una prova .. ora i dati non si sovrascrivono ma ovviamente l'effetto che provoca è un lampeggiamento continuo alla f di aggiornamento del display!
tft.fillRoundRect(59, 37, 100, 14, 1, ST77XX_BLACK);
Vai al punto 3!
e lo so ! ma esiste qualche istanza della lib adafruit che salva la scrittura precedente??
sono fastidioso lo so
ho provato a riscrivere in nero tutto quello che può cambiare col passar del tempo ma l'effetto è simile al disegnarci un quadrato pieno !
Ritorna al punto 3!
Ho capito che lei vuole che ci arrivi da solo ma non ho ben chiaro se il salvare la scrittura di volta in volta si può fare con una funzione della libreria in uso oppure no
Funzione?... No!
Nel loop() puoi vedere come ho fatto io: