Bonsoir à toutes et tous,
Je viens d'acquérir un Arduino Mega 2560 officiel.
Je suis en complet apprentissage au niveau électronique et programmation ( quelque petite notion en programmation C++). J'ai réalisé grâce aux exemples du logiciel arduino et l'aide de skywodd (sur sin site) une refonte d'un programme mettant en place un capteur DS18B20 un écran LCD et un bouton + la commande d'une prise RF433Mhz. Personnellement, j'en ai c***z comme un bœuf mais j'y suis arriver par force, courage et patience surtout :@ arghhh enfin pas totalement, car le bouzin ne marche pas bien droit dans ses bottes.
Dans un premier temps voici mon code crée:
#include <OneWire.h>
#include <LiquidCrystal.h>
#include <RCSwitch.h>
#define DS18B20 0x28
#define BROCHE_ONEWIRE 7
RCSwitch mySwitch = RCSwitch();
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
OneWire ds(BROCHE_ONEWIRE);
const int ledfroid = 8;
const int ledchaud = 9;
const int ledecran = 52;
const int bouttonecran = 53;
int etatboutton = 0;
boolean getTemperature(float *temp)
{
byte data[9], addr[8];
if (!ds.search(addr))
{
ds.reset_search();
return false;
}
if (OneWire::crc8(addr, 7) != addr[7])
return false;
if (addr[0] != DS18B20)
return false;
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();
*temp = ((data[1] << 8) | data[0]) * 0.0625;
return true;
}
void setup()
{
lcd.begin(16, 2);
lcd.print("Temp:");
pinMode (ledfroid, OUTPUT);
pinMode (ledchaud, OUTPUT);
pinMode (ledecran, OUTPUT);
mySwitch.enableTransmit(21);
mySwitch.setPulseLength(320);
mySwitch.setProtocol(1);
}
void loop()
{
float temp;
if(getTemperature(&temp))
{
lcd.setCursor(6, 0);
lcd.print(temp);
lcd.setCursor(0, 1);
lcd.print("Je t'aime pupuce");
if(temp >= 30)
{//activation ledchaud & prise B (ventilateur)
digitalWrite(ledchaud, HIGH);
digitalWrite(ledfroid, LOW);
mySwitch.switchOn("11001", "0100");
delay (100);
mySwitch.send(332113, 24);
delay (100);
mySwitch.send("000001010001000101010001");
delay (100);
mySwitch.sendTriState("00FF0F0FFF0F");
delay (100);
}
else
{//activation ledfroid & desactivation prise B
digitalWrite(ledchaud, LOW);
digitalWrite(ledfroid, HIGH);
mySwitch.switchOff("11001", "0100");
delay (100);
mySwitch.send(332116, 24);
delay (100);
mySwitch.send("000001010001000101010001");
delay (100);
mySwitch.sendTriState("00FF0F0FFF0F");
}
}
{//allumer ecran lcd pendant 10 secondes
etatboutton = digitalRead (bouttonecran);
if (etatboutton == HIGH)
{
digitalWrite (ledecran, HIGH);
delay (10000);
}
else
{
digitalWrite (ledecran, LOW);
}
}
}
Alors voici mes problèmes:
1= je veut que la commande de ma prise soit en marche si plus de 30°C et éteinte si moins de 30°C ==> mais je dois avoir fait une erreur car ma prise reste allumer même si consigne de température est plus de 30 ou moins de 30. (enfin ma commande RF433Mhz ne marche point) en revanche mes LED fonctionne bien en fonction de la temp.
2= je veut que la LED de l’écran LCD s'allume pendant 10 secondes après appui sur un bouton ==> mais mon delay bloc tout pendant 10 secondes ( surtout acquisition de température)
3= l'ensemble est beaucoup beaucoup trop long ... actualisation de la température > à 5sec (au lieu de <1sec) etc...
enfin ça ne fonctionne pas comme je le voudrait alors, Serait-il possible de m'orienter sur une solution pour remédier à tout ceci s'il vous plait afin que je comprenne car la je sèche trop.
je vous remercie d’ores et déjà pour vôtre aide que vous m'apporterez
cordialement,
VISIVIC