Go Down

Topic: 433mhz ontvangen en verzenden tegelijk (klikaanklikuit) (Read 4092 times) previous topic - next topic

aardschok

Ik heb een Arduino uno die via 433mhz een signaal van een Arduino Nano krijgt. En als hij dit signaal ontvangt, zet hij een lamp aan. Nu bleek dat als de Nano een signaal stuurt, de Uno dus ontvangt, dat het niet mogelijk is (ook niet met originele KAKU afstandsbediening) om de lamp aan te krijgen.

Om die reden heb ik een delay ingebouwd. Toch gaat de lamp niet aan. De fullcolor led is mijn "debug component". Die wordt dus wel netjes wit op het juiste moment.

Als ik de regel in de setup zet, gaat de lamp wel aan. Dus die klopt sowieso.

Code: [Select]


// Include VirtualWire library
#include <VirtualWire.h>
#include <NewRemoteTransmitter.h>

// Create a transmitter on address 123, using digital pin 11 to transmit,
// with a period duration of 260ms (default), repeating the transmitted
// code 2^3=8 times.
NewRemoteTransmitter transmitter(10302762, 13, 255, 3);
// Pins definition
const int led_pin = 13;
const int receive_pin = 2;
int pinSpeaker = 10;


void setup()
{

  Serial.begin(9600); // Debugging only
  // Initialise the IO and ISR
  vw_set_rx_pin(receive_pin);
  vw_setup(4000); // Transmission rate
  // Start the receiver PLL
  vw_rx_start();
  // Set LED pin and Buzzer
  pinMode(led_pin, OUTPUT);
  pinMode(pinSpeaker, OUTPUT);
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;

  // Check if a message was received
  if (vw_get_message(buf, &buflen))
  {
    if (buf[0] == '1')
    {
      Serial.println("Motion detected!");
      analogWrite (11, 255);
      analogWrite (10, 0);
      analogWrite (9, 0);
      delay(5300);
      analogWrite (11, 0);
      analogWrite (10, 0);
      analogWrite (9, 255);

      verZenden();
    }
   
  }
}

// duration in mSecs, frequency in hertz
void verZenden()
{

  transmitter.sendUnit(1, true);
        analogWrite (11, 255);
      analogWrite (10, 255);
      analogWrite (9, 255);
}

MAS3

Hoi aardschok, welkom.

Je hebt hierboven netjes een situatie beschreven en correct de code geplaatst.
Maar je bent vergeten je vraag te stellen.
Ik heb geen idee van KAKU installaties dus kan je niet op specifieke fouten daarin wijzen.

Je zegt dat als je de regel in setup zet, de lamp wel aan gaat.
Welke regel is dat dan ?
Toevallig deze :
Code: [Select]
  transmitter.sendUnit(1, true);

Je zegt ook dat de LED wit word.
Daarmee bereik je dus verZenden, want daar word ie wit gemaakt.
Ervoor word ie eerst lang rood en dan heel kort blauw als ik het goed heb (ligt eraan hoe je 'm bedraad hebt).

Wanneer de KAKU afstandbediening ook niet meer werkt, dan moet er iets anders aan de hand zijn.
Je hele draadloze verbinding is ineens niet meer beschikbaar als er een signaal ontvangen is.
Komt dat misschien omdat je Nano het signaal niet eenmalig stuurt, maar continu een signaal aan het zenden is, waardoor de draadloze verbinding al in gebruik is ?
Twee dingen gelijktijdig verzenden op hetzelfde kanaal gaat natuurlijk niet werken.
Dus daar zou ik eerst even naar kijken.
Zet anders met de Nano de module even uit zodat je weet dat dat ding niet continu staat te zenden (zit er geen lampje op dat je kunt zien wat ie doet ?).
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

aardschok

Hi MAS3!

Bedankt voor je reactie. Mijn vraag is "Waarom gaat de lamp niet aan?".

Als ik die regel inderdaad in de setup zet, gaat de lamp netjes aan:
Code: [Select]
  transmitter.sendUnit(1, true);

De LED wordt inderdaad netjes wit. Daarvoor rood en kort blauw inderdaad (om te zien of de delay werkt). Je hebt hem helemaal door  ;)

De KAKU afstandsbediening werkt juist wel als de lamp wit is. Dus dan zou je zeggen dat de Arduino dat ook moet kunnen?

Heb je een idee hoe ik kan zien of hij continu een signaal aan het zenden is?

MAS3

Hmm.

Ik heb dus geen idee van KAKU, vroeg me af of je activiteit kunt zien op de zender aan de Nano.

Nu ik je code nog een keer doorkijk, vraag ik me af of je misschien erg kort na elkaar probeert te zenden, en of dat misschien fout gaat.
Er word maar heel weinig gedaan daar, en de code zou wel eens heel snel na elkaar (honderden, duizenden malen per seconde) kunnen besluiten dat er een lamp moet worden ingeschakeld.
Wanneer de library het zou toelaten een nieuwe code te starten terwijl de huidige nog niet voltooid is, krijg je dus problemen.
Een beetje library zou dat dus ook niet mogen toelaten, maar ja...

Daarom kun je eens proberen om na het aanroepen van verZenden, een korte delay() in te bouwen.

Als het dan wel werkt, kun je de code nog fatsoeneren, want het gebruik van delay() is voor dit soort zaken zonde van kostbare tijd.
Dat fatsoeneren kun je doen door niet alleen te gaan zenden als je ziet dat er iets beweegt, maar ook alleen als je ziet dat er daarvoor niets bewoog.
Je kunt alsnog kijken of je ervoor wel wat zag, en dan dus een timer opnieuw starten.
Op het moment dat je niets meer ziet bewegen word dan de timer niet meer opnieuw gestart, en zal dus uiteindelijk verlopen.
En de verlopen timer zet dan dus de lamp weer uit.
Ook dit deel van de gefatsoeneerde code zal heel vaak per seconde doorlopen worden, wanneer je delay() afzweert.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

aardschok

Als ik deze regel
            transmitter.sendUnit(1, true);


in setup BOVEN "  vw_setup(4000); // Transmission rate" zet, gaat de lamp aan. Als ik het eronder zet niet. Hier wordt het dus door veroorzaakt. Geen idee wat ik ermee kan helaas.

aardschok

Toch niet! Het ging om
  vw_rx_start();



Dus voor ik de regel verstuur in de void verZenden, doe ik   vw_rx_stop();

FIXED!!

MAS3

Mooi.

Goed dat je de oplossing ook post, daar kunnen anderen ook mee geholpen zijn.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up