| Claudio
| Inviato il: 27/06/2017 19:26:47
|
Mi da errore sulla linea 103 lcd.write(0); ma bloccandola va perfetto, è per caso anche lei inerente al display I2C??
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | BellaEli
| Inviato il: 27/06/2017 21:33:23
|
Altre piccole modifiche e correzioni...
#include <LiquidCrystal.h> // Per display normale
#include <LiquidCrystal_I2C.h> // Per display I2C
#include <EEPROM.h> // Per memorizzare le soglie nella EPROM di Arduino
#define on 6 // Led Verde o Relay NA
#define off 7 // Led Rosso o Relay NC
#define tempP 9 // Pulsante Temperatura "+"
#define tempM 8 // Pulsante Temperatura "-"
#define isterP 10 // Pulsante Isterisi "+"
#define isterM 13 // Pulsante Isterisi "-"
#define LM35 A1 // Piedino centrale sensore temp. LM35
int i; // variabile per cicli for
int nread = 10; // Numero di letture effettuate dall'ADC
int power; // Variabile per lampeggio puntino di running del termostato
int rele = 0; // Variabile di stato dei relè: 0 = OFF, 1 = ON
int byte0, byte1; // Variabili usate per scrivere/leggere nella Eprom
float vref = 1.1; // ADC 1,1V
int isteresi; // Isteresi del termostato: lavoro con int (moltiplicati per 10) per evitare errori di arrotondamenti sui float
int tempSoglia; // Temperatura di Soglia: lavoro con int (moltiplicati per 10) per evitare errori di arrotondamenti sui float
float tempLetta;
unsigned long T_Ultima_Lettura, T_Attuale; // Variabili per le pause senza blocco dei processi
byte newChar[8] = { B00100, B00100, B11111, B00100, // Carattere personalizzato ±
B00100, B00000, B11111, B00000 };
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD LiquidCrystal D2=D7 - D3=D6 - D4=D5 - D5=D4 - D11=E - D12=RS - VDD=+5 - VO=centrale potenziometro - A=+3V K, VSS, RW=massa
LiquidCrystal_I2C lcd(0x27, 16, 4); // Per display I2C
void setup()
{
pinMode(on, OUTPUT); // Inizializzo i Pin
pinMode(off, OUTPUT);
pinMode(tempP, INPUT_PULLUP);
pinMode(tempM, INPUT_PULLUP);
pinMode(isterP, INPUT_PULLUP);
pinMode(isterM, INPUT_PULLUP);
analogReference(INTERNAL); // Setto il riferimento per l'ADC al valore interno di 1,1V
tempLetta = (100.0 * vref * (float)analogRead(LM35)) / 1024.0; // Leggo la Temperatura
// Leggo la Temperatura Impostata nella Eprom
byte0 = EEPROM.read(0);
byte1 = EEPROM.read(1);
tempSoglia = (byte1<<8) | byte0; // Somma logica del valore di Byte1 spostato a sinistra di 8 bit e di Byte0
if (tempSoglia < 100 || tempSoglia > 900) tempSoglia = 250;
// Leggo l'Isteresi Impostata nella Eprom (Ho lasciato 2 Byte nel caso si volesse settare un'steresi maggiore di 25,5 °C)
byte0 = EEPROM.read(2);
byte1 = EEPROM.read(3);
isteresi = (byte1<<8) | byte0; // Somma logica del valore di Byte1 spostato a sinistra di 8 bit e di Byte0
if (isteresi < 1 || isteresi > 250) isteresi = 3;
// Per display LCD 20 Colonne, 4 Righe, I2C
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.createChar(0, newChar);
// Per display LCD 20 Colonne, 4 Righe, normale
// lcd.begin(20, 4);
// Schermata di avvio del termostato
lcd.setCursor(0, 0);
lcd.print("Termostato");
lcd.setCursor(2, 1);
lcd.print("Digitale");
lcd.setCursor(4, 2);
lcd.print("Differenziale");
lcd.setCursor(6, 3);
lcd.print("Start");
delay(500);
for (i = 0; i < 8; i++)
{
lcd.print(".");
delay(200);
}
// Setto le scritte statiche
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T. Letta: ");
lcd.print(tempLetta, 1);
lcd.setCursor(18,0);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Rele':");
lcd.setCursor(0,2);
lcd.print("T. Impost.: ");
lcd.print((float)tempSoglia/10, 1);
lcd.setCursor(18,2);
lcd.print((char)223);
lcd.print('C');
lcd.setCursor(0,3);
lcd.print("Isteresi ");
lcd.write(0);
lcd.print(": ");
lcd.print((float)isteresi/10, 1);
lcd.setCursor(18,3);
lcd.print((char)223);
lcd.print('C');
}
void loop()
{
float temp;
T_Attuale = millis();
if (T_Attuale - T_Ultima_Lettura > 500) // Attendo 1 secondo
{
readTemp(); // Leggo la temperatura
attivaRele(); // Setto i relè
LCD(0); // Aggiorno i valori sull'LCD
T_Ultima_Lettura = T_Attuale;
}
// Modifica Temperatura Centro Soglia da 10 a 90 °C
if(digitalRead(tempM) == LOW && tempSoglia > 100)
{
tempSoglia--;
LCD(1); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = tempSoglia & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (tempSoglia >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(0, byte0);
EEPROM.write(1, byte1);
delay(150);
}
if(digitalRead(tempP) == LOW && tempSoglia < 900)
{
tempSoglia++;
LCD(1); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = tempSoglia & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (tempSoglia >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(0, byte0);
EEPROM.write(1, byte1);
delay(150);
}
// Modifica Isteresi (da +/- 0,1 a +/- 25 °C)
if(digitalRead(isterM) == LOW && isteresi > 1)
{
isteresi--;
LCD(2); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = isteresi & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (isteresi >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(2, byte0);
EEPROM.write(3, byte1);
delay(150);
}
if(digitalRead(isterP) == LOW && isteresi < 250)
{
isteresi++;
LCD(2); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = isteresi & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (isteresi >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(2, byte0);
EEPROM.write(3, byte1);
delay(150);
}
}
void readTemp() // Leggo la temperatura facendo la media di 10 letture
{
float temp;
float somma = 0.0;
int i, val;
for (i = 0; i < nread; i++)
{
temp = (100.0 * vref * (float)analogRead(LM35)) / 1024.0;
somma += temp;
delay(10);
}
tempLetta = somma / (float)nread;
}
void LCD(int valore) // Scrivo i valori sull'LCD
{
switch (valore) {
case 1:
lcd.setCursor(13,2);
lcd.print((float)tempSoglia/10, 1);
break;
case 2:
lcd.setCursor(13,3);
if (isteresi < 100) lcd.print(" ");
lcd.print((float)isteresi/10, 1);
break;
case 3:
lcd.setCursor(7,1);
if (rele == 0) lcd.print("OFF");
else lcd.print("ON ");
break;
default:
lcd.setCursor(12,0);
if (tempLetta < 10.0) lcd.print(" ");
else if (tempLetta < 100.0) lcd.print(" ");
lcd.print(tempLetta, 1);
switch (power)
{
case 0:
lcd.setCursor(13,1);
lcd.print("- -----");
power = 1;
break;
case 1:
lcd.setCursor(14,1);
lcd.print("- ");
power = 2;
break;
case 2:
lcd.setCursor(15,1);
lcd.print("- ");
power = 3;
break;
case 3:
lcd.setCursor(16,1);
lcd.print("- ");
power = 4;
break;
case 4:
lcd.setCursor(17,1);
lcd.print("- ");
power = 5;
break;
case 5:
lcd.setCursor(17,1);
lcd.print(" -");
power = 6;
break;
case 6:
lcd.setCursor(16,1);
lcd.print(" -");
power = 7;
break;
case 7:
lcd.setCursor(15,1);
lcd.print(" -");
power = 8;
break;
case 8:
lcd.setCursor(14,1);
lcd.print(" -");
power = 1;
break;
}
break;
}
}
void attivaRele() // Imposto i relè
{
if(tempLetta < (float)tempSoglia/10 - (float)isteresi/10) // Soglia Inferiore -
{
digitalWrite(on, HIGH);
digitalWrite(off, LOW);
rele = 0;
LCD(3);
}
if(tempLetta > (float)tempSoglia/10 + (float)isteresi/10) // Soglia Superiore +
{
digitalWrite(on, LOW);
digitalWrite(off, HIGH);
rele = 1;
LCD(3);
}
}
la riga 103 ( lcd.write(0); ) è quella che scrive il carattere personalizzato (ovvero disegnato da me) "±" sul display, vicino l'isteresi.
Forse per il display normale va usata altra istruzione... verificherò !
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | BellaEli
| Inviato il: 28/06/2017 11:40:15
|
Giuro che ora non modifico più !!!
#include <LiquidCrystal.h> // Per display normale
#include <LiquidCrystal_I2C.h> // Per display I2C
#include <EEPROM.h> // Per memorizzare le soglie nella EPROM di Arduino
#define on 6 // Led Verde o Relay NA
#define off 7 // Led Rosso o Relay NC
#define tempP 9 // Pulsante Temperatura "+"
#define tempM 8 // Pulsante Temperatura "-"
#define isterP 10 // Pulsante Isterisi "+"
#define isterM 13 // Pulsante Isterisi "-"
#define LM35 A1 // Piedino centrale sensore temp. LM35
int i; // variabile per cicli for
int nread = 10; // Numero di letture effettuate dall'ADC
int Posizione = 12, Direzione = 0; // Variabili per lampeggio trattino di running del termostato
int rele = 0; // Variabile di stato dei relè: 0 = OFF, 1 = ON
int byte0, byte1; // Variabili usate per scrivere/leggere nella Eprom
float vref = 1.1; // ADC 1,1V
int isteresi; // Isteresi del termostato: lavoro con int (moltiplicati per 10) per evitare errori di arrotondamenti sui float
int tempSoglia; // Temperatura di Soglia: lavoro con int (moltiplicati per 10) per evitare errori di arrotondamenti sui float
float tempLetta;
unsigned long T_Ultima_Lettura, T_Attuale; // Variabili per le pause senza blocco dei processi
byte PiuMeno[8] = { B00100, B00100, B11111, B00100, // Carattere personalizzato ±
B00100, B00000, B11111, B00000 };
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // LCD LiquidCrystal D2=D7 - D3=D6 - D4=D5 - D5=D4 - D11=E - D12=RS - VDD=+5 - VO=centrale potenziometro - A=+3V K, VSS, RW=massa
LiquidCrystal_I2C lcd(0x27, 16, 4); // Per display I2C
void setup()
{
pinMode(on, OUTPUT); // Inizializzo i Pin
pinMode(off, OUTPUT);
pinMode(tempP, INPUT_PULLUP);
pinMode(tempM, INPUT_PULLUP);
pinMode(isterP, INPUT_PULLUP);
pinMode(isterM, INPUT_PULLUP);
analogReference(INTERNAL); // Setto il riferimento per l'ADC al valore interno di 1,1V
// Leggo la Temperatura Impostata nella Eprom
byte0 = EEPROM.read(0);
byte1 = EEPROM.read(1);
tempSoglia = (byte1<<8) | byte0; // Somma logica del valore di Byte1 spostato a sinistra di 8 bit e di Byte0
if (tempSoglia < 100 || tempSoglia > 900) tempSoglia = 250;
// Leggo l'Isteresi Impostata nella Eprom (Ho lasciato 2 Byte nel caso si volesse settare un'steresi maggiore di 25,5 °C)
byte0 = EEPROM.read(2);
byte1 = EEPROM.read(3);
isteresi = (byte1<<8) | byte0; // Somma logica del valore di Byte1 spostato a sinistra di 8 bit e di Byte0
if (isteresi < 1 || isteresi > 250) isteresi = 3;
// Per display LCD 20 Colonne, 4 Righe, I2C
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.createChar(0, PiuMeno);
// Per display LCD 20 Colonne, 4 Righe, normale
// lcd.begin(20, 4);
// Schermata di avvio del termostato
lcd.setCursor(0, 0);
lcd.print("Termostato");
lcd.setCursor(2, 1);
lcd.print("Digitale");
lcd.setCursor(4, 2);
lcd.print("Differenziale");
lcd.setCursor(6, 3);
lcd.print("Start");
delay(500);
for (i = 0; i < 8; i++)
{
lcd.print(".");
delay(200);
}
// Setto le scritte statiche
lcd.clear();
lcd.setCursor(0,0);
lcd.print("T. Letta:");
readTemp();
LCD(0);
lcd.setCursor(18,0);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("Rele': -------");
lcd.setCursor(0,2);
lcd.print("T. Impost.:");
LCD(1);
lcd.setCursor(18,2);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0,3);
lcd.print("Isteresi ");
lcd.write(byte(0));
lcd.print(":");
LCD(2);
lcd.setCursor(18,3);
lcd.print((char)223);
lcd.print("C");
}
void loop()
{
T_Attuale = millis();
if (T_Attuale - T_Ultima_Lettura > 500) // Attendo 0,5 secondi
{
readTemp(); // Leggo la temperatura
attivaRele(); // Setto i relè
LCD(0); // Aggiorno i valori sull'LCD
T_Ultima_Lettura = T_Attuale;
}
// Modifica Temperatura Centro Soglia da 10 a 90 °C
if(digitalRead(tempM) == LOW && tempSoglia > 100)
{
tempSoglia--;
LCD(1); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = tempSoglia & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (tempSoglia >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(0, byte0);
EEPROM.write(1, byte1);
delay(150);
}
if(digitalRead(tempP) == LOW && tempSoglia < 900)
{
tempSoglia++;
LCD(1); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = tempSoglia & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (tempSoglia >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(0, byte0);
EEPROM.write(1, byte1);
delay(150);
}
// Modifica Isteresi (da +/- 0,1 a +/- 25 °C)
if(digitalRead(isterM) == LOW && isteresi > 1)
{
isteresi--;
LCD(2); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = isteresi & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (isteresi >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(2, byte0);
EEPROM.write(3, byte1);
delay(150);
}
if(digitalRead(isterP) == LOW && isteresi < 250)
{
isteresi++;
LCD(2); // Scrivo sull'LCD
// Salvo il valore nella Eprom
byte0 = isteresi & 255; // Con un prodotto logico per 255 ottengo gli 8 bit meno significativi
byte1 = (isteresi >> 8) & 255; // Con uno spostamento a sinistra ed il prodotto logico ottengo gli 8 bit più significativi
EEPROM.write(2, byte0);
EEPROM.write(3, byte1);
delay(150);
}
}
void readTemp() // Leggo la temperatura facendo la media di 10 letture
{
float somma = 0.0;
for (i = 0; i < nread; i++)
{
somma += (100.0 * vref * (float)analogRead(LM35)) / 1024.0;
delay(10);
}
tempLetta = somma / (float)nread;
}
void LCD(int valore) // Scrivo i valori sull'LCD: 0 = Temperatura Letta + Animazione, 1 = Temperatura Impostata, 2 = Isteresi Impostata, 3 = Stato Relè
{
switch (valore) {
case 1: // Temperatura Impostata
lcd.setCursor(13,2);
lcd.print((float)tempSoglia/10, 1);
break;
case 2: // Isteresi Impostata
lcd.setCursor(13,3);
if (isteresi < 100) lcd.print(" ");
lcd.print((float)isteresi/10, 1);
break;
case 3: // Stato Relè
lcd.setCursor(7,1);
if (rele == 0) lcd.print("OFF");
else lcd.print("ON ");
break;
default: // Temperatura Letta
lcd.setCursor(12,0);
if (tempLetta < 10.0) lcd.print(" ");
else if (tempLetta < 100.0) lcd.print(" ");
lcd.print(tempLetta, 1);
if (Direzione == 0) // Animazione "Supercar"
{
lcd.setCursor(Posizione, 1);
lcd.print("- ");
Posizione++;
if (Posizione == 18) Direzione = 1;
}
if (Direzione == 1)
{
lcd.setCursor(Posizione, 1);
lcd.print(" -");
if (Posizione == 14) Direzione = 0;
else Posizione--;
}
break;
}
}
void attivaRele() // Imposto i relè
{
if(tempLetta < (float)tempSoglia/10 - (float)isteresi/10) // Soglia Inferiore -
{
digitalWrite(on, HIGH);
digitalWrite(off, LOW);
rele = 0;
LCD(3);
}
if(tempLetta > (float)tempSoglia/10 + (float)isteresi/10) // Soglia Superiore +
{
digitalWrite(on, LOW);
digitalWrite(off, HIGH);
rele = 1;
LCD(3);
}
}
Claudio prova ora se con l'istruzione " lcd.write ( byte(0) ); " funziona senza errori...
Puoi postare una foto del tuo display in funzione ?
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | Claudio
| Inviato il: 28/06/2017 16:04:35
|
Tutto OK
Elix fa pure tutte le modifiche che ritieni opportuno.
Immagine Allegata: disp.jpg
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | Claudio
| Inviato il: 28/06/2017 16:22:01
|
Purtroppo il carattere 241 lo visualizza come "q" e il personalizzato si fa gli affari suoi.
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | Claudio
| Inviato il: 28/06/2017 17:35:55
|
Non c'è verso, magari cambiando font??? ho risolto così.
Immagine Allegata: disp.jpg
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | calcola
| Inviato il: 28/06/2017 18:00:43
|
Una domanda, perchè hai scelto l'LM35 che è analogico e non un sensore digitale?
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | Claudio
| Inviato il: 28/06/2017 18:13:36
|
Non so, bella domanda, forse perché nella scatolina ce ne sono 5, ho anche un DHT11
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | calcola
| Inviato il: 28/06/2017 18:24:51
|
Il DHT11 è digitale, ha una sua libreria e legge temperatura ed umidità.
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | BellaEli
| Inviato il: 28/06/2017 23:38:13
|
CITAZIONE (Claudio, 28/06/2017 16:22:01 ) 
Purtroppo il carattere 241 lo visualizza come "q" e il personalizzato si fa gli affari suoi.
Cioè lcd.write ( byte(0) ); non da nessun errore ma stampa quello strano carattere ???
Non è questione di font, io dico all'LCD quali "pixel" deve accendere per formare il carattere ma nel tuo ci dev'essere qualcosa che non funziona... Vedo di fare qualche prova con un LCD senza I2C !
CITAZIONE
Una domanda, perchè hai scelto l'LM35 che è analogico e non un sensore digitale.
Per fare delle prove ne avevo acquistati un pacco da 5 a un paio di euro: non sono riuscito a farli funzionare !
Cioè alimentati a 5 volt, senza collegare nulla in uscita, assorbivano tra i 100 è i 200 mA, scaldandosi oltre i 60° in pochi secondi.
C'è poco da sbagliare, Vcc, GND e Out (centrale).
Per scrupolo, su uno nuovo, ho provato ad alimentarlo al contrario ma non è cambiato nulla.
Eppure su internet ci sono migliaia di utenti che li usano senza problemi... Alla fine li ho gettati tutti e 5 e sono passato ai digitali !
Elix
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | Claudio
| Inviato il: 29/06/2017 00:11:36
|
Aaaa, quindi ogni stringa tipo B11001 ripetuta 8 volte dice che pixel accendere nella mappa 5x8
Studio.
--------------- Inverter Sofar Solar HYD6000-EP, 5250W pannelli, 14kWh lifepo4.
| | | | BellaEli
| Inviato il: 29/06/2017 01:16:53
|
CITAZIONE (Claudio, 29/06/2017 00:11:36 ) 
Aaaa, quindi ogni stringa tipo B11001 ripetuta 8 volte dice che pixel accendere nella mappa 5x8
Studio.

Esatto !
Ti di un aiutino: ogni riga è formata da 5 pixel, quindi se il bit corrispondente è a 1 il pixel è nero e viceversa.
Il tuo esempio B11001 accenderà il pixel 1, 2 e 5.
Gli altri a seguire...

--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | calcola
| Inviato il: 29/06/2017 06:47:59
|
CITAZIONE
Per fare delle prove ne avevo acquistati un pacco da 5 a un paio di euro: non sono riuscito a farli funzionare !
Strano, personalmente preferisco i digitali ds18B20, ma gli LM35 sono molto usati. Vanno alimentati e sul centrale restituiscono una tensione proporzionale alla temperatura. Nell'immagine della pagina precedente il sensore di colore azzurro che hai usato, cos'era?
Gli LCD con I2C sono sempre LCD seriali SPI con l'aggiunta di una scheda basata sul pcf8574 che fa da interfaccia. Lavorano sempre allo stesso modo.
Modificato da calcola - 29/06/2017, 06:56:39
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| | | | BellaEli
| Inviato il: 29/06/2017 09:22:15
|
CITAZIONE (calcola, 29/06/2017 06:47:59 ) 
CITAZIONE Per fare delle prove ne avevo acquistati un pacco da 5 a un paio di euro: non sono riuscito a farli funzionare !
Strano, personalmente preferisco i digitali ds18B20, ma gli LM35 sono molto usati. Vanno alimentati e sul centrale restituiscono una tensione proporzionale alla temperatura. Nell'immagine della pagina precedente il sensore di colore azzurro che hai usato, cos'era?
Gli LCD con I2C sono sempre LCD seriali SPI con l'aggiunta di una scheda basata sul pcf8574 che fa da interfaccia. Lavorano sempre allo stesso modo.
Infatti, non so perché non funzionavano, una partita difettosa ?
Quello azzurro è un piccolo potenziometro smontato da non ricordo dove !
Secondo te come mai a Claudio si visualizza quello strano carattere al posto del simbolo Più Meno ???
--------------- C'è un limite al fai da te ??? Si, ma lo stabiliamo noi !!!
| | | | calcola
| Inviato il: 29/06/2017 10:02:50
|
Non ho mai impostato caratteri personalizzati, ricordo però che in un codice demo degli LCD i caratteri personalizzati funzionavano.
--------------- Impara l'arte e mettila da parte 14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.
| |
| | |
|
Versione Mobile!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|