Salve a tutti,
stò realizzando un progetto dove utilizzo un display OLED SSD1306, funziona tutto alla perfezione, l'unica cosa che non va è che quando spengo Arduino Mega e lo riaccendo il display non si accende, devo resettare Arduino per farlo funzionare.
La libreria che utilizzo è la u8g2.
Vi è mai capitato?
Avete qualche idea?
Grazie in anticipo.
boh?... può essere che abbia un tempo di accensione lungo e quindi non faccia in tempo a ricevere l'inizializzazione da arduino.... prova a mettere un delay di 1 secondo come prima istruzione del setup... e vedi se funziona
O magari posti il codice e vediamo cosa fa, visto che la palla di vetro è rotta ?
#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0);
#define Led 3
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 11
#define PresenzaPezzo 9
#define Allarme 10
#define Reset 53
double frequenza1 = 0;
double frequenza2 = 0;
double frequenza3 = 0;
double frequenza4 = 0;
int Valore = 715; //Valore da impostare per la Frequenza corrispondente alla basetta non colorata
int Tolleranza = 20; //Tolleranza +/- Valore
int Tempo = 5; //Frequenza di scansione
bool Pulsante; //Variabile per autoritenuta Pulsante
bool Sirena; //Variabile per autoritenuta Sirena
int Errore; //Numero massimo di errori prima di far scattare l'allarme
char Buffer[5];
void setup() {
u8g2.begin();
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(Led, OUTPUT);
pinMode(Allarme, OUTPUT);
pinMode(sensorOut, INPUT);
pinMode(PresenzaPezzo, INPUT);
pinMode(Reset, INPUT_PULLUP);
// Setta la Frequenza al 100%
digitalWrite(S0, LOW);
digitalWrite(S1, HIGH);
digitalWrite(Led, LOW);
digitalWrite(PresenzaPezzo, LOW);
digitalWrite(Allarme, HIGH);
Serial.begin(9600);
}
void loop() {
delay(Tempo);
Pulsante = digitalRead(Reset);
digitalWrite(S2, HIGH);
digitalWrite(S3, HIGH);
dtostrf(frequenza,2,0, Buffer);
u8g2.clearBuffer(); // Pulisce la memori
u8g2.setFont(u8g2_font_logisoso28_tr); // Sceglie il Font
u8g2.drawStr(8,29,Buffer); // scrive sulla memoria
u8g2.sendBuffer(); // trasferisce il contenuto della memoria a video
if ((Sirena == 1) and (Pulsante == 0)) {
digitalWrite(Allarme, HIGH);
Sirena = 0;
}
if (digitalRead(PresenzaPezzo) == LOW) {
digitalWrite(Led, HIGH);
frequenza = pulseIn(sensorOut, LOW);
if ((frequenza > Valore - Tolleranza) and (frequenza < Valore + Tolleranza)){
Errore=Errore+1;
if (Errore>4) {
digitalWrite(Allarme, LOW);
Sirena = 1;}
}
}
else {
digitalWrite(Led, LOW);
frequenza=0;
Errore=0;
}
}
>MrNicoIosolo: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code]
così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.
Guglielmo
Prova a spostare la begin del lcd come ultima cosa nel setup
Scusate l'assenza della risposta ma ho avuto problemi a non finire.
Dunque si ho spostato il begin a fine setup, ma il risultato non cambia....approposito, se alimento arduino da usb si accende subito, il problema sorge solo con alimentazione 12V esterna.
12V esterni non dicono nulla. Da una USB arrivano 5V ma o 0,5A oppure 1A ( di solito 0,5A)
Se usi alim.esterna da 12V da eroga ad esempio solo 0,2A la corrente non è sufficiente
No, addirittura è da 5A.
Ho fatto altre prove , è proprio l'alimentazione esterna che crea problemi, ho provato a caricare lo sketch base "Hello World", con alimentazione esterna non si accende il display se non resetto con il pulsantino, con USB va benissimo.
Non vorrei che fosse un problema di Arduino Mega, non è l'originale.
Uno schema esatto dei collegamenti ?
Guglielmo