Ciao a tutti ,
sono alle prese con un display led 7segment per visializzare una temperatura da una sonda K utiluizzando come convertitore il MAX31850.
Il problema ce sto avendo è che quando richiedo la temperatura al sensore il 7segment smette gi aggiornarsi e blinka.
C'è un modo per velocizzare o per non far smettere di far aggiornare il display?
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
#include "SevSeg.h"
SevSeg sevseg;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress airtemp;
int temp;
void setup(){
sensors.begin();
sensors.getAddress(airtemp, 0);
sensors.setResolution(airtemp, 9);
byte numDigits = 4;
byte digitPins[] = {6, 5,3,4}; //Digits: 1,2,3,4 <--put one resistor (ex: 220 Ohms, or 330 Ohms, etc, on each digit pin)
byte segmentPins[] = {8,7,11,12,13,10,9,A0}; //Segments: A,B,C,D,E,F,G,Pd
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default. Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
sevseg.setBrightness(100);
}
void loop(void)
{
sensors.requestTemperatures();// richiedo temperatura da max31850
temp=sensors.getTempC(airtemp),0;
sevseg.setNumber(temp);
sevseg.refreshDisplay();
}
Mi sembra di ricordare che quella libreria prevede una funzione di lettura "bloccante"
Ecco la ragione dello stop al display
Non ci sono soluzioni semplici, è un limite dello hardware che hai scelto
Però mi sembra anche che quella libreria prevede una funzione (io la ricordo come sperimentale) che prevede la lettura in due passaggi, entrambi asincroni e non bloccanti
Ti tocca di guardare un po' di documentazione
In alternativa bisognerebbe misurare la durata della lettura per vedere se è compatibile con il tempo di multiplex, in tal caso basterebbe riscriversi il multiplex a mano (senza usare la SevSeg) sincronizzandolo con le letture del sensore.
Sto collegando 2 arduino per avere una visione ottimale.
il master invia in I2c il valore allo slave.
per il master sto usando questa sequenza di invio: