Hello everyone!
I'm a beginner at arduino and bluetooth things. I'm trying to make a project that reads thermometer temperatures and graphs them in real time, at the same time, a .csv file is saved to the local device memory with the read values. All works fine, except that the readings are slow sometimes, when I start to increase or lower the temperature, aberrant values appear on the received text, which are visualized both in the graphs and in the spreadsheet. That's shown below.
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
// Pino ao qual o barramento dos sensores está conectado
#define ONE_WIRE_BUS 4
String trocaDados;
// Configura o objeto OneWire para comunicar com qualquer dispositivo OneWire
OneWire oneWire(ONE_WIRE_BUS);
SoftwareSerial bluetooth(2, 3);
// Passa a referência do objeto OneWire para o objeto DallasTemperature
DallasTemperature sensors(&oneWire);
// Número máximo de sensores que você espera conectar
#define MAX_SENSORS 10
DeviceAddress sensorAddresses[MAX_SENSORS];
// PORTAS DIGITAIS DOS LEDS
int numSensors;
int ledSens1 = 5;
int ledSens2 = 6;
int ledLeit = 7;
void setup() {
// Inicia a comunicação serial
bluetooth.begin(9600);
Serial.begin(9600);
Serial.println("Inicializando...");
// Configura os pinos dos LEDs como saída
pinMode(ledSens1, OUTPUT);
pinMode(ledSens2, OUTPUT);
pinMode(ledLeit, OUTPUT);
// Inicia a biblioteca DallasTemperature
sensors.begin();
// Procura por sensores no barramento
numSensors = sensors.getDeviceCount();
Serial.print("Número de sensores encontrados: ");
Serial.println(numSensors);
// Armazena os endereços dos sensores encontrados
for (int i = 0; i < numSensors && i < MAX_SENSORS; i++) {
if (sensors.getAddress(sensorAddresses[i], i)) {
Serial.print("Sensor ");
Serial.print(i + 1);
Serial.print(" encontrado com endereço: ");
printAddress(sensorAddresses[i]);
Serial.println();
} else {
Serial.print("Sensor ");
Serial.print(i + 1);
Serial.println(" não encontrado.");
}
}
}
void loop() {
trocaDados = "";
// Solicita leitura de temperatura de todos os sensores
sensors.requestTemperatures();
// Verifica a presença dos sensores e acende os LEDs correspondentes
if (sensors.getAddress(sensorAddresses[0], 0)) {
digitalWrite(ledSens1, HIGH);
} else {
digitalWrite(ledSens1, LOW);
}
if (sensors.getAddress(sensorAddresses[1], 1)) {
digitalWrite(ledSens2, HIGH);
} else {
digitalWrite(ledSens2, LOW);
}
// Exibe as temperaturas lidas
for (int i = 0; i < numSensors && i < MAX_SENSORS; i++) {
float endTemp = sensors.getTempC(sensorAddresses[i]);
if (endTemp > -55 && endTemp < 200) {
Serial.print("Temperatura do Sensor ");
Serial.print(i + 1);
Serial.print(": ");
Serial.print(endTemp);
Serial.println(" °C");
trocaDados += String(endTemp, 2);
if (i != numSensors - 1) {
trocaDados += ",";
}
}
}
Serial.println(trocaDados);
bluetooth.println(trocaDados);
// Acende o LED de leitura durante a leitura
digitalWrite(ledLeit, LOW);
delay(100);
digitalWrite(ledLeit, HIGH);
}
// Função para imprimir o endereço de um sensor
void printAddress(DeviceAddress deviceAddress) {
for (uint8_t i = 0; i < 8; i++) {
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
Can someone help me to fix those mesures?
QTA00.aia (6.4 KB)