Hallo,
ich möchte mal fragen, wie ich werte von einem Taster mit einem Arduino
sende und mit einem anderen Arduino empfange.
Zum einsatz kommen diese Module:
http://www.amazon.de/Empf%C3%A4nger-Superregeneration-Raspberry-Wireless-Transmitter/dp/B00M0XTP4W/ref=sr_1_1?ie=UTF8&qid=1416401459&sr=8-1&keywords=arduino+sender+empf%C3%A4nger
,sowie zwei Taster.
Jezt zur Frage:
Da ich das Sende-Empfänger-Modul noch nicht bekommen habe (noch im
Versand), möchte ich fragen, ob die nachfolgenden Codes richtig sind.
Ich möchte: mit dem Sende-Modul die Zahlen 0 oder zwei senden, wenn der
1. oder der 2. Taster auf LOW steht.
Die zahlen 1 und 3 möchte ich ausgeben, wenn der Taster 1 oder der
Taster 2 auf HIGH steht.
Und dann noch diese ganzen Zahlen empfangen.
Sollte es Fehler geben, dann schreibt es mir bitte!
Danke schon im Voraus!
Öhmm....
Kenne deine RCSwitch Lib nicht, würde aber meinen, dass du das einfach
ausprobieren könntest.
AusgangsPin und EingangsPin der Arduinos verbinden. (GND natürlich auch)
Vielleicht noch einen Panikwiderstand dazwischen, falls du Mist gebaut
haben solltest.
//Empfänger-Code
Hallo, wo muss ich etwas verändern damit der Ablauf von 6 Schleifen
vorzeitig unterbrochen wird, ich benutze eine Fernbedienung mit 4 Tasten
als Sender, ich würde gerne die schleife vorzeitig stoppen nur wie?
Starten kann ich da ich die "value == 1" gegen denn Code der FB
ausgetauscht habe "value == 7341"
Danke für die Hilfe
Andreas schrieb:> Hallo, wo muss ich etwas verändern damit der Ablauf von 6 Schleifen> vorzeitig unterbrochen wird, ich benutze eine Fernbedienung> mit 4 Tasten als Sender, ich würde gerne die schleife vorzeitig> stoppen nur wie?
Ist das nicht offensichtlich? Mach aus der 6 eine 4. Irgendwie ist mir
der Zusammenhang zu der Anzahl der Tasten nicht klar. Zeige doch mal
dein Programm!
Ich würde Dir empfehlen, die Grundlagen der Programmiersprache C zu
lernen. Am einfachsten geht das auf einem PC mit Anleitungen wie dieser:
http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/
Stefanus F. schrieb:> Ist das nicht offensichtlich? Mach aus der 6 eine 4. Irgendwie ist mir> der Zusammenhang zu der Anzahl der Tasten nicht klar. Zeige doch mal> dein Programm!
Es ist doch ganz einfach, ich habe eine FB und diese hat 4 Tasten A, B,
C und D - wenn ich die Taste "A" gedrückt habe startet ein Zyklus mit 20
Wiederholungen und bei Taste "B" mit 50 Wiederholungen, mein Problem ist
jetzt, ich möchte bei Taste A oder B nach 10 Wiederholungen das stoppen
oder wechseln von A auf B oder von B auf A ohne das ich die schleife bis
zum ende abwarten muss.
//Empfänger-Code
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int Funk = 0;
int Relais = 6;
int LED_Test = 13;
void setup()
{
Serial.begin(9600);
mySwitch.enableReceive(0); //Empfänger ist an Interrupt-Pin "0" - Das
ist der Pin2
pinMode(Relais, OUTPUT); //Der Pin mit der Relais (Pin6) ist jetzt
ein Ausgang.
}
void RelaisStart()
{
for (int c = 0; c < 20; c++){ //Wiederholungsanzahl
digitalWrite(Relais, HIGH); //An dieser Stelle würde das Relais
einsschalten
delay(250); //...xxx Sekunden warten - (1 sec.=1000 - 10
sec.=10000)
digitalWrite(Relais, LOW); //Und wieder ausschalten
delay(250); //...xxx Sekunden warten - (1 sec.=1000 - 10
sec.=10000)
}
}
void ledtest()
{
for (int c = 0; c < 30; c++){ //Wiederholungsanzahl
digitalWrite(LED_Test, HIGH); //An dieser Stelle würde das Relais
einsschalten
delay(100); //...xxx Sekunden warten - (1 sec.=1000 - 10
sec.=10000)
digitalWrite(LED_Test, LOW); //Und wieder ausschalten
delay(100); //...xxx Sekunden warten - (1 sec.=1000 - 10
sec.=10000)
}
}
void loop()
{
int value = mySwitch.getReceivedValue();
if (value == 4436) //24 bit Code der Fernbedienung /
Handsender Taste B
{
Serial.print("LED: "); //Ausgabe Serial Monitor (Strg +
Umschalt + M)
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
ledtest();
}
if (value == 4433) //24 bit Code der Fernbedienung
/ Handsender Taste A
{
Serial.print("Relais: "); //Ausgabe Serial Monitor (Strg +
Umschalt + M)
Serial.print( mySwitch.getReceivedValue() );
Serial.print(" / ");
Serial.print( mySwitch.getReceivedBitlength() );
Serial.print("bit ");
Serial.print("Protocol: ");
Serial.println( mySwitch.getReceivedProtocol() );
RelaisStart();
}
mySwitch.resetAvailable(); //Ende Empfängercode
}
Als Alternative schlage ich vor die Arduino Bibliotheken für diese Art
von Radio Modulen zu studieren und ausprobieren. Ich kaufte mir vor ein
paar Jahren auch solche Module zum rumspielen. Mit einer Arduino
Bibliothek funktionierten die Dinger zuverläßig auf Anhieb um ein
MAX31856 Thermometer fern zu übertragen.
https://andreasrohner.at/posts/Electronics/New-Arduino-library-for-433-Mhz-AM-Radio-Modules/
Gerhard O. schrieb:> Als Alternative schlage ich vor die Arduino Bibliotheken für diese Art von Radio
Modulen zu studieren
Ändert nichts an der unbrauchbaren Programmstruktur:
> void ledtest() {> for (int c = 0; c < 30; c++){> digitalWrite(LED_Test, HIGH);> delay (100);
Die Routine "ledtest" mit delay dauert so lange wie sie läuft,
währenddessen kann keine Abfrage der Tasten erfolgen - so wird das nie.
Aus den Grundlagen "blink ohne delay" durcharbeiten und anstatt delay
Timer setzen und sofort wieder zurück in die Hauptschleife.
Andreas schrieb:> ich möchte bei Taste A oder B nach 10 Wiederholungen das stoppen> oder wechseln von A auf B oder von B auf A ohne das ich die> schleife bis zum ende abwarten muss.
Dann würde ich eine Variable "anzahl" benutzen, die bestimmt, wie viele
Schleifen-Wiederholungen gewünscht sind.
Sagen wir, Taste A setzt die Variable auf 20, und Taste B setzt sie auf
50. Dann lautet die Wiederholschleife etwa:
1
for(inti=0;i<anzahl;i++){...}
Zwei Herausforderungen entstehen nun:
a) Was soll passieren wenn du nach Druck auf die Taste B (50) bereits
mehr als 29 Schleifendurchläufe erreicht hat und dann jemand Taste A
(20) drückt?
b) Da deine Wiederholschleife blockierenden Code enthält, fehlt Dir die
Möglichkeit, gleichzeitig die Tasten abzufragen. Zwei Lösungsvorschläge:
b1) Du fragst die Tasten regelmäßig in einem Timer-Interrupt ab.
b2) Du beschäftigst Dich mit "Endlichen Automaten" (=Zustandsautomaten)
um zu lernen, wie man ausbaufähiges Multi-Tasking implementiert.
Ich würde Die Methode b2 empfehlen. Das dauert zwar etwas länger, aber
du wirst davon auch in anderen Projekten profitieren können. Und du
wirst merken, dass das Arduino Framework dazu ideal geeignet ist.
Stefanus F. schrieb:> Zwei Herausforderungen entstehen nun:>> a) Was soll passieren wenn du nach Druck auf die Taste B (50) bereits> mehr als 29 Schleifendurchläufe erreicht hat und dann jemand Taste A> (20) drückt?>> b) Da deine Wiederholschleife blockierenden Code enthält, fehlt Dir die> Möglichkeit, gleichzeitig die Tasten abzufragen. Zwei Lösungsvorschläge:>> b1) Du fragst die Tasten regelmäßig in einem Timer-Interrupt ab.>> b2) Du beschäftigst Dich mit "Endlichen Automaten" (=Zustandsautomaten)> um zu lernen, wie man ausbaufähiges Multi-Tasking implementiert.>> Ich würde Die Methode b2 empfehlen. Das dauert zwar etwas länger, aber> du wirst davon auch in anderen Projekten profitieren können. Und du> wirst merken, dass das Arduino Framework dazu ideal geeignet ist.
ZU a) dann soll die Schleife Stoppen und die andere sofort anfangen
ZU b1) und b2) wie müsste der Code aussehen, ich möchte es so einfach
wie möglich erst mal damit ich es verstehen kann.
Manfred schrieb:> Die Routine "ledtest" mit delay dauert so lange wie sie läuft,> währenddessen kann keine Abfrage der Tasten erfolgen - so wird das nie.>> Aus den Grundlagen "blink ohne delay" durcharbeiten und anstatt delay> Timer setzen und sofort wieder zurück in die Hauptschleife.
*** anstatt delay Timer setzen ***
mit der Timer Funktion habe ich aber keine Möglichkeit die Intervalle zu
bestimmen oder?
2 Sec. / 15 Sec.
1
digitalWrite(LED,HIGH);//An dieser Stelle würde das Relais einschalten
Schade das ich das Projekt so beenden muss.
ich wollte lediglich ein kleine Schaltung für eine Musikgruppe bauen,
ich gebe Straßen Kindern kostenlos Musik Unterricht und wollte dafür
diese Schaltung so günstig wie möglich bauen.
Manche Projekte sollen es eben nicht sein.
Danke trotzdem für die Hilfe.
Solle sich aber jemand bereit erklären die Schaltung mir so zu bauen
würde ich sehr dankbar, die Hardware habe ich.