rc-switch Variablenproblem

Hallo,

möchte mir mit den 433 MHz Sende und Empfängermodulen eine Fernsteuerung bauen. Mein Empfängercode sieht zur Zeit so aus:

Servo HochServoRechts;
Servo HochServoLinks;
RCSwitch mySwitch = RCSwitch();

void setup()
{
  VorServoRechts.attach(5);
  VorServoLinks.attach(6);
  HochServoRechts.attach(7);
  HochServoLinks.attach(8);
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() 
{
  if (mySwitch.available())
  {
    Serial.print("Empfangen: ");
    Serial.print( mySwitch.getReceivedValue() );
    Taste = (mySwitch.getReceivedValue);
    if (Taste == 1)
     {
       vorwaerts;
     }
  }
  mySwitch.resetAvailable();
}

void vorwaerts()
{
  HochServoRechts.write(HochServoRechtsPosOben);
  HochServoLinks.write(HochServoLinksPosOben);
  delay(200);
  VorServoRechts.write(VorServoRechtsPosVorn);
  VorServoLinks.write(VorServoLinksPosVorn);
  delay(200);
}

Beim Kompilieren bekomme ich diese eigenartige Fehlermeldung:

cannot convert 'RCSwitch::getReceivedValue' from type 'long unsigned int (RCSwitch::)()' to type 'long int'

Ich benutze die RC-Switch libary "rc_switch-2,6,2"

Jemand eine Idee warum ich den empfangenen Wert nicht der Variablen "Taste" übergeben kann?

Gruß Gerald

Fehlt das was vom Sketch? Als was ist Taste definiert?

Hallo,

“Taste” soll die Variable sein, die den sketch steuert. Der Name bezieht sich aus die Tasten der Fernsteuerung, in die eine 3x4 Tastatur verbaut ist. Der Senderscetch sieht bisher so aus:

#include <RCSwitch.h>

const byte keypadPin = A0;
int val = 0;

RCSwitch mySwitch = RCSwitch();

void setup()
{
  Serial.begin(9600); 
  pinMode(keypadPin, INPUT_PULLUP);
  mySwitch.enableTransmit(12);  // Der Sender wird an Pin 12 angeschlossen
}

void loop() 
{
    val = analogRead(keypadPin);
    if ((val > 400)  &&  (val <=500))
    {
      val = 12;  //bzw 11  490 
    }                         
    else if ((val > 500)  &&  (val <=525))
    {
      val = 11;  // bzw. 0  510
    } 
    else if ((val > 525) &&  (val <= 555 ))
    {  
      val = 10;  //540
    }  
    else if ((val > 555) &&  (val <= 585))
    { 
      val = 9;  //570 
    } 
    else if ((val > 585) &&  ( val <=620))
    {
      val = 8;  //600 
    }
    else if ((val > 620) &&  ( val <=660))
    {
      val = 7;  //640
    }
    else if ((val > 660) &&  ( val <=705))
    {
      val = 6;  //680
    }
    else if ((val > 705) &&  ( val <=760))
    {
      val = 5;  //730 
    }
    else if ((val > 760) &&  ( val <=820))
    {
      val = 4;  //790
    }
    else if ((val > 820) &&  ( val <=890))
    {
      val = 3;  //850 
    }
    else if ((val > 890) &&  ( val <=976))
    {
      val = 2;  //930 
    }
    else if ((val > 976) &&  ( val <=1045))
    {
      val = 1; //1023 
    }
    
  mySwitch.send(val, 24);
  Serial.println(val);
 
   
 
}

Aber das hat mit meinem Problem nichts zu tun. Das Kompilieren des Empfängerprogramms klappt nicht.

Gruß
Gerald

Wenn wir dir helfen sollen, muss du uns den kompletten Empfänger-Sketch liefern.

So schmeißt er noch weitere Fehler.

Wie schon dir geschrieben wurde, "Taste" ist nicht definiert.

Und das hier ist falsch:

Taste = (mySwitch.getReceivedValue);

Muss so sein:

Taste = mySwitch.getReceivedValue();

Weitere Hilfen, wenn du mehr lieferst.

Hallo,

vielen Dank, jetzt klappt die Kompilierung.

Mehr scetch habe ich im Moment noch nicht. wollte mit schrittweise voran arbeiten. Ziel ist es, am Empfänger verschiedene Unterprogramme zu starten abhängig davon welche Taste am Sender zuletzt gedrückt wurde. Am Ende wird damit ein kleines Ruderboot mit 4 Servos (linkes Ruder vor und zurück, linkes Ruder hoch runter, rechtes Ruder vor und zurück, rechtes Ruder hoch runter) gesteuert. Die Unterprogramme sind dann z.B.: Vorwärts, Rückwärts, Linksrum, Rechtsrum).

Gruß Gerald

Pauli58: Hallo,

vielen Dank, jetzt klappt die Kompilierung.

Mehr scetch habe ich im Moment noch nicht.......

Schön das es bei dir funktioniert.

Der Empfänger-Sketch ist wie schon mehrfach geschrieben, unvollständig. Damit mitlesende kein Problem mit deinem Sketch haben, solltest du den unbedingt noch vollständig liefern und den fehlerhaften austauschen. Oder möchtest du, das andere User sich darüber ärgern ?

Oh, jetzt habe ich erst gesehen was du meinst (kann nicht schaden seine eigenen Posts zu kontrollieren.
Hatte beim kopieren nicht den gesamten sketch erwischt.
Hier nun der jetzige Stand des Empfänger-scetches:

#include <RCSwitch.h>
#include <Servo.h>

int VorServoRechtsPosVorn = 60;
int VorServoRechtsPosHinten = -60;
int VorServoLinksPosVorn = 60;
int VorServoLinksPosHinten = -60;
int HochServoRechtsPosOben = 60;
int HochServoRechtsPosUnten = -60;
int HochServoLinksPosOben = 60;
int HochServoLinksPosUnten = -60;

long Taste=0;

Servo VorServoRechts;
Servo VorServoLinks;
Servo HochServoRechts;
Servo HochServoLinks;
RCSwitch mySwitch = RCSwitch();

void setup()
{
  VorServoRechts.attach(5);
  VorServoLinks.attach(6);
  HochServoRechts.attach(7);
  HochServoLinks.attach(8);
  Serial.begin(9600);
  mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
}

void loop() 
{
  if (mySwitch.available())
  {
    Serial.print("Empfangen: ");
    Serial.print( mySwitch.getReceivedValue() );
    Taste = mySwitch.getReceivedValue();
    if (Taste == 1)
     {
       vorwaerts;
     }
  }
  mySwitch.resetAvailable();
}

void vorwaerts()
{
  HochServoRechts.write(HochServoRechtsPosOben);
  HochServoLinks.write(HochServoLinksPosOben);
  delay(200);
  VorServoRechts.write(VorServoRechtsPosVorn);
  VorServoLinks.write(VorServoLinksPosVorn);
  delay(200);
}

Danke nochmal
Gerald

Alles klar, danke auch für den kompletten Sketch.

   if (Taste == 1)
     {
       vorwaerts;
     }

Das tut nichts. Du willst vermutlich die Funktion aufrufen.

   vorwaerts ();

michael_x: Das tut nichts. Du willst vermutlich die Funktion aufrufen.

   vorwaerts ();

Ein Grund die Warnungen einzuschalten. ;)

Somewhere\ServoRC\ServoRC.ino: In function 'void loop()':

Somewhere\ServoRC\ServoRC.ino:40:17: warning: statement is a reference, not call, to function 'vorwaerts' [-Waddress]

        vorwaerts;

                 ^