Bonsoir à tous,
Je me lance.
Je tiens à préciser que je débute dans la programmation.
Voilà le projet, j'ai un arduino nano équipé d'une sonde ds18b20 qui envoi une température avec un chiffre après la virgule via une table.
Jusque là tout va bien.
De l'autre côté, j'ai un arduino uno avec un récepteur 433, un écran 20x4 i2c et un relai.
J'arrive à capter la température, l'afficher sur l’écran, mais je n'arrive pas à traiter la variable temp pour faire fonctionner mon relai.
Je suppose que c'est un problème de type de variable mais je suis sec sur le sujet (même après avoir lu des forums sur le sujet).
Je vais poster mon code et j'attends vos coups de bâtons :o
#include <LiquidCrystal_I2C.h>
#include <VirtualWire.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define PINRELAIS 13
void setup()
{
digitalWrite(13, LOW);
// initialise l'afficheur LCD
lcd.begin();
// efface l'ecran et place le curseur en 0,1
lcd.clear();
// allumer retroeclairage
lcd.backlight();
// activer l'affichage
lcd.display();
lcd.setCursor(0,0);
lcd.print("TempExt:"); // print a simple message
Serial.begin(9600);
vw_set_ptt_inverted(true); // Required for DR3100
vw_set_rx_pin(11);
vw_setup(4000); // Bits per sec
vw_rx_start();
}
void loop()
{
int temperaturedeg = 2;
pinMode(PINRELAIS, OUTPUT);
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen)) // Non-blocking
{
lcd.setCursor(8,0);
char temp=0;//mod:tim:added a temporary character
for (int i = 0; i < buflen; i++)
{
temp=(char)buf[i];//mod:tim:convert uint to char
Serial.print(temp); //mod:tim:changed buff[i] to temp here
lcd.print(temp);
}
Serial.println("");
if(buf[0]=='1'){
digitalWrite(17,1); //blink with active rf link
}
if(buf[0]=='0'){
digitalWrite(17,0);
}
if (temp < temperaturedeg) { //Si la température lue est inférieure à la température de consigne, on active le relais
digitalWrite(13, HIGH); //le relais est haut si la consigne de temperature est atteinte
lcd.setCursor(0,1); //on place le curseur de l'écran LCD au début de la 1ère ligne
lcd.print("Mode hors gel");
}
else
{
digitalWrite(13, LOW); // le relais est bas si la consigne de temperature n'est pas atteinte
lcd.setCursor(0,1); //on place le curseur de l'écran LCD au début de la 1ère ligne
lcd.print("Mode normal");
}
}
}
On ne sais pas si ta température est envoyée en binaire ou ascii. Et je ne comprend pas ce que tu veux faire avec ta boucle for (qu'est ce qu'il y a dans buf[0] la température ou '0'/'1' ?).
On ne sais pas si ta température est envoyée en binaire ou ascii. Et je ne comprend pas ce que tu veux faire avec ta boucle for (qu'est ce qu'il y a dans buf[0] la température ou '0'/'1' ?).
Mets ton programme d'émission.
J'ai testé en mettant // devant ces lignes de programme et je n'ai pas eu d'incidence au niveau du resultat à savoir la température qui s'affiche.
Super ca fonctionne
Encore mille mercis car cela fait des semaines que je bute sur cela.
Ma question est : où dois je aller pour apprendre sur ce sujet?