top of page

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);

}
}

bottom of page