Rf433,
LotPrisesRf433,
projet fou:
mettre un capteur devant la diode
itérer la commande tant que capteur éteint
rappel: écoute quand on dispose de la té"lécommande, c'est plus rapide:
Rf433Dump
lu:
les deux derniers bits sont 01 pour allumer 00 pour éteindre
les 8 suivant sont le "code prise"
les 14 premiers sont constants (pour mon jeu)
chaque état (0,01, float) est transmis sur une trame de longueur = 32 oscillations
0: court-court
1: long long
fl: court-long
paradoxe: 12 pattes, mais trois états
et drôle allume salon comporte des "11"
feuille de route!
le programme s'arrête quand la lanpe s'allume!
mieux:
- commencer par cherche un code qui éteigne
- balayer et si allumé éteindre avec le code ci dessus
// avec NBSTATE=2: 10 minutes sans envoi de code
#include "RCSwitch.h"
RCSwitch mySwitch = RCSwitch();
#define PROF 12
#define NBSTATE 2 // GAFFE: 2: 4096 codes, 3: 500000! it is huge!
#define RF433PIN 2
#define SENSORD 3 //
#define SENSORGRND 4 //
#define SENSORVCC 5
#define DELAY 100
#define PRT false // print each try
// exceptions:
unsigned long Lampe_bureau_ON = 1381460;
unsigned long Lampe_bureau_OFF = 1381457;
unsigned long Lampe_salon_ON = 1381700;
unsigned long Lampe_salon_OFF = 1381697;
int b[PROF]; // 0, 1 ou 2
int found[PROF];
int mask[PROF];
int count;
char state[3]={'0','F','1'}; // '1' used only if NBSTATE=3!
int num[3]={0,1,3}; // 3 used only if NBSTATE=3!
long big=0;
long l=0;
int prev; // previous state of light
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(SENSORD,INPUT);
pinMode(SENSORGRND,OUTPUT);digitalWrite(SENSORGRND,LOW);
pinMode(SENSORVCC,OUTPUT);digitalWrite(SENSORVCC,HIGH);
// Emetteur connecté au pin #SENSORD de l'Arduino
mySwitch.enableTransmit(RF433PIN); // pin emetteur
mySwitch.setRepeatTransmit(2); // increase will slow process!
Serial.println("Force brute! V 0.001");
for (int bis=0;bis<2;bis++){ // two rounds to handle any initial state
brut('2','D');
Serial.println("\n----------------------");
Serial.print("elapsed (\"): ");Serial.println(millis()/1000);
Serial.print("nb de copdes: ");Serial.println(count);
Serial.print("loops: ");Serial.println(big);
}
}
void do1(bool first,bool prt,char ch,char atod){
if (!first){
l=0;
for (int i=0;i<PROF;i++){
l=l*4+num[b[PROF-1-i]];
}
// exceptions, do not disturb my home brewery!
if (l== Lampe_bureau_ON) return;
if (l== Lampe_bureau_OFF) return;
if (l== Lampe_salon_ON) return;
if (l== Lampe_salon_OFF) return;
//
mySwitch.send(l, PROF*2);
delay(DELAY);
}
int act= digitalRead(SENSORD);
if (act!=prev || prt || first) {
Serial.print(ch);
Serial.print(atod);
if (act) Serial.print(" Off ") ;else Serial.print(" On ");
Serial.print(" ");
for (int i=0;i<PROF;i++){
if (first) Serial.print("-");
else Serial.print(state[b[PROF-1-i]]);
}
Serial.print(" ");
Serial.print(l);
Serial.print(" at ");
Serial.print(millis()/1000);
Serial.print("\" #: ");
Serial.print(big);
Serial.println();
// memoriser
if (count==0) for (int i=0;i<PROF;i++) found[i]=b[i];
if (act!=prev){
for (int i=PROF-1;i>=0;i--) if (found[i]!=b[i]) mask[i]=false;
count=count+1;
prev=act;
}
for (int i=PROF-1;i>=0;i--) Serial.print(found[i]); Serial.println("<---- found");
for (int i=PROF-1;i>=0;i--) Serial.print(b[i]); Serial.println("<---- b");
for (int i=PROF-1;i>=0;i--) Serial.print(mask[i]); Serial.println("<---- mask");
delay(2000);
}
}
void brut (char channel,char atod){
long p=1;
for (int i=0;i<PROF;i++){
b[i]=0;
mask[i]=true;
p=p*NBSTATE;
}
Serial.print("#: ");
Serial.println(p);
big=0;
int n=0;
do1(true,false,channel,atod);
while (true){
if (big>=p) {
Serial.println("----");
for (int i=PROF-1;i>=0;i--) Serial.print(found[i]); Serial.println("<---- found");
for (int i=PROF-1;i>=0;i--) Serial.print(b[i]); Serial.println("<---- b");
for (int i=PROF-1;i>=0;i--) Serial.print(mask[i]); Serial.println("<---- mask");
for (int i=0;i<PROF;i++){
if (mask[i]) Serial.print(found[i]);
else Serial.print("?");
}
Serial.println(" <--- Id");
return;
}
big=big+1;
do1(false,PRT,channel,atod);
b[n]=b[n]+1;
if (b[n]>=NBSTATE) {
// Serial.print("le bit ");Serial.print(n);Serial.print(" a atteint decimal ");Serial.println(NBSTATE-1);
int j=0;
while (b[j]>=NBSTATE-1 && j<PROF ) { // out of dim b!!
b[j]=0;
// Serial.print("le bit ");Serial.print(j);Serial.print(" mis a ");Serial.println(0);
j=j+1;
}
int prof=PROF;
if (j==prof) {
Serial.println("termine");
return;
}
b[j]=b[j]+1;
n=0;
}
}
}
void loop() {
big=big+1;
delay(1000);
}