viky
par Mattéo électrored
code du piano:
#include <VirtualWire.h> // on initialise la librairie virtualwire qui permet la reception de données en 433 mhz
#include <EEPROM.h> // on aura besoin de l'eeprom juste pour stocker l'etat du mode automatique
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
int etatPiano;
int value;
int trig = 4; //pin trig de l'ultrason
int echo = 5; // pin echo de l'ultrason
long lecture_echo;
long cm;
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT); // pin du relais
pinMode(6, OUTPUT);
pinMode(3, OUTPUT); //pin du transistor 2n2222a (qui allume ou eteint l'ultrason)
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
vw_setup(2000);
vw_set_rx_pin(11); //le pin de reception est le 11
vw_rx_start(); // on debute la reception
value = EEPROM.read(500); //l'adresse de l'eeprom qui stock l'etat du mode automatique
digitalWrite(3, HIGH);
}
void loop() {
if (vw_get_message(buf, &buflen))
{
int i;
Serial.println("");
for (i = 0; i < buflen; i++) // on attend de recevoir un message
{
Serial.write(buf[i]);
}
if(strcmp("pon", (char*)buf) == 0){ digitalWrite(8, HIGH); delay(400); digitalWrite(8, LOW); } //si on recois ce message, on allume le piano
if(strcmp("pof", (char*)buf) == 0){ digitalWrite(8, HIGH); delay(2000); digitalWrite(8, LOW); } // si on recois ce message, on eteint le piano
if(strcmp("aon", (char*)buf) == 0){ EEPROM.write(500, 1); } // adresse eeprom 500 = 1 (etat mode automatique allumé)
if(strcmp("aof", (char*)buf) == 0){ EEPROM.write(500, 0); } //adresse eeprom 500 = 0 (contraire)
}
value = EEPROM.read(500);
if(value == 0){
digitalWrite(6, LOW); //si adresse 500 de l'epprom == 0 alors on eteint le temoin du mode automatique
}
if(value == 1){
digitalWrite(6, HIGH); //si adresse 500 de l'epprom == 1 alors on allume le temoin du mode automatique et on allume l'ultrason pour le mode automatique
digitalWrite(trig, HIGH);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
Serial.print("Distancem : ");
Serial.println(cm);
delay(50);
if(cm <= 20 && cm > 0 && etatPiano == 0){
on(); //si on se trouve a moin de 20 cm du piano, on l'allume
etatPiano = 1;
}
if(cm >= 40 && etatPiano == 1){
off(); // si on se trouve a plus de 40cm du piano, alors on l'eteint
etatPiano = 0;
}
if(cm == 0){
digitalWrite(3, LOW);
delay(500); //on redemare l'ultrason puisque si cm = 0 (peu probable puisque on est pas collé au capteur) l'ultrason fait un timeout
digitalWrite(3, HIGH);
}
}
}
void on() {
if(etatPiano == 0){
digitalWrite(8, HIGH);
delay(400); // on démare le piano
digitalWrite(8, LOW);
}
}
void off() {
if(etatPiano == 1){
digitalWrite(8, HIGH);
delay(2000); // on eteint le piano en simulant un appui sur le boutton plus long
digitalWrite(8, LOW);
}
}