[RISOLTO] Letture DS18b20 inaffidabili

Premetto che sono un principiante assoluto.
Vorrei ottenere che se il sensore DS18b20 legge dei valori attendibili ( es. tra -22 e +80 ) il programma vada avanti, altrimenti ripeta la lettura un certo numero di volte sinché il valore non rientra nel range ma che poi dopo tot tentativi prosegua ugualmente, anche se fosse -127.0.
Questo per entrambi i sensori.
Metto solo una parte del listato per non appesantire ma a voi basta sicuramente per capire, se invece serve lo posto tutto. Mi suggerite come procedere per la modifica? Grazie
P.S. il problema è dovuto ad interferenze che sballano la lettura, che comunque spero di eliminare.

//------------------------------ ALLARMI TEMPERATURA -----------------------------------------

  sensors.requestTemperatures();    // legge temperatura sensori

  t1 = sensors.getTempCByIndex(0);  // legge sensore 1 (A)

  // stampa su lcd temperatura primo sensore ( t1 - A )
  lcd.setCursor(0, 0);
  lcd.print("A:");
  lcd.print(t1);
  lcd.print(" ");
  // stampa a monitor temperatura sensore 1
  Serial.print("Sensore 1 ");
  Serial.print(" : ");
  Serial.print(t1);
  Serial.print(" °C    ");


  t2 = sensors.getTempCByIndex(1);  // legge sensore 2 (B)

  // stampa su lcd temperatura sensore 2 ( t2 - B )
  lcd.setCursor(8, 0);
  lcd.print("B:");
  lcd.print(t2);
  lcd.print("");
  // stampa a monitor temperatura sensore 2
  Serial.print("Sensore 2 ");
  Serial.print(" : ");
  Serial.print(t2);
  Serial.print(" °C    ");
  Serial.println();

  // se la temperatura del sensore 1 oppure 2 supera la soglia impostata ( ventola ) attiva uscita D9 ventola
  if ((t1 >= onFan) || (t2 >= onFan)) {
    digitalWrite(ventola, HIGH);
  }

  // se la temperatura del sensore 1 oppure 2 supera la soglia impostata ( soglia ) attiva uscita D10 overTemp
  if ((t1 >= soglia) || (t2 >= soglia)) {
    digitalWrite(overTemp, HIGH);
  }

  //se la temperatura dei sensori 1 e 2 è più bassa di ( ripristino ) disattiva uscita D10 overTemp
  if ((t1 < ripristino) && (t2 < ripristino)) {
    digitalWrite(overTemp, LOW);
  }

  //se la temperatura dei sensori 1 e 2 è più bassa di ( offFan ) disattiva uscita D9 ventola
  if ((t1 < offFan) && (t2 < offFan)) {
    digitalWrite(ventola, LOW);
  }

  // pausa tra le misure
  //delay(pausa * 60000);  
  delay(30000);
}

Grazie

// dipende dalla variabile [count] da dichiarare globale
// es: byte count;
do {
      if (count < 5) {
        sensors.requestTemperatures();
        t1 = sensors.getTempCByIndex(0); 
        count++;
        Serial.println(count);
      } else {
        count = 0;
        break;
      }

    } while (t1 == -127);

Io non posso provarlo.
Comunque, in questo caso il sensore è digitale e la libreria mette a disposizione delle funzioni
per testare se il sensore è in errore e in tal caso solitamente dopo tot tempo si passa dalla modalità
termostato alla modalità on/off a tempo.
La modalità a tempo equivale ad accendere la ventola per 1 minuto e spegnerla per 1 minuto, queste
tempistiche sono configurabili. Il rapporto 1:1 è del 50%, cioè il periodo è di 2 minuti e per il 50% del tempo le ventole sono accese e si spengono per la restante parte del tempo.

Ciao.

Più che un problema sw il tuo è HW

Se ti va metti lo schema con i valori dei componenti usati, possibilmente misurati
Hai visto mai che siano erroneamente marchiati

Comunque anche limitandoci al sw la tua descrizione è insufficiente: ammettiamo anche che dopo N letture errate si arrenda e ptosegua, ma cosa fa?
Tiene acceso, spegne, o fa la giga con le ventole?

Devi stabilire questo prima di andare avanti

Innanzitutto grazie. Sono sicuro anch'io che è un problema hardware e spero anche di risolverlo tra una settimana quando potrò accedere fisicamente al circuito. Non è un discorso di circuito o componenti, funziona tutto benissimo sinchè non attacco i sensori alle alette di raffreddamento di uno step down che
irradia sicuramente radiofrequenza oppure i collegamenti tra i due sensori formando una spira si accoppiano con l'induttanza dello switching e mandano in crisi il Dallas.
Per maggior sicurezza vorrei far ripetere la lettura al sensore sopratutto quando da' -127.0 come se fosse scollegato ma dato che questa è la parte meno importante del programma, che mi gestisce la carica di una batteria non presidiata vorrei che dopo un po' di letture che considero sballlate ( al momento < di 20 o > di 60 ) il programma proseguisse normalmente per accendere o spegnere il caricabatterie a seconda della tensione. Vedo di spiegarmi meglio:
esempio, legge 36 il programma va avanti, legge -127 rifà la lettura. Se dopo
tre letture è sempre -127 abbandona le letture e il programma prosegue.
Spero di essermi spiegato meglio. Grazie per le risposte

È certamente un discorso di circuito
Dato che spostando un componente hai problemi

Magari non ti è chiaro, ma è così

Poi sei libero di fare e credere quello che preferisci

Grazie per la risposta.
E' interessante, ho il circuito che ho usato per i test e provo ad inserire il tuo listato che ho anche capito e sul quale rifletterò. Spero comunque di risolvere via hardware, questa modifica la faccio solo se fosse il chip che si sballa con la radiofrequenza e condensatori direttamente sui piedini e fili separati per i due sensori non risolvessero, nel qual caso per questioni di affidabilità ho degli ingressi analogici liberi e passerei alle ntc. Al momento ho lasciato la ventola sempre accesa quando lo step down è alimentato, e comunque avevo già inserito
due fusibili termici per togliere alimentazione in caso di sovratemperatura e pure una crowbar che se la tensione sale troppo fa saltare il fusibile ed evita guai.
Buona serata

Non ti arrabbiare. Lo schema non posso metterlo perchè non l'ho disegnato, ho montato tutto direttamente su pallinato, quattro relè a 12 V col fotoaccoppiatore,
Arduino, il MAX 873 per il riferimento di tensione, una alimentazione a 9 V per il radiocomando con due reed relè per pilotarlo e far mandare tensione tramite un trasformatore di isolamento che è due piani più in basso al caricabatterie quando è necessario, e due Wemos D1 mini che mi mandano la notifica sul cellulare ognuno col suo alimentatore, un display I2C per i test e un po' di led per vedere cosa succede.
Al limite posso mandarti le foto, ma non so se sono in grado di farlo, sono alle prime esperienze sia col forum che con la programmazione, mi perdonerai.
Buona serata

Ma io non sono arrabbiato, tranquillo

Però ti faccio notare una cosa:
Non hai uno schema, pertanto hai fatto tutto a memoria - il che è già abbastanza un problema di suo

Hai noie coi ds18b20
Che infatti ti sei dimenticato di citare, nella tua descrizione dello schema

Non ti fa pensare, questo?

Che fosse scontato! Se è per questo non ho elencato nemmeno le resistenze in base ai transistor, i transistor stessi, le resistenze dei partitori, i numerosi condensatori di disaccopiamento , i diodi sulle bobine dei reed relè e di protezione, il fusibile, i connettori, ecc. Ti metto il listato, è molto commentato perché ho la memoria corta quindi così vedi cosa ho fatto. Dato che è la seconda volta che faccio un programma o meglio la seconda versione perché la prima con hardware più ristretto e relè bistabili è più di un anno che funziona suggerimenti su come migliorare il programma sono molto graditi. Non considerare le temporizzazioni,
i valori delle resistenze dei partitori invece ti diranno qualcosa...
Grazie, buona giornata.

/*   
Se la tensione di batteria è bassa accende caricabatteria e manda notifica. 
Se tensione batteria è troppo bassa stacca il carico.
Se tensione batteria è alta e il caricabatterie è acceso spegne caricabatteria e manda notifica. 
Se la tensione di batteria va troppo alta stacca anche i pannelli.
Se temperatura step down è alta accende ventola e la spegne quando scende.
Se temperatura step down è troppo alta spegne il caricabatteria e lo riaccende quando scende.
Alimentazione telecomando e Wemos On e Off  con abilitazioni step down separate.
xxxxxxxxxxxxxxxxxxx solo test poi mettere valori giusti xxxxxxxxxxxxxxxxxxx
*/

#include <Wire.h>               // carica libreria
#include <OneWire.h>            // carica libreria
#include <DallasTemperature.h>  // carica libreria
#include <LiquidCrystal_I2C.h>  // carica libreria

#define ONE_WIRE_BUS 2  // Pin Arduino D2 collegato al pin DQ dei sensori che va con resistenza 4K7 al +5 V
#define On 3            // accende caricabatteria
#define Off 4           // spegne caricabatteria
#define sw 5            // alimentazione telecomando
#define txON 7          // wemos invia acceso
#define txOFF 8         // wemos invia spento
#define ventola 9       // comando relè ventola
#define overTemp 13     // comando relè caricabatteria
#define load 11         // comando relè utenze
#define pannOff 10      // comando relè pannelli
#define alWemOn 12      // alimentazione wemos on
#define alWOff 6        // alimentazione wemos off
//                      // (A4) collegato a SDA e (A5) collegato a SCL display I2C

OneWire oneWire(ONE_WIRE_BUS);        // Imposta la connessione OneWire
DallasTemperature sensors(&oneWire);  // Passa il riferimento oneWire al Dallas Temperature.
LiquidCrystal_I2C lcd(0x27, 16, 2);   // Setta LCD a 0x27 2 linee 16 caratteri I2C

float vA0;         // tensione batteria letta da A0
float vBatt;       // tensione batteria
float R1 = 5920;   // valore in Ohm del partitore  A0 2k7 + 3k3
float R2 = 972;    // 17.5 V max

float vA1;         // tensione caricabatteria letta da A1
float vCar;        // tensione caricabatterie on prima step down
float R3 = 11860;  // valore in Ohm del partitore  A1
float R4 = 970;    // 33 V max

float tensMin = 12.00;  // valore di tensione batteria inizio ricarica
float tensMax = 14.40;  // valore di tensione batteria fine carica estiva

float reteOn = 18.0;   // capisce se caricabatteria è acceso
float vOver = 15.2;    // scollega i pannelli per sovratensione
float panOn = 14.3;    // ricollega i pannelli
float minLoad = 11.8;  // tensione di stacco utenze
float recLoad = 12.2;  // tensione ripristino utenze

float t1;  // temperatura sensore 1
float t2;  // temperatura sensore 2

float onFan = 40;       // attiva relè accensione ventola D9 quando si superano i xx gradi                        xxxxxxxxxxxxxxxxxxx
float offFan = 34;      // disattiva relè accensione ventola D9 quando temperatura scende a xx gradi              xxxxxxxxxxxxxxxxxxx
float soglia = 56;      // attiva relè stacco caricabatteria overTemp D10 se si superano i xx °C                  xxxxxxxxxxxxxxxxxxx
float ripristino = 44;  // disattiva relè stacco caricabatteria overTemp D10 quando temperatura scende a xx °C    xxxxxxxxxxxxxxxxxxx

// int pausa = 1;  // Pausa tra le letture in minuti

//----------------------------------------------------------------------------------------------

void setup() {

  pinMode(On, OUTPUT);          // D3 accende
  pinMode(Off, OUTPUT);         // D4 spegne
  digitalWrite(sw, LOW);        // D5 step up 9V telecomando (disabilitato)
  pinMode(sw, OUTPUT);          // D5 alimenta telecomando
  pinMode(pannOff, OUTPUT);     // D13 relè stacca pannelli
  pinMode(txON, OUTPUT);        // D7 wemos notifica on
  pinMode(txOFF, OUTPUT);       // D8 wemos notifica off
  pinMode(ventola, OUTPUT);     // D9 relè ventola
  digitalWrite(overTemp, LOW);  // D13 assicura siano spenti
  pinMode(overTemp, OUTPUT);    // D13 relè caricabatteria e led Arduino
  pinMode(load, OUTPUT);        // D11 relè utenze
  digitalWrite(alWemOn, LOW);   // D12 step down 5V wemos on  (disabilitato)
  pinMode(alWemOn, OUTPUT);     // D12 alimenta wemos on
  digitalWrite(alWOff, LOW);    // D6 step down 5V wemos off (disabilitato)
  pinMode(alWOff, OUTPUT);      // D6 alimenta wemos off

  analogReference(EXTERNAL);  // IMPORTANTE altrimenti può danneggiarsi
  lcd.begin();                // inizializza lcd
  sensors.begin();            // inizializza sensori temperatura
  Serial.begin(9600);         // inizializza seriale per stampa a video
}

//----------------------------------------------------------------------------------------------

void loop() {

  for (int k = 1; k <= 10; k++) {
    vA0 = analogRead(A0);
    delay(10);
  }
  vBatt = (vA0 * 2.50 / 1024.0) / R2 * (R1 + R2);  // calcolo tensione batteria V ref 2.5 V MAX873

  Serial.print("V. batt.: ");
  Serial.println(vBatt);

  // Stampa tensione batteria su seconda riga lcd
  lcd.setCursor(0, 1);
  lcd.print("V. batt.: ");
  lcd.print(vBatt);
  lcd.print("");

  //----------------------------------------------------------------------------------------------

  // legge tensione ingresso caricabatteria per vedere se acceso
  for (int k = 1; k <= 10; k++) {
    vA1 = analogRead(A1);
    delay(10);
  }
  vCar = (vA1 * 2.50 / 1024.0) / R4 * (R3 + R4);  // calcolo tensione prima step down

  Serial.print("V rete on : ");
  Serial.print(vCar);
  Serial.println();

  //------------------------------- ACCENDE SE SCARICA -------------------------------------------

  if (vBatt <= tensMin) {
    digitalWrite(alWemOn, HIGH);  //abilita 5V wemos on e poi 9 V telecomando
    delay(1000);
    digitalWrite(sw, HIGH);       // a 12.0 V accende telecomando e manda 5 on
    delay(1000);
    for (int i = 0; i < 5; i++) {
      digitalWrite(On, HIGH);
      delay(1000);
      digitalWrite(On, LOW);
      delay(1000);
    }
    digitalWrite(sw, LOW);     // spegne slimentazione 9 V telecomando
    delay(15000);              // attende che wemos sia online   xxxxxxxxxxxxxxxxxxx
    digitalWrite(txON, HIGH);  // notifica accensione
    delay(1000);
    digitalWrite(txON, LOW);
    delay(2000);                  // attende che wemos trasmetta    xxxxxxxxxxxxxxxxxxx
    digitalWrite(alWemOn, LOW);  // spegne 5V wemos on
  }

  //------------------------------ SPEGNE SE CARICA ----------------------------------------------

  if ((vBatt >= tensMax) && (vCar > reteOn)) {
    digitalWrite(alWOff, HIGH); // abilita step down 5V wemos off e poi 9 V telecomando
    delay(1000);
    digitalWrite(sw, HIGH);     // a 14.4 V spegne caricabatteria e manda notifica
    delay(1000);
    for (int i = 0; i < 5; i++) {
      digitalWrite(Off, HIGH);
      delay(1000);
      digitalWrite(Off, LOW);
      delay(1000);
    }
    digitalWrite(sw, LOW);      // spegne telecomando
    delay(15000);               // attende che wemos sia online    xxxxxxxxxxxxxxxxxxx
    digitalWrite(txOFF, HIGH);  // notifica spegnimento
    delay(1000);
    digitalWrite(txOFF, LOW);
    delay(2000);                // attende che wemos trasmetta     xxxxxxxxxxxxxxxxxxx
    digitalWrite(alWOff, LOW);  // spegne 5V wemos off
  }

  //------------------------------ EMERGENZA ANOMALIE --------------------------------------------

  if (vBatt >= vOver) {
    digitalWrite(pannOff, HIGH);  // relè D6 stacca pannelli se tensione alta 15.2 V
  }

  if (vBatt <= panOn) {           // ricollega pannelli a 14.2 V
    digitalWrite(pannOff, LOW);
  }


  if (vBatt <= minLoad) {         // se tensione batteria minore di 11.8 V (minLoad)
    digitalWrite(load, HIGH);     // attiva D11 relè che stacca utenze
  }

  if (vBatt >= recLoad) {     // se tensione batteria maggiore di 12.2 V (recLoad)
    digitalWrite(load, LOW);  // disattiva D11 relè che ricollega utenze
  }

  //------------------------------ ALLARMI TEMPERATURA -----------------------------------------

  sensors.requestTemperatures();    // legge temperatura sensori

  t1 = sensors.getTempCByIndex(0);  // legge sensore 1 (A)

  // stampa su lcd temperatura primo sensore ( t1 - A )
  lcd.setCursor(0, 0);
  lcd.print("A:");
  lcd.print(t1);
  lcd.print(" ");
  // stampa a monitor temperatura sensore 1
  Serial.print("Sensore 1 ");
  Serial.print(" : ");
  Serial.print(t1);
  Serial.print(" °C    ");


  t2 = sensors.getTempCByIndex(1);  // legge sensore 2 (B)

  // stampa su lcd temperatura sensore 2 ( t2 - B )
  lcd.setCursor(8, 0);
  lcd.print("B:");
  lcd.print(t2);
  lcd.print("");
  // stampa a monitor temperatura sensore 2
  Serial.print("Sensore 2 ");
  Serial.print(" : ");
  Serial.print(t2);
  Serial.print(" °C    ");
  Serial.println();

  // se la temperatura del sensore 1 oppure 2 supera la soglia impostata ( ventola ) attiva uscita D9 ventola
  if ((t1 >= onFan) || (t2 >= onFan)) {
    digitalWrite(ventola, HIGH);
  }

  // se la temperatura del sensore 1 oppure 2 supera la soglia impostata ( soglia ) attiva uscita D10 overTemp
  if ((t1 >= soglia) || (t2 >= soglia)) {
    digitalWrite(overTemp, HIGH);
  }

  //se la temperatura dei sensori 1 e 2 è più bassa di ( ripristino ) disattiva uscita D10 overTemp
  if ((t1 < ripristino) && (t2 < ripristino)) {
    digitalWrite(overTemp, LOW);
  }

  //se la temperatura dei sensori 1 e 2 è più bassa di ( offFan ) disattiva uscita D9 ventola
  if ((t1 < offFan) && (t2 < offFan)) {
    digitalWrite(ventola, LOW);
  }

  // pausa tra le misure
  //delay(pausa * 60000);  
  delay(30000);
}

Ovvero tu dai per scontato la parte del circuito che presenta il problema

Ottima maniera per dare per scontati gli eventuali errori di cablaggio, schermatura, calcolo delle pull-up e similia

Comunque noi non siamo arrabbiati, e ci mancherebbe

Ma tu non vuoi vedere il tuo problema
Anche a indicartelo svicoli tutta a mancina

Adesso comunque svicoliamo noi

1 Like

Il problema è molto semplice, si presenta solo quando i sensori sono attaccati alle alette e captano la porcheria irradiata dallo step down. Stamattina ho rifatto il cavo con le sonde, ho messo direttamente sui piedini del sensore un condensatore ceramico da 100 K (+ 1 nF non ti dico perché). Appena possibile provo col nuovo cavo, sono a 60 Km e non vado su apposta visto che tutto funziona, lo tengo sott'occhio con la telecamera. Avevo solo chiesto se qualcuno aveva avuto esperienze simili, se la sonda che vendono cablata ha il terminale metallico collegato al meno o è libero e, a puro scopo didattico perché voglio solo cose affidabili quindi non lo avrei usato, come aggirare il problema via software. Oltretutto la discussione inizialmente l'avevo postata nell'area hardware.
Per me l'argomento è chiuso, tra qualche giorno ti dirò se i collegamenti separati e i condensatori hanno risolto perché potrebbe essere utile a qualcuno che legge.
Non volevo fare polemiche.
Ciao, buona giornata.

Puoi sempre fare un disegno (decente) a penna e poi postarlo come foto.
Sarebbe utile anche per te, secondo me. Come documentazione per il futuro. Tra un anno o due ricorderai a memoria cosa hai fatto ?

2 Likes

Purtroppo l'elettronica, che è la base, troppo spesso viene ritenuta del tutto trascurabile, ma se non si conosce esattamente tutto il circuito è inutile perdere tempo a cercare soluzioni nel software.

1 Like

Si, hai ragione, per le cose che ho autocostruito, e sono parecchie, sono sempre partito da un disegno a matita dello schema perché quando fai un progetto c'è sempre qualcosa da cambiare o che non hai considerato.
Poi facevo pure il circuito stampato prima a matita e poi sulla basetta con l' apposito pennarello GBC e i trasferibili R41. Per qualcosa non l' ho fatto, ad esempio per un frequenzimetro programmabile con dei contraves che legge l' oscillatore di un BC348 ( radio a valvole militare ) e somma o sottrae il valore di media frequenza per indicare quella di ricezione. L' ho costruito con dei TTL e cablato esclusivamente con del filo per wrappare giallo. Se se ne staccasse uno ci sarebbe da piangere. Ora gli stampati li progetta il computer, l'autocostruzione non ha più senso e non conviene economicamente, però ti permette di fare ciò che ti piace.
Sono andato OT ma qui il discorso è diverso, praticamente sarebbe uno schema a blocchi, non serve disegnare la resistenza in base al transistor che ha al collettore la bobina di un reed col suo diodo e il led con la sua resistenza, o i partitori con il condensatore verso massa ecc., ho preferito fare la foto una volta terminato sia dal lato componenti che da quello cablaggio e poi stamparla e segnarmi le connessioni che vanno all'esterno ,sei fili al telecomando, due per leggere la presenza di tensione nel caricabatterie, i sensori in oggetto ed il resto ai relè sui quali ho scritto cosa fanno, e sopratutto la funzione di due ponticelli, uno che mi simula il caricabatterie acceso e un'altro che alimenta il telecomando per intervenire manualmente. Lo schema è utile, a volte indispensabile, ma non ti dice se il condensatore va montato per esempio vicino al pin analogico o se va bene anche a un Km di distanza. La vera porcheria l'ho fatta usando i connettori a pettine tipo Arduino sulla cui affidabilità ho molte remore. Comunque è giusto come dici tu, è così che si lavora, solo che io non ne ho voglia e per ora mi accontento del risultato. A proposito di condensatori, lo scrivo perché ho visto dei vecchi post col problema ma non la soluzione, per testare il programma avevo usato un TL431 direttamente come zener da due volt e mezzo con l'intenzione di portarlapoi a 4.096 e avevo instabilità di lettura, davo la colpa al potenziometro che usavo per la simulazione e invece era lui. Nel datasheet ho poi visto che il condensatore in parallelo deve essere minore di 27 nano o maggiore mi pare di un micro e mezzo. Con un ceramico da 4u7 attaccato ai piedini stabilità perfetta.
Smetto di fare filosofia, ti ringrazio, buona giornata.
P.S. non sto sfottendo, ti ringrazio veramente, per aver letto e per aver detto una cosa giusta

Si, è vero. Ho letto parecchi tuoi post e ti stimo molto.
Il mio intento non era tanto di risolvere col software che comunque non sarebbe stato affidabile e non l'avrei usato quanto capire come sarebbe stato fattibile da qualcuno che come te sa programmare. Era una cosa teorica, il problema sono quasi certo di risolverlo con le connessioni ai sensori su fili separati e i condensatori diretti sui piedini. Tra pochi giorni posso provare e vi dico il risultato.
La difficoltà che ho trovato con Arduino, sono ai primi approcci con la programmazione ( e ho 70 anni ) è che si passa da cose banali, i soliti esempi del led che lampeggia o i vari sensori con visualizzazione a schermo, a cose complesse che solo in pochi potete capire. Ho trovato anche fesserie in rete, insegnanti che fanno dividere per 1023 il riferimento per l'adc o che scrivono che ' e " sono uguali, tanto per dirne qualcuna. E a volte quelli che vogliono insegnare sono quelli che sanno meno. E' per questo che ho letto molto su questo forum, anche se non ero iscritto, ed ogni volta ho imparato qualcosa.
Grazie per il tempo che perdete per aiutare gratuitamente quelli come me quando sono in difficoltà. Buona giornata
P.S. quando hai tempo mi dai un'occhiata al programma, funziona ma certamente si può fare di meglio, e alcuni dubbi li ho avuti, per esempio con le parentesi prima e dopo le funzioni && e || perchè ho visto che funziona sia mettendole che no e non sò cosa è più giusto. Ancora grazie

Ti ricordo che Arduino si programma in C/C++ quindi una lettura ad un testo relativo a questi linguaggi è utile. Nello specifico, capitolo del tipo "priorità tra gli operatori".
Se ti riferisci a codice come questo:
if ((t1 < ripristino) && (t2 < ripristino))
quelle parentesi non sono necessarie. Prima vengono valutati i confronti e poi operatori logici and/or.
Ma se ti aiutano nella lettura sono ben accette.

Per aiutare nella lettura potresti anche scriverlo:
if (t1<ripristino && t2<ripristino)
Comunque ripristino non è molto chiaro. Sarebbe meglio t_ripristino. Io per i tempi in millisecondi uso sempre variabili che iniziano con t_.

Grazie, sei stato molto chiaro e da solo non capivo cosa era meglio e perché.
Il problema dei libri è quello della terza riga, quando la leggo dimentico le prime due :slightly_smiling_face: Ho visto nel forum dei link a libri per principianti, uno che ho scaricato è molto semplice e stringato e mi ha dato la visione di insieme delle istruzioni, l'ho trovato molto utile, anche se certe non le userò mai.
Non credo certo di imparare a programmare, solo quel minimo per giocare ma sono troppe le cose che non conosco. Comunque con Arduino è stata una bella svolta, ho messo in un cassetto una manciata di 4017, 4024 e altri cmos,
è tutto più semplice e molto più facile variare i parametri.
Con te oggi ho fatto un passo avanti, ho imparato una cosa che non sapevo.
Grazie anche per il link.
Ciao, buona serata

Per aiutare nella lettura potresti anche scriverlo:
if (t1<ripristino && t2<ripristino)

Infatti avevo provato anche così e funzionava ma non sapevo quale fosse la forma più corretta.

Io per i tempi in millisecondi uso sempre variabili che iniziano con t_.

Perchè tu i programmi li fai anche eleganti. Vedrò di imitarti tanto faccio presto a variare e poi ho imparato la regola , ti copierò.
Grazie, ciao, buona serata.

1 Like

Risolto. Montato condensatore ceramico da 100 nF direttamente sui piedini tra + e - di ogni sensore, cablato con fili separati per i due sensori e messo altro condensatore dove i fili si connettono alla basetta.
Anche trasmettendo con l'antenna di un portatile a 15 cm di distanza la lettura rimane stabile ed esatta.
Come previsto era un problema di cablaggio che raccoglieva il disturbo.
Buona giornata.