Go Down

Topic: Misuratore Ampere / Volt / Continuità per pista Slot (Read 18012 times) previous topic - next topic

ricki158

Appena possibile provo. Però credo anche io che sono arrivato alla frutta in quanto a ottimizzazione. Si beh potrei riscrivere anche i 4 valori soltanto se vengono aggiornati rispetto al precedente... ma siccome varieranno sempre secondo me non ha molto senso.

Quello che mi preoccupa invece è la sincronizzazione con altre impostazioni, vedi per esempio la libreria che mi legge il DHT11. Non riesco proprio a leggere la temperatura!

Ho già provato a inserire tutto questo codice di gestione display all'interno del programma completo con le letture... il risultato non è compatibile con dei tempi buoni, ma qua ci sono le funzioni di acquisizione che mi rallentano il tutto. Ma di questo ne parleremo quando sarà risolto il capitolo display e sensore DHT11.

Nel frattempo provo quello che dici tu e vediamo.

ricki158

In questi giorni è venuto un temporale con fulmini molto vicini e mi sono reso conto che l'alimentatore a 12 v che utilizzavo per fare le prove è saltato. Per fare le prove però tenevo sempre il connettore a coccodrillo collegato al negativo, collegando il positivo al bisogno. Cambiato l'alimentatore il circuito ha ripreso a funzionare, solo che mi sono cambiati i valori di lettura per la "tastiera", cioè prima i due bottoni uno portava a 0 e l'altro portava a 127, con a vuoto 255. Adesso il tasto "medio" (che è il reset) mi porta i valori a 114, facendomi sudare freddo all'inizio per capire dove fosse l'errore. Può essere qualcosa di legato alla scarica atmosferica? Considerando che il "salvavita" (ovvero gli interruttori magnetotermici) sono giustamente saltati? Ad ogni modo amen.

Ho provato con la tua variante etem. Il flickering si è notevolmente ridotto! E devo dire di essere arrivato ad un risultato più che soddisfacente. La parte però relativa al DHT11 continua a non funzionare.

Io direi che dome display ci siamo.

https://youtu.be/ngYXfsU_UBM

Etemenanki

Mi sa che piu di cosi lo sfarfallio non si possa ridurre, con quel tipo di display ... o almeno, a me non viene in mente nessun altro possibile sistema ... ma mi pare accettabile adesso ;)
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

ricki158

Sisi è accettabile assolutamente!

Adesso il problema per me è capire come mai non funziona il DHT11. Se chiamo la funzione singolarmente funziona però.

Code: [Select]

#include <dht11.h>                                    /* libreria per DHT11 */

#define DHT11Pin 14                                   /* input digitale sensore temperatura e umidità */

dht11 DHT11;                                          /* creazione oggetto DHT11 per la libreria DHT11 di gestione del sensore */

float hum = 0.0;                                      /* variabile a virgola mobile per l'umidità, valore in percentuale */
float temp = 0.0;                                     /* variabile a virgola mobile per la temperatura, valore in gradi centigradi */
float preHum = 0.0;                                   /*  */
float preTemp = 0.0;                                  /*  */

void meteo(){
  byte chk = DHT11.read(DHT11Pin);                    /* leggi il DHT11 dal pin */
  hum = DHT11.humidity;                               /* scrivi la variabile dalla funzione */
  temp = DHT11.temperature;                           /* scrivi la variabile dalla funzione */
}


Questo codice funziona perché l'avevo provato sul codice di test dell'acquisizione dei convertitori AD e mi segnava la temperatura e l'umidità corretti.
Credo sia un problema di sincronia con tutta la gestione dei display, però non so come sistemare il problema. La funzione che mi gestisce i pulsanti e il "long press" invece non ha problemi.
Vorrei sistemare questo prima di passare allo step successivo che sarà quello di inserire l'acquisizione.

Etemenanki

... non e' che lo leggi troppo di frequente ? ...

Considera che temperatura, ma soprattutto umidita', variano in genere piuttosto lentamente, per cui salvo in caso di esperimenti "da laboratorio", continuare a fare letture del sensore non avrebbe molto senso ... anche fare solo una lettura ogni 5 secondi o piu, o un tempo simile, puo essere piu che sufficente ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

ricki158

Ma magari anche si ma la libreria, da quello che ho capito leggendo le funzioni, dovrebbe fare una lettura al secondo. Credo comunque che se facessi una lettura ogni secondo o ogni 5 secondi non cambierebbe nulla e non riuscirei comunque a leggere.

Etemenanki

Pero' se con solo il DHT te lo legge e ti stampa i valori, la libreria sembrerebbe funzionante ... bisognerebbe vedere se c'e' qualcos'altro che va in conflitto aggiungendo il resto ... oppure se e' lei che richiamandola una volta ogni giro del loop come fai adesso, si pianta ... prova a mettere un richiamo ogni 5 secondi a meteo() (con millis) nel loop invece di richiamarla in continuazione  ... non so, sto cercando di indovinare perche' i DHT11 io non li uso mai ... ed altro non mi viene in mente ...
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.

ricki158

#232
Jul 10, 2018, 10:20 am Last Edit: Jul 10, 2018, 10:35 am by ricki158
Ho provato a richiamarla ogni 5 secondi ed ho provato a togliere la parte nel loop che richiama con millis() la funzione di gestione dei display, comunque non funziona.

Mentre nella versione di codice dove ho soltanto la lettura dei convertitori senza la parte di display il DHT11 funziona. Provo a togliere riga per riga le dichiarazioni per la gestione dei display.

EDIT: ho provato ad eliminare le funzioni di stampa sui display e il DHT11 funziona, pur mantenendo l'intestazione e la creazione degli oggetti "display", cancellando anche la funzione state() che mi gestisce i display e cosa viene scritto.

Standardoil

Ok che non funziona,
Ma cosa ti dice chk?
Timeout o checksum?
Che versione di libreria usi? Ce ne sono varie
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

ricki158

Io sto utilizzando la libreria scritta da Adafruit: https://github.com/adafruit/DHT-sensor-library

Stampando CHK, quando funziona mi restituisce il valore 255, quando non funziona restituisce 254. Ora guardo un po' la libreria per capire cosa voglia dire.

Comunque mi sono reso conto che ogni cosa che stampo e ogni riferimento al display (per esempio le impostazioni in setup() per l'inizializzazione dei display e la funzione state() in loop() che gestisce le 4 modalità e cosa viene stampato sul display) non mi fa funzionare il DHT. Commentate quelle 6 righe in setup() e loop() non ho problemi.

Standardoil

Sbaglio io oppure gli esempi  d'uso  di quella libreria sono diversi da come la usi tu?
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

ricki158

Si hai ragione, e sinceramente non mi ricordo da dove li ho pescati. Però siccome funzionavano (e funzionano in determinate condizioni) non mi ero posto il problema.

Ora sto provando questo codice e funziona, ma non funziona se contemporaneamente faccio funzionare i display:

Code: [Select]

unsigned long dhtTime = millis();
#define dhtDelay 5000

#include "DHT.h"

#define DHTPin 14
#define DHTType DHT11

DHT dht(DHTPin, DHTType);

float temp;
float hum;

void meteo(){
  temp = dht.readTemperature();
  hum = dht.readHumidity();
}

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(DHTPin, INPUT);
}

void loop() {
  if (millis() - dhtTime > dhtDelay) {
    dhtTime = millis();
    meteo();
    Serial.print("Temperatura: "); Serial.print(temp, 1); Serial.print(" C"); Serial.print(" Umidità: "); Serial.print(hum, 1); Serial.println(" %");
  }
  if (isnan(hum) || isnan(temp)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
}

Standardoil

Cioè esattamente cosa fa?
Non compila, ti stampa il messaggio di errore, oppure stampa valori a caso?
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

ricki158

Scusami hai ragione. Stampa il messaggio d'errore.

Standardoil

Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

Go Up