AntiGuide: Rf433ForceBrute



PagePrincipale :: DerniersChangements :: ParametresUtilisateur :: Vous êtes 216.73.216.176 :: Signaler un abus :: le: 20250719 09:43:08
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:

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