Uitgangen bedienen met RF voor elektrisch gordijn

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 1
Geregistreerd: 11 Nov 2018, 22:33

Uitgangen bedienen met RF voor elektrisch gordijn

Berichtdoor MYH1990NL » 11 Nov 2018, 22:55

[*]Beste forumleden,

Ik heb 2 arduino's voor me liggen:
Arduino#1 wil ik graag middels RF een tweetal signalen laten sturen naar arduino#2:
ik wil in arduino #1 via de serial monitor een input geven, deze verzenden naar arduino #2 en op zijn beurt een tweetal output hoog maken (individueel van elkaar).

Nu heb ik onderstaande sketch geschreven, wie ziet het lek??:

zender:
Code: Alles selecteren
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600);   // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

void loop()
{
if(Serial.available()){
 

  char msg = Serial.read();

 
if(msg == 'o'){
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(1000);
    }
   
    if(msg == 'o'){
    driver.send((uint8_t *)msg, strlen(msg));
    driver.waitPacketSent();
    delay(1000);
   
    }    }}



Ontvanger:
Code: Alles selecteren
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile

RH_ASK driver;
// RH_ASK driver(2000, 4, 5, 0); // ESP8266 or ESP32: do not use pin 11 or 2

void setup()
{
    Serial.begin(9600);   // Debugging only
    if (!driver.init())
         Serial.println("init failed");
}

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

    if (driver.recv(buf, &buflen)) // Non-blocking
    if(buf[0]=='o'){  // button 2 ise
                         
    digitalWrite(10,HIGH);    // LED2 HIGH
    delay(1500);
      }else{
    digitalWrite(10, LOW);
      }                 

                     
      if(buf[0]=='d'){ // button 3 ise

   digitalWrite(11,HIGH); // led 3 HIGH
   delay(1500);
      }else{
   digitalWrite(11, LOW);
      }      }


Wat achtergrond info:

Met deze output's wil ik optocouplers een puls van 1500 ms geven.
Deze optocouplers verbinden de "koude contacten" van mijn elektrische gordijn.
De rede waarom ik serieel wil bedienen is omdat ik een GUI gemaakt heb die serieel inputs geeft.(dit werk allemaal prima)

Type zender en ontvanger:
https://nl.aliexpress.com/item/433Mhz-RF-transmitter-and-receiver-link-kit-for-for-Ar-ARM-MCU-WL/1859083729.html?src=google&albslr=201492522&src=google&albch=shopping&acnt=494-037-6276&isdl=y&slnk=&plac=&mtctp=&albbt=Google_7_shopping&aff_platform=google&&albcp=1626925412&albag=63599479084&trgt=296904914040&crea=nl1859083729&netw=u&device=c&gclid=Cj0KCQiAw5_fBRCSARIsAGodhk9JL4734KBaXbVvTjgzysbKP0j82M8dtKGko17HUHqFL5WLtHWY3EUaAjneEALw_wcB&gclsrc=aw.ds


de vraag luidt dus:
Wie kan mij vertellen wat ik over het hoofd zie?

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Uitgangen bedienen met RF voor elektrisch gordijn

Berichtdoor Koepel » 12 Nov 2018, 03:38

Hallo, welkom op dit forum.

Ik zie dat je de "code-tags" voor dit forum hebt gevonden. Dat is mooi.
Als je aan mij vraagt wat je over het hoofd ziet, dan vraag ik me af hoeveel je wilt ;) Ik zal proberen om me een beetje in te houden :roll:

Welk Arduino board gebruik je ? Die zender en ontvanger zijn voor 5V.

Een link naar AliExpress mag je afbreken na de .html op deze manier: https://nl.aliexpress.com/item/433Mhz-RF-transmitter-and-receiver-link-kit-for-for-Ar-ARM-MCU-WL/1859083729.html.

Die ontvanger is afgestemd met een spoel. Wanneer je die ontvanger naast een stuk metaal plaatst, dan staat hij verkeerd afgestemd. Ik gebruik alleen nog maar ontvangers met een X-tal.

Soldeer altijd een antenne aan de zender en ontvanger. Een antenne is een stukje draad van 16 cm, maar elk stuk draad is beter dan geen antenne. Zonder antenne werkt het soms als de zender en ontvanger op een tafel liggen, het bereik is dan soms maar een tiental centimeters.

Druk in de Arduino IDE eens op Ctrl+T. Je tekst layout van de code is een rommeltje. Als dat netjes is, dan zie je meteen dat er iets niet klopt met de '{' en '}' bij een if-statement in de loop() van de ontvanger.

In de zender gebruik je geen buffer, maar een 'char msg'. Dat is één char van 8 bit. Daar kun je geen 'strlen()' op los laten.

In de zender staat er twee keer "msg == 'o'", die andere is misschien een 'd' voor 'dicht' ?

In de ontvanger wordt een led aangezet en 1.5 seconden gewacht. Vervolgens bij de 'else' wordt de led uitgezet. Dat begrijp ik niet.

Welke RadioHead library heb je gebruikt ? Misschien heb je een oude versie zomaar van een website geplukt.
Dit is de officiële pagina: https://www.airspayce.com/mikem/arduino/RadioHead/.

Er zit iets raar in de RadioHead library. De pinnen voor RX, TX en PTT worden altijd gebruikt. Ook al wordt er niets mee gedaan. Je kunt ze dus beter alle drie aan pinnen toekennen, zodat ze niet in de war raken met pinnen die je gebruikt.
RX staat standaard op pin 11, TX staat standaard op pin 12, PTT staat standaard op pin 10.
Je gebruikt pin 10 en 11 al in de ontvanger, dus dat raakt in de war.
Maak een lijstje van de pinnen die je gebruikt, en kies zelf de pinnen voor de RadioHead library.
Dat lijstje hoort natuurlijk als commentaar in de sketch te staan.

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten