Parfaitement novice dans le domaine, je m'y mets pour pouvoir pratiquer dans quelques temps avec mes élèves. Ce qui m’intéresse, via Arduino, c'est de faire de l’acquisition de données. Rien de plus.
Afin de faire un suivi de température, j'ai suivi le tutoriel : https://www.carnetdumaker.net/articles/mesurer-une-temperature-avec-un-capteur-1-wire-ds18b20-et-une-carte-arduino-genuino/
Mais les donnée que me rend l'IDE sont inutilisable. Le monteur série me rend des caractères type : vř⸮!⸮⸮⸮)⸮&⸮"⸮v⸮&⸮&⸮⸮"⸮v⸮⸮⸮&⸮&⸮&⸮&⸮⸮)⸮<v(⸮<td⸮d
Je ne sais même pas si ça vient de mon code (validé par l'IDE) ou d'ailleurs. Pour comparer, j'ai essayé un capteur TMP, et dans ce cas tout fonctionne bien.
Je joins le code au cas où :
#include <OneWire.h>
#define PINRELAIS 7
const byte BROCHE_ONEWIRE = 7;
enum DS18B20_RCODES {
READ_OK,
NO_SENSOR_FOUND,
INVALID_ADRESS,
INVALID_SENSOR
};
OneWire ds(BROCHE_ONEWIRE);
void setup() {
Serial.begin(115200) ;
}
void loop(){
float temperature;
if(getTemperature(&temperature, true)!=READ_OK){
Serial.println(F("Erreur de lecture du capteur"));
}
Serial.print(F("Temperature : "));
Serial.print(temperature, 2);
Serial.write(176);
Serial.write('C');
Serial.println();
}
byte getTemperature(float *temperature, byte reset_search){
byte data[9], addr[8];
if (reset_search) {
ds.reset_search();
}
if (!ds.search(addr)){
return INVALID_ADRESS;
}
if (addr[0] != 0x28) {
return INVALID_SENSOR;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(800);
ds.reset();
ds.select(addr);
ds.write(0xBE);
for (byte i = 0; i < 9; i++){
data[i] = ds.read();
}
*temperature = (int16_t) ((data[1] << 8) | data[0]) * 0.065;
return READ_OK ;
}