433mhz receiver / manual code transmitting

ik ben op zoek naar een goed werkende sketch die alle signalen op pikt en in de serail monitor laat zien. (zodat ik achter de codes van kaku schakelaars kan komen)

nu ben ik al aardig wat wezen googlen en heb ik een script waarbij je wel de onvangst led ziet gaan knipperen maar hij geeft niks naar de serieele monitor.

iemand enig idee waarom dit niet werkt??
baudrate staat op 9600
heb al op new line geprobeerd en NL en CR

de data van de reciever zit op pin 3

//Test set up for Arduino met Rx 433 ontvanger 
int  ir_pin = 3;                //Rx ingang pin 3  
int led_pin = 13;                //"Klaar om te ontvangen" flag, not needed but nice 
unsigned int a ; 
int v= 0; 
int b= 0; 
int c= 0; 
unsigned int time1 =0; 
unsigned int time =0; 
unsigned long code = 0; 
unsigned int  codea = 0; 
char lettercode;  
unsigned int mystatus[16]; 
unsigned long data[110]; 

int samples[16] ={ 
  0,0x100,0x400,0x500,0x1000,0x1100,0x1400,0x1500,0x4000,0x4100,0x4400,0x4500,0x5000,0x5100,0x5400,0x5500}; 
char mijnstring[6] ={ 
  0,0x20,0x0,0x20,0x3F,0xA,}; //Chr 1 Letter, chr 3 cijfer, char 5 status A Aan U uit 

void setup() { 
  pinMode(led_pin, OUTPUT);        //Klaar om te ontvangen 
  pinMode(ir_pin, INPUT); 
  digitalWrite(led_pin, LOW);        //bog niet klaar 
  Serial.begin(9600); 
} 

void loop() { 
  int key = getIRKey();            //Haal de code 
  delay(80);   
} 

int getIRKey() { 
  int z; 
  digitalWrite(led_pin, HIGH);       //Ok, ik ben klaar voor ontvangst 
 do{  
 a = pulseIn(ir_pin, LOW); 
 }  
while(a >10000);  //Wait for repeat 
 b = getdata();  
  if (b ==0){ //geen errors 
  digitalWrite(led_pin, LOW); 
  decode(16); //decodeer 16 bits 
  codea = codea <<3; // bit shift 3 naar links 
  if  (codea == 0xA000){ //kijk hier naar de bits die altijd aanstaan 
    decode(0);  //decode 8 bits vanaf bit 0 
    convert(codea); //converteer naar letter 
    mijnstring[0] =lettercode; //eerste command 
    decode(8); //decode 8 bits vanaf bit  
    convert(codea); 
    mijnstring[2]=lettercode; //2e command 
    mijnprint();  
    decode2(22); //command aan-uit 
  } 
  else { 
     
    // ik heb signalen gekregen maar niet voor mij bestemd zijn 
    // worden deze herhaald?? 
    time = millis() - time1; 
    if (time > 35000){ 
      v++; 
      Serial.print("niet gevonden "); 
      Serial.println(v); 
      Serial.print("tussenpauze  "); 
      Serial.println(time,DEC); 
    } 
    time1 =millis(); 
  }  
  } 
  else{ 
    // bit errors 
 //    Serial.print("error  "); 
 //     Serial.print(b,HEX); 
  } 
     
} 

int getdata(){ 
  int error=0; 
  for (int i =0 ; i <25; i++) 
  { 
    data[i] = pulseIn(ir_pin,HIGH); 
    if (data[i] < 320 ){ // pulse is te kort 
      error = i; 
      break; 
    } 
  } 
  return error; 
} 
void decode(int stcode) { 
  // converteer 8 samples naar letter 
  codea = 0; 
  for(int i=stcode ;i < stcode + 8;i++) { 
    codea = codea >> 1;         
    if (data[i] < 1000) 
    {       
      // nothing at the moment 
    } 
    else { 
      codea = codea + 0x8000; 
    } 
  } 
} 

void decode2(int stcode) { 
  mijnstring[4]=0x3F; 
  codea = 0; 
  for(int i=stcode ;i < stcode+1;i++) { 
    codea = codea >> 1;         
    if (data[i] < 1000) 
    {       
      mijnstring[4]=0x55; 
      status(20); 
    } 
    else { 
      codea = codea + 0x8000; 
      mijnstring[4]=0x41; 
      status(21); 
    } 
  } 
} 

char convert(int mijnnummer){ 
  for (int i =0; i<16; i++){ 
    if (samples[i]== mijnnummer){ 
      lettercode = i +0x41; 
    } 
  } 
} 
void mijnprint(){ 
  for (int i =0; i<6; i++){ 
    Serial.print(mijnstring[i]); 
  } 
} 

void status(int x){ 
  int z; 
  c=01;  
  b =(mijnstring[2]-0x41); 
  z =(mijnstring[0]-0x41); 
  c =  c << b; 
  if(x ==21){ 
    mystatus[z] = mystatus[z]| c;    
  } 
  else { 
    c = ~c; 
    mystatus[z] = mystatus[z] & c; 
  } 
  Serial.println(mystatus[z],BIN); 
} 

void printstatus(){ 
  for (int i =0; i <16; i++) 
    Serial.println(mystatus[i],BIN); 
}

Als je de KlikAan-KlikUit schakelaars wilt besturen kun je gewoon gebruik maken van RemoteSwitch library. Ik gebruik die en het werkt als een tierelier....Ik gebruik die met de Action Switch (3 voor 10- euri). Zie: http://www.verelec.nl/?page_id=437
Dit project is met een ATTINY84 gedaan.

Ik denk dat er een foutje staat in jou repley

ATTINY84

inplaats van ATTNY84 (waar de I ontbreekt?)
(en als ik verkeerd ben, dikke verontschuldigingen)

Verder een zeer mooi gegeven.

Aangepast. Thanks

thanks ik heb de remoteswitch aan de praat.

kan je ook de codes die je ontvangt via je serial monitor gelijk weer versturen?

Als je wat helderder uitlegt wat je bedoeld dan kunnen we een duidelijk antwoord geven. :grin:

ik wil eigenlijk een sketch hebben waarbij als je via de serial monitor A drukt dat hij een code (472418) verstuurt naar mijn 433mhz zender (pin 11)

en als ik B druk dat hij een andere code (472416) verzend naar mijn 433mhz zender (pin 11)

dit zijn codes van klik aan klik uit

Ik denk dat er zat voorbeelden zijn om een Serial te lezen. En voor de remote switch heb je 2 functies voor de KAKU:

		/**
		* Send a on or off signal to a device.
		*
		* @param address	addres (dial switches in remote). Range [A..P] (case sensitive!)
		* @param group	Group to switch. Range: [1..4]
		* @param device	Device to switch. Range: [1..4]
		* @param on	True, to switch on. False to switch off,
		*/
		void sendSignal(char address, unsigned short group, unsigned short device, boolean on);
		
		/**
		* Send a on or off signal to a device.
		*
		* @param address	addres (dip switches in remote). Range [A..P] (case sensitive!)
		* @param device	device (dial switches in remote). Range [1..16]
		* @param on	True, to switch on. False to switch off,
		*/
		void sendSignal(char address, unsigned short device, boolean on);

Daar staan gelijk de parameters aangegeven die je moet invullen. Je zal dus dat 6 cijferig getal moeten opsplitsen in een groep/adres of adres/apparaat.

bedankt hier ga ik even wat mee proberen.

serial lezen is geen probleem maar het verzenden naar de 433mhz kom ik nog niet uit.
ik kan trouwens nergens voorbeelden vinden ook al heb ik al echt veel op google gezocht.

kom er helaas nog steeds niet uit kan iemand mij een klein voorzetje / voorbeeldje aan leveren waar ik op verder kan breien??

ik heb nu een vaste waarde die hij moet gaan versturen.
als ik deze b.v. zo zet.

(omgebouwde retransmite code)

#include <RemoteReceiver.h>
#include <RemoteTransmitter.h>

int Daan = 472418; //vaste waarde

void setup() {
   Serial.begin(9600);
  
  // See example Show_received_code for info on this
  RemoteReceiver::init(0, 3, retransmitter);
}

void loop() {
}

void retransmitter(unsigned long receivedCode, unsigned int period) {  
  // Disable the receiver; otherwise it might pick up the retransmit as well.
  Serial.print("Data:");
  Serial.println(receivedCode);
  
  RemoteReceiver::disable();
  
  
  
  // Need interrupts for delay()
  interrupts();
    
  // Wait 5 seconds before sending.
  delay(5000);

  // Retransmit the signal 8 times ( == 2^3) on pin 11. Note: no object was created!
  RemoteTransmitter::sendCode(11, ('Daan',BIN), period, 3); // was(11, receivedCode, period, 3);
  Serial.print("Data:");
  Serial.println('Daan');
  
  RemoteReceiver::enable();
}

komt er als waarde op mijn serial monitor
data 472416 (mijn opgepikte code)
data 24942 (mijn uitgezonde code??????????)

vreemd.......
die 24942 hoort dan toch 472418 te zijn???
waar ligt dit aan??

Om je wat te helpen:
Wat is de grootste waarde die een int kan bevaten? of een unsigned int? of een long?

een long kan een grotere waarde omvatten als ik het goed heb.

waar ik ook mee zit is dat ik de "unsigned int period" niet echt snap in het verhaal....

Dan zul je verder de code uit moeten zoeken of googelen? wie weet heeft iemand al eerder deze vraag gesteld...

dan kom ik dus nog steed niet verder heb al veel gegoogled maar zonder resultaat..

iig bedankt voor je hulp.

Ik weet niet hoe je googled, maar met "remoteswitch period" vind je dit: RemoteSwitch-arduino-library/RemoteSwitch.h at master · jccprj/RemoteSwitch-arduino-library · GitHub boven aan en daarin staat beschreven over die period. En als het nu al werkt. Gewoon verder afblijven. Of de diepte in gaan en de code verder onderzoeken.
Er moet zelfs nog een uitgebreid artikel zijn die ik ooit vorig jaar heb gelezen. Dus gewoon door googelen.....

bedankt na veel strubbelen werkt het nu eindelijk ik kan dus nu via serial handmatig aan en uit schakelen.
top!

bedankt!

En wat was de oplossing? Dan hebben anderen er ook wat aan. :slight_smile:

ik heb het compleet met een ander script op gepakt :smiley:
maar ik heb weer wat bij geleerd met die period link!

char val; // variable to receive data from the serial port
/*
  Example for different sending methods
 
 // Optional set pulse length.
  // mySwitch.setPulseLength(320);
  
  // Optional set protocol (default is 1, will work for most outlets)
  // mySwitch.setProtocol(2);
  
  // Optional set number of transmission repetitions.
  // mySwitch.setRepeatTransmit(15);
 
  http://code.google.com/p/rc-switch/
  
*/


#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  Serial.println("Serial start");
  
  
  mySwitch.enableTransmit(11);// Transmitter is connected to Arduino Pin #11  
}

void loop() {

  
   if( Serial.available() )       // if data is available to read
  {
    val = Serial.read();         // read it and store it in 'val'
  Serial.print("Data:");
  Serial.println(val);
  }
 
  if( val == 'L')          // if 'H' was received
  {
    mySwitch.send("010100000000000000010101");
    Serial.print("Data:");
    Serial.println("D1 aan");
    
  delay(150);
  } 
   if ( val == 'l')
   { 
    mySwitch.send("010100000000000000010100");
     Serial.print("Data:");
     Serial.println("D1 uit");
     
 delay(150);
  
   }
   
   
 
  delay(1000);
}

ik ben nu weer bezig met de web server hier heb ik een nieuw draadje voor geopend.

alles zo ver werkend alleen van button tot tx pin niet.