first commit

This commit is contained in:
Jérôme Delacotte
2025-03-06 11:15:32 +01:00
commit 7b30d6e298
5276 changed files with 2108927 additions and 0 deletions

139
Recepteur/Recepteur.ino Executable file
View File

@@ -0,0 +1,139 @@
byte pin=2;
boolean bit2[26];// nom de la telecommande
boolean bit2Interruptor[4];//code interrupteur telecommande
// a partir d'ici on = 1 off = 0
void setup()
{
Serial.begin(9600);
buildBool(68,bit2,sizeof(bit2));
buildBool(1,bit2Interruptor,sizeof(bit2Interruptor));
}
void loop()
{
if(Serial.available()>0)
{char val = Serial.read();
if(val=='1')
{
transmit(1,pin,bit2,bit2Interruptor);
delay(300);
transmit(1,pin,bit2,bit2Interruptor);
delay(300);
transmit(1,pin,bit2,bit2Interruptor);
delay(300);
transmit(1,pin,bit2,bit2Interruptor);
delay(300);
Serial.println("on");
}
if(val =='0')
{
transmit(0,pin,bit2,bit2Interruptor);
delay(300);
transmit(0,pin,bit2,bit2Interruptor);
delay(300);
transmit(0,pin,bit2,bit2Interruptor);
delay(300);
transmit(0,pin,bit2,bit2Interruptor);
delay(300);
Serial.println("off");
}
}
}
/*prend en arguement un integer, un tableau et ça longueur-1 ( cad que tab[26] à pour longueur 26 et non 27).C'est pour facilité l'emploi de sizeof
* théoriquement, il faudrait donc marquer ( interger, array,sizeof(array) )
* retourne un tableau de boolean avec le nombre integer en binaire
*/
void buildBool(long integer,boolean array[],byte length){
Serial.println("entering buildBool");
for(int i = 0; integer!=0 ;i++){
if(integer<pow(2,i)){
array[length-i]=1;
integer = integer-(pow(2,(i-1)));
i = 0;
}
}
}
//Envois d'une pulsation (passage de l'etat haut a l'etat bas)
//1 = 310µs haut puis 1340µs bas
//0 = 310µs haut puis 310µs bas
void sendBit(boolean b,byte pin) {
if (b) {
digitalWrite(pin, HIGH);
delayMicroseconds(310); //275 orinally, but tweaked.
digitalWrite(pin, LOW);
delayMicroseconds(1340); //1225 orinally, but tweaked.
}
else {
digitalWrite(pin, HIGH);
delayMicroseconds(310); //275 orinally, but tweaked.
digitalWrite(pin, LOW);
delayMicroseconds(310); //275 orinally, but tweaked.
}
}
//Envoie d'une paire de pulsation radio qui definissent 1 bit réel : 0 =01 et 1 =10
//c'est le codage de manchester qui necessite ce petit bouzin, ceci permet entre autres de dissocier les données des parasites
void sendPair(boolean b,byte pin) {
if(b)
{
sendBit(true,pin);
sendBit(false,pin);
}
else
{
sendBit(false,pin);
sendBit(true,pin);
}
}
//Fonction d'envois du signal
//recoit en parametre un booleen définissant l'arret ou la marche du matos (true = on, false = off)
void transmit(boolean onOff,byte pin,boolean bit2[],boolean bit2Interruptor[])
{
int i;
// Sequence de verrou anoncant le départ du signal au recepeteur
digitalWrite(pin, HIGH);
delayMicroseconds(275); // un bit de bruit avant de commencer pour remettre les delais du recepteur a 0
digitalWrite(pin, LOW);
delayMicroseconds(9900); // premier verrou de 9900µs
digitalWrite(pin, HIGH); // high again
delayMicroseconds(275); // attente de 275µs entre les deux verrous
digitalWrite(pin, LOW); // second verrou de 2675µs
delayMicroseconds(2675);
digitalWrite(pin, HIGH); // On reviens en état haut pour bien couper les verrous des données
// Envoie du code emetteur (272946 = 1000010101000110010 en binaire)
for(i=0; i<26;i++)
{
sendPair(bit2[i],pin);
}
// Envoie du bit définissant si c'est une commande de groupe ou non (26em bit)
sendPair(false,pin);
// Envoie du bit définissant si c'est allumé ou eteint 27em bit)
sendPair(onOff,pin);
// Envoie des 4 derniers bits, qui représentent le code interrupteur, ici 0 (encode sur 4 bit donc 0000)
// nb: sur les télécommandes officielle chacon, les interrupteurs sont logiquement nommés de 0 à x
// interrupteur 1 = 0 (donc 0000) , interrupteur 2 = 1 (1000) , interrupteur 3 = 2 (0100) etc...
for(i=0; i<4;i++)
{
if(bit2Interruptor[i]==0){
sendPair(false,pin);
}else{
sendPair(true,pin);
}
}
digitalWrite(pin, HIGH); // coupure données, verrou
delayMicroseconds(275); // attendre 275µs
digitalWrite(pin, LOW); // verrou 2 de 2675µs pour signaler la fermeture du signal
}