Hallo Mein vorhaben ist ich habe mir ein Multitool selber gebaut (Spannung /strom /tempratur und so weiter). Jetzt ist mein vorhaben diese werte über 433 MHz zu einen Display zu senden. Das alleine ist noch kein akt und steht auch schon. mein Problem ist jetzt beim Empfänger. Da ich mehrere werte übertragen will/muss habe ich es so gemacht zuerst sendet der sender die zahlen 1111/2222/3333 zum zuordnen. und später nach 500 ms den eigentlichen wert. Das geht auch. ABER beim empfangen, Wird der wert zb 1111 auch empfangen Problem JETZT bekomme ich es nicht hin das der Empfänger 450 ms wartet und den Empfänger speicher erneut ausliest. Soll heißen ich sehe auf dem Display immer nur den ersten wert zb 1111. Wenn jemand eine hilfreiche Idee dazu hätte wäre ich sehr dankbar. Habe es schon mit mySwitch.resetAvailable(); nach jeden wert versucht ändert aber nix. Am sender liegt es nicht der sendet genau was er soll: 15 sek warten (1111 500ms WERT xyz) 15 sek warten ( 2222 500ms WERT xyz) 15 sek warten ( 3333 500ms WERT xyz) 15 sek warten ( 4444 500ms WERT xyz) sieht man am seriellen Port gut. Mein Letzer CODE wäre dieser: void loop() { if (mySwitch.available()) { value = mySwitch.getReceivedValue(); if (value == 0) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(F("Verb. Fehlerhaft")); lcd.setCursor(0, 1); lcd.print(F(" ")); } else if (value == 1111) { // Akku Spannung delay(450); lcd.clear(); value = mySwitch.getReceivedValue(); lcd.setCursor(0, 1); lcd.print( value); lcd.setCursor(4, 1); lcd.print(F("Akku Spannung")); if (value <= 360) { digitalWrite(10, HIGH); } if (value >= 361) { digitalWrite(10, LOW); } } else if (value == 2222) { // Messspannung lcd.clear(); delay(450); value = mySwitch.getReceivedValue(); lcd.setCursor(0, 0); lcd.print(F("Mess Spannung")); lcd.setCursor(0, 1); lcd.print(value / (100)); lcd.setCursor(6, 1); lcd.print(F(" Volt")); } else if (value == 3333) { // Messstrom lcd.clear(); delay(450); value = mySwitch.getReceivedValue(); lcd.setCursor(0, 0); lcd.print(F("Gemessener Strom")); lcd.setCursor(0, 1); lcd.print(value / (100)); lcd.setCursor(6, 1); lcd.print(F(" Ampere ")); } else if (value == 4444) { // Temp lcd.clear(); delay(450); value = mySwitch.getReceivedValue(); lcd.setCursor(0, 0); lcd.print(F("Ges. Temperatur")); lcd.setCursor(0, 1); lcd.print(value / (100)); lcd.setCursor(6, 1); lcd.print(F(" C ")); } mySwitch.resetAvailable(); } } DANKE
DAVID -. schrieb: > 433 MHz emp Was ist das? Verstehe ich nicht. Welche Software verbirgt sich hinter der Instanz <mySwitch>?
DAVID -. schrieb: > Als Grund Gedanke liegt folgernder link zugrunde. Das beantwortet nicht was "433 MHz emp" ist. Die verwendete Library ist vermutlich Mist. Die einzige die ich kenne die wirklich gut arbeitet heisst VirtualWire. Aber das willst du sicher nicht hören. Du willst hören dass alles in Ordnung ist, kein Fehler und alles in Butter. Ich durchforste jedenfalls diesen Wust an C-Code der Library nicht.
Danke für deine mühe! Ich erwarte natürlich nicht das du dir irgendwas durchliest wo zu du keine lust hast. Meine sorge ist zurzeit nur ob ich mir keinen zusätzlichen ärger mache wenn ich beim SENDER die RCSwitch library (wegen Funk Steckdosen) nutze und beim empfänger dann VirtualWire. Ich bin auch nicht auf die Library festgesetzt VirtualWire werde ich mir morgen mal ansehen. Und wenn ich hören will das alles ok ist könnte ich das auch selber zu mir sagen hilft mir aber nicht. oder ziehen wir das mal anderes auf welche Möglichkeiten einer zuordnungsbaren Übertragung gibt es noch ? Kann ich die Übertragungen irgend wie speichern ? Die gesendeten werte sollen zugeordnet werden können und sollten nicht durchein andere kommen. PS: emp sollte eigendlich mal >empfänger< werden aber woll zuspät gesehen und jetzt kann ichs nicht mehr ändern.
Ich würde alles zusammen senden, ohne Pausen, und dann nach dem Empfang aufteilen (decodieren). PS Es gibt mehrere Libraries: VirtualWire library RadioHead library rc-switch library RFTransmitter library RFReceiver library https://andreasrohner.at/posts/Electronics/New-Arduino-library-for-433-Mhz-AM-Radio-Modules/
hmm ok wie könnte das aussehen das zusammen senden ?(so code mäsig muss das in extra klammern oder einfach so vor dem Komma ?) also die RFReceiver library ist nicht mit atmega8 kompatibel. Und bei VirtualWire ist es Woll nicht so einfach zahlen zusenden welche sich ändern können. #include <VirtualWire.h> int s0 = (3333); int s1 = (1234); void setup() { vw_set_ptt_inverted(true); vw_setup(2000); vw_set_tx_pin(10); } void loop() { vw_send(s0); vw_wait_tx(); vw_send(s1); vw_wait_tx(); delay(2000); } error: invalid conversion from 'int' to 'uint8_t* {aka unsigned char*}' [-fpermissive]
DAVID -. schrieb: > Und bei VirtualWire ist es Woll nicht so einfach zahlen zusenden welche > sich ändern können. Übersetzt heisst das: ich bin nicht in der Lage Zahlen in einzelne Bytes zu zerlegen um sie über einen wie auch immer gearteten Byte-seriellen Übertragungsweg zu schicken. Da wirst du wohl noch etwas Grundlagen lernen müssen. Aber bitte gib nicht der VirtualWire Lib die Schuld dass es nicht funktioniert.
DAVID -. schrieb: > hmm ok wie könnte das aussehen das zusammen senden ? Wenn ich weiß, wie ich die Daten zusammengefügt habe, dann kann ich später alles wieder fehlerfrei trennen. Das wäre vielleicht für die Anderen ein Geheimnis, aber nicht für mich. Z.B. 20171217 bedeutet 2017-12-17 wenn wir so trennen: xxxx-xx-xx (4-2-2). Es könnte aber auch anders sein: 20-171-217 (xx-xxx-xxx, 2-3-3). .
:
Bearbeitet durch User
Das zerlegen geschaltet sich für MICH schwieriger. Das senden von werten mit Komma konnte ich so lösen (4,20 *10 = 420 (senden) 420 / 10 = 4,20 so weit kein Problem. Was aber das zerlegen von werten angeht das verbirgt sich mir seit Monaten. Was dein beispiel angeht kann ich mir nicht vorstellen wie das ablaufen soll. Hab mal bissel rum versucht. eine mögliche Idee welche ich hatte welche aber NICHT aufgeht war. Die werte auf zuteilen und auswerten zulassen anhand ihrer länge: MAX Akku 420 *1 = 420 VM 200 *10 = 2 000 A 200 *100 = 20 000 Temp 125 *1000 = 125 000 Problem die werte können auch kleiner sein so mit verändert sich die länge massiv und ein zuordnen ist nicht mehr möglich Minmal 360 *1 = 360 V1 *10 = 10 A1 *100 = 100 Temp 0 *1000 = 0 AHHH nein habe eine bessere Möglichkeit. Ich werde einen 2ten sender und Empfänger verbauen habe noch 315MHz da. Damit sende ich die Akku Spannung mit 433 MHz und den Messwert mit 315MHz. Noch einen Taster wo ich zwischen den werten die ich senden will ( Volt/Ampere/Temperatur )umschalten kann und fertig. Danke euch für eure Hilfe.
Hallo, DAVID -. schrieb: > Ich werde einen 2ten sender und Empfänger verbauen habe noch 315MHz da. > Damit sende ich die Akku Spannung mit 433 MHz und den Messwert mit > 315MHz. falls Du in Deutschland wohnst: 315MHz sind hier NICHT zugelassen und es kann durchaus teuer werden, wenn man damit was stört. Ansonsten: übertrage die Daten (vorerst) generell als lesbare Texte, mache also diesen Teil auf der Senderseite. Formatiere die Daten auch dort passend für Deine Anzeige, füge also Leerzeichen hinzu oder Nullen wo nötig. Der Vorteil ist, daß Du Dir das Ergebnis seriell ausgeben lassen kannst und sofort siehst, ob es da Probleme gibt. Befasse Dich mit Stringverarbeitung in C https://www.mikrocontroller.net/articles/String-Verarbeitung_in_C Da Du wohl in der Arduino-Umgebung unterwegs bist, schaue Dir auch die String-Klasse an https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/ eine vollstäbdige deutsche Beschreibung wirst Du aber wohl nicht finden. Vorteil der String-Klasse: viele fertige Funktionen, gut zu testen. Nachteil: höherer Ram-Verbrauch, das kann auf den kleinen AVR schnell Probleme machen, wenn man damit halbe Romane bearbeitet... Befasse Dich mit der Übertragung bei den einfachen Funkmodulen. Man kann da nicht einfach irgendwas reintüten und hoffen, daß es am anderen Ende einfach wieder rauskommt. Nutze vorerst fertige Bibliotheken, VirtualWire wurde schon genannt. Dann kannst Du Deine zusammengebastellte serielle Ausgabe so rüberschicken und im Empfänger nutzen. Du kannst dann aber eben auch auf Empfängerseite aus der IDE stattdessen seriell Testdaten schicken und schauen, daß Deine Displanzeige damit klarkommt. Nicht alles auf einmal, schrittweise einzelne Blöcke testen und dann zusammenfügen. Gruß aus Berlin Michael
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.