first commit
This commit is contained in:
139
Recepteur/Recepteur.ino
Executable file
139
Recepteur/Recepteur.ino
Executable 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
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user