Forum: Mikrocontroller und Digitale Elektronik Arduino - Werte nur einmal ausgeben


von Teddy B. (ben2jamin)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe ein Problem mit meinem Arduino und den 433 MHZ Sende-und 
Empfangsmodule.

Das Sende-Modul ist auf meinem Arduino UNO angeschlossen.
Das Empfangsmodul auf meinem Arduino MICRO.

Das Senden und empangen funktioniert zwar perfekt, aber ich bekomme 
mehrmals die gleiche Zahl gesendet.
Wenn ich z.B. mit dem Sender die Zahl '1' einmal sende, dann kommt diese 
beim Empfänger so lange an, bis ich mit dem Sender wieder die nächste 
Zahl sende.
Hier mal die beiden Codes:
1
//Sender-Code:
2
3
#include <RCSwitch.h>
4
RCSwitch mySwitch = RCSwitch();
5
6
void setup()
7
{
8
  Serial.begin(9600);
9
  // Transmitter is connected to Arduino Pin #12
10
  mySwitch.enableTransmit(12);
11
12
  // Optional set pulse length.
13
  // mySwitch.setPulseLength(320);
14
15
  // Optional set protocol (default is 1, will work for most outlets)
16
  // mySwitch.setProtocol(2);
17
18
  // Optional set number of transmission repetitions.
19
  // mySwitch.setRepeatTransmit(15);
20
}
21
22
void loop()
23
{
24
  mySwitch.send(1, 24);
25
  Serial.println("1 EINS");
26
27
  delay(500);
28
  mySwitch.send(2, 24);
29
  Serial.println("2 ZWEI");
30
31
  delay(500);
32
  mySwitch.send(2000, 24);
33
  Serial.println("2000 ZWEI TAUSEND");
34
  Serial.println("\t");
35
36
  delay(2000);
37
}


1
//Emfpänger-Code:
2
3
#include <RCSwitch.h>
4
RCSwitch mySwitch = RCSwitch();
5
6
void setup()
7
{
8
  Serial.begin(9600);
9
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2, //pin 3 on Arduino MICRO
10
}
11
12
13
14
void loop()
15
{  
16
  if (mySwitch.available())
17
  {
18
    int value = mySwitch.getReceivedValue();
19
    
20
      if (value == 0)
21
      {
22
        Serial.println("Encoding Error");
23
      }
24
    
25
      else
26
      {
27
          Serial.println(value);
28
      }
29
    
30
    //mySwitch.resetAvailable();
31
  }
32
}


Im Bild kann man die Ausgabe des SerialMonitors sehen. Dort ist als 
Beispiel die Zahl '2' gewählt worden. Sie wird vom Sender, wie im Code 
sichbar, nur einmal gesendet, beim Empfänger kommt sie aber solange an, 
bis ich die nächste Zahl, im Beispiel die '2000', sende.

Das möchte ich nicht. Ich möchte, dass die Zahl nur einmal ankommt bzw. 
ausgegeben wird.

Danke schon im Voraus für Antworten!

von Wolfgang (Gast)


Lesenswert?

Teddy B. schrieb:
> Im Bild kann man die Ausgabe des SerialMonitors sehen.

Welches Bild?

Erstmal solltest du prüfen, ob laufend gesendet wird oder über deine 
RCSwitch Bibliothek im Empfänger immer den gleichen Wert zurückliefert, 
bis der Empfang bestätigt wurde.

Tip: Üblicherweise gibt es zu den Arduino Bibliotheken funktionsfähige 
Beispiele auf die man aufbauen kann.

von Teddy B. (ben2jamin)


Lesenswert?

Bild ist schon da, hab vergessen es hinzuzufügen.

OK, werde mich mal im Internet umsehen! Danke!

von Wolfgang (Gast)


Lesenswert?

Teddy B. schrieb:
> OK, werde mich mal im Internet umsehen! Danke!

Es reicht, wenn du dich in deiner Arduino IDE im Menü "Datei" unter 
unter "Beispiele" umsiehst.

von Dieter S. (Gast)


Lesenswert?

Der Wert bleibt ja in der Variablen "Value" erhalten, so lange bis 
dieser überschrieben wird. Daher wird dieser auch häufiger angezeigt.

von Winfried J. (Firma: Nisch-Aufzüge) (winne) Benutzerseite


Lesenswert?

1
//Emfpänger-Code:
2
3
#include <RCSwitch.h>
4
RCSwitch mySwitch = RCSwitch();
5
6
void setup()
7
{
8
  Serial.begin(9600);
9
  mySwitch.enableReceive(0);  // Receiver on inerrupt 0 => that is pin #2, //pin 3 on Arduino MICRO
10
}
11
12
13
14
void loop()
15
{  
16
  if (mySwitch.available())
17
  {
18
    int value = mySwitch.getReceivedValue();
19
    
20
      if (value == 0)
21
      {
22
        Serial.println("Encoding Error");
23
      }
24
    
25
      else 
26
      { 
27
          if (oldvalue !=value) 
28
          {
29
               Serial.println(value);
30
               oldvalue=value;
31
          }
32
      }    
33
    //mySwitch.resetAvailable();
34
  }
35
}

von Dieter S. (Gast)


Lesenswert?

Ich glaube, das liegt auch an der Library, die gibt nur einen neuen Wert 
raus, wenn sie auch etwas empfängt. Ohne Signal wird auch die Variable 
nicht verändert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.