Kreuzung geht schief - Buzzer hört sich krank an - 433 MHz RX TX

Hallo

Du kannst keinen Sender mit gleicher Fquenz neben einem Empfänger betreiben. Die stören sich. Du mußt den Sender bei Nichtgebrauch (Warten auf Signal) abschalten.

Die Störungen kommen wahrscheinlich daher daß eine Bibliothek Interrupt benutzt und so deine Tonerzeugung blockiert.

Grüße Uwe

Wie Uwe schon schrieb, der Interrupt der RCSwitch für den Empfänger (Interrupt 0) ist hier sicher das Problem.

Wenn du den Empfänger abschaltest, während du sendest, bzw. den Sender abschaltest, während du empfängst, kann es funktionieren.
Bei einem richtigen Timing geht es. Das Problem mit dem Interrup kannst du lösen, wenn du eine externe Tonquelle verwendest, die nicht durch den Interrupt gestört wird.

Z.B. einen Piezo-Signalgeber oder einen MP3-Player.

Oder du schaltest den Interrupt0 bei Tonausgabe ab.
Du kannst auch versuchen, die Spannung des Empfängers während der Melodie abzuschalten.
Dann hast du allerdings während der Melodie keinen Empfang, was ja evtl. nicht stört.

Edit:
Und den billigen Empfänger solltest du nicht verwenden, der ist totaler Müll.
Der empfängt mehr Störsignale als Nutzsignale.

Ich glaube nicht daß Du den Sender über ein Arduino PIN mit Strom versorgen kannst. Dazu verbraucht das Modul zuviel Strom. Du mußt einen Transistor (MOSFET) dafür verwenden.
Grüße Uwe

kulturbereicherer:
Was am Problem nichts ändert. Der 433 Sender abgesteckt verändert an der kaputten Melodie nichts.

Der Sender ist ja auch nicht das Problem.

Die Lösung des Problems sieht nun so aus
Das +5V des Empfängers ist nun an Digital Pin 6. Das Digital Pin 6 als Output definiert wird der im Code als High gesetzt wird. Beim Musik abspielen vorher auf LOW und danach wieder auf HIGH schon passt es. So wird der Empfänger während des abspielens der Musik vom Strom sozusagen abgeklemmt. Ein delay(500); nach dem ausschalten noch dazu und der erste Ton ist auch sauber.

Prima,
das hört sich doch gut an, wenn es so funktioniert.

uwefed:
Ich glaube nicht daß Du den Sender über ein Arduino PIN mit Strom versorgen kannst.

Das möchte ich auch bezweifeln!

Mein Vorschlag wäre, den betreffenden Interrupt, für die Zeit abschalten.

combie:
Das möchte ich auch bezweifeln!

Mein Vorschlag wäre, den betreffenden Interrupt, für die Zeit abschalten.

Er schaltet doch die Spannung des Empfängers, der zieht nicht viel.
Damit empfängt dieser nichts und der Interrupt wird nicht ausgelöst.

kulturbereicherer:
Der Sender hat nie ärger gemacht... der Empfänger RXB6 hat den Piepser gestört.

ich verstehe deine Aufregung nicht.
Dir wurde doch geholfen....

Und nicht der Empfänger macht den Ärger, sondern der Interrupt.
Und wie in meinem Post #7 geschrieben, ist es ok, wenn du die Spannung des Empfängers abschaltest, dann wird der Interrupt nicht ausgelöst.

Also freue dich dass es funktioniert, auch wenn nicht alle Antworten deinen Vorstellungen entsprechen.

Und wie? :slight_smile:

Abschalten:

EIMSK&=~(1<<INT0);

Wenn ich mich richtig erinnere.
Das Datenblatt, zum verwendeten µC, gibt gerne genaue Auskunft.

kulturbereicherer:
....hat der Paketbote wirklich geklingelt und ich nichts gehört? Der Arduino wird es mir verraten...

Und wenn du dann noch unterscheiden kannst, ob es der "Hausfreund/in" war oder doch nur der Postbote, das wäre doch mal ein Projekt, welches vorgestellt werden muss. :wink:

Pinguine?
Verwirrt?
Nervös?

Pingu kein Begriff? :-))

Generationskonflikt!?!

Wobei er bei der letzten stelle mit ++NiX++ die aktuelle Pinguzeit nicht hat aber wenn ich die Uhrzeitsachen die 4 Zeilen davor entferne, bleibt die Pinguzeit stehen. Genauso wenn ich das oberste entferne.

Ich verstehe das jedenfalls überhaupt nicht. Dass es nichts mit deinem ominösen pingu.com zu tun hat, bin ich mir aber sicher. Wenn doch, bin ich auf jeden Fall draussen.

Dem Compiler ist es egal wie ich meine Variablen benenne. Wichtig ist nur das diese Markant und Einprägsam sind um selbst damit arbeiten zu können

Du weisst, dass du eine Funktion
void printPinguZeit( time_t t, char *tz, int & pz ); hast, deren Name zwar evtl. einprägsam, aber verwirrend ist: Sie hat mit print gar nichts zu tun, hat einen überflüssigen Parameter (char* tz)
erzeugt einen Rückgabewert, ist aber als void deklariert. Das macht deine nervigen Pingus nicht sympatischer.
Falls sich jemand bis jetzt verkneifen konnte, den youtube-Link zu klicken: weiter bleiben lassen!

setSyncProvider(RTC.get); hab ich schonmal irgendwo gesehen, in irgendeiner kompexen Zeit-Library. War mir zu kompliziert und wurde auch falsch verwendet... Da musst du jemand anderes finden, der dir hilft.