Eccomi qua, primo approccio con il Forum.
Un saluto a tutti e un gran piacere di essere con voi.
Piccolo problema, il Software funziona, secondo me, a dovere, però vorrei ridurre la memoria occupata ho cercato di fare qualcosa ma fino a qui arrivo, così come sta è 79% e 48% usando Arduino Uno R3.
Voglio sottoporre al vostro giudizio la stesura che ho fatto, vorrei critiche e esaltazione di errori che io ,ovviamente, non vedo quale principiante, se qualche anima buona decide di revisionare o darmi qualche suggerimento, ringrazio in anticipo.
![]()
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato.
Grazie.
Mi spiace,ma non ho visto che ero nella parte inglese.
scusate.
Il programma mettilo qui in chiaro
Tra i flag code
Che ci do uno sguardo
Per principio non scarico file
Non lo hai correttamente racchiuso tra i tag previsti per il codice.
Seleziona tutto il listato e premi CTRL + e oppure usa il tasto <code> previsto per lo scopo.
Per quanto riguarda il codice mi sembra ben scritto, anche se l'uso diretto delle porte secondo me non aggiunge molto considerato lo scopo del firmware, ma in compenso rende il codice meno "portatile" tra diverse piattaforme e meno leggibile più in generale.
Per quanto riguarda la memoria occupata, non mi sembra che ci siano problemi, soprattutto in considerazione del fatto che stai usando ben 2 display che notoriamente hanno bisogno di molta SRAM.
Visto che li stai usando solo per scrivere del testo potresti valutare l'uso di una libreria "solo testo" come U8x8 contenuta all'interno della libreria che hai già installato oppure questa SSD1306Ascii.
Grazie per la risposta, vedrò di fare la modifica suggerita
In realtà, ci sono un po' di cose da rivedere...
Come detto, in questo caso è inutile manipolare le porte direttamente: confonde solo le idee; poi:
Una stringa in una int?... Molto più semplicemente, si può scrivere:
uint8_t secondario=0;
e poi con un if/else visualizzare "0/12V" o "12/24V" a seconda che secondario valga 0 o 1 (oppure 0 o 12, se preferisci).
Inoltre, le maschere degli OLED possono essere scritte solo una volta, cancellando poi con un rettangolo nero dove serve prima di riscrivere.
I tipi di variabile sono messi un po' a caso, usando int e addirittura float per definire i pin.
E' inutile sprecare due float per i valori delle resistenze, che possono essere tranquillamente interi (sono diverse migliaia) e possono essere usati dei #define.
In generale, è meglio evitare i float, che sono a 32bit e più pesanti da elaborare, se basta un decimale: è sufficiente fare i calcoli con valori decuplicati e poi visualizzare 1/10 del valore, ma addirittura molte variabili aggiuntive possono essere evitate facendo un calcolo unico. Per esempio:
VoltsADC = Volts / 5;
vout = (VoltsADC * V) / 1023;
vIn = vout / (R2 / (R1 + R2));
diventa:
vIn = Volts/5.0*V/1023/R2*(R1+R2);
Condivido tutto
Inoltre in almeno un punto sono fatte 6 misure
Diviso 5
Inoltre, per come è scritto, secondario e ventola devono essere String e poi:
oled2.drawStr(65, 23, secondario.c_str());
oled2.drawStr(65, 34, ventola.c_str());
Però, come ho già scritto, è inutile usare delle String per scrivere un testo o l'altro. Usa l'if.
Fatto delle prove ma se scrivo ```
oled2.drawStr(65, 23, secondario.c_str());
oled2.drawStr(65, 34, ventola.c_str());
mi da errore
Non ho capito nulla
Scusami, ma in che senso non si capisce
Nel senso che "prima che tu correggessi" era incomprensibile
Adesso mi sono spiegato?
Si, ma mi da errore devo lasciare come è scritto ,cioè
oled2.drawStr(65, 23, (secondario));
oled2.drawStr(65, 34, (ventola));
Certo che ti da errore
Hai una gran confusione tra i tipi dati
Quelle variabili sono intere
Gli assegni una string literal e hai tentato di usarle come se fossero string di C++
Non so o forse non capisco io, ma se mi da errore vuol dire che è sbagliato, provabilmente le librerie che ho usato non prevedono questo tipo di scittura che mi avete suggerito, nello specifico appena esposto.
No
Sei tu che non hai ancora capito il significato di "tipo dati"
E ti conviene studiarle per bene, altrimenti in futuro avrai molte delusioni
Ok,farò una revisione del tutto, vi ringrazio dei suggerimenti, rimane il fatto che mi da errore, va bhe!.
Dove ti da errore?
Se non lo dici noi non possiamo saperlo
mi da errore questo
oled2.drawStr(65, 23, secondario.c_str());
oled2.drawStr(65, 34, ventola.c_str());
quello che mi è stato suggerito, ma va bene non è un problema, rigrazio comunque
poi vedrò di revisionare il tutto.
Non sono una cima in questo campo,riguardo Arduino, ci provo è ovvio che studio e faccio prove.Grazie.
Qualche altro suggerimento è ben venuto