Moin, bin noch nicht so lange dabei und stehe auf dem Schlauch. Ich bin dabei zwei Arduinos zu verbinden: Nano Sender Uno Empfänger Ich möchte einen string mit Serial.write senden (Nano) und die Ausgänge des UNO schalten. Im Code habe ich zwei Situationen, eine Funktioniert, eine nicht. Zwei Taster, jeder schaltet jeweils einen Ausgang Ein/Aus. Taster 1: Funktioniert nicht Einschalten: string Ausschalten: string Taster 2: Funktioniert Einschalten: string Ausschalten: absolut zahl Das Ganze soll später auf 8 Taster/Ausgänge erweitert werden. Später soll der Sender auch Analogsignale senden. Sender: // Sender Prezelboard byte Taster1 = 10; // Input byte Taster2 = 12; // Input //int an1 = 2; // nicht genutzt //int aus1 = 4; // nicht genutzt //char an2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 's'}; // nicht genutzt //char aus2[8] = {'a', 'r', 'd', 'u', 'i', 'n', '2'}; // nicht genutzt char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'b'}; char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'}; char Str1[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'a'}; ///////////////////////////////////////////////////////////// byte zahl = 0; boolean flanke = 0; boolean last_state; ///////////////////////////////////////////////////////////// byte zahl1 = 0; boolean flanke1 = 0; boolean last_state1; ///////////////////////////////////////////////////////////// void setup() { Serial.begin(9600); pinMode(Taster1, INPUT); pinMode(Taster2, INPUT); } void loop() { ///////////////////////////////////////////////////////////// int state = digitalRead(Taster1); // Taster 1 if (state != last_state) { delay(10); last_state = state; if(state == LOW) { flanke=flanke +1 ; zahl=zahl + 15; } } if (zahl == 15) { Serial.write(Str2); zahl = 30; } if (zahl == 45) { Serial.write(Str3); zahl = 0; } ///////////////////////////////////////////////////////////// int state1 = digitalRead(Taster2); // Taster 2 if (state1 != last_state1) { delay(10); last_state1 = state1; if(state1 == LOW) { flanke1=flanke1 +1 ; zahl1=zahl1 + 15; } } if (zahl1 == 15) { Serial.write(Str1); zahl1 = 30; } if (zahl1 == 45) { Serial.write(8); zahl1 = 0; } ///////////////////////////////////////////////////////////// //int analog = analogRead(0) + 1000; // Serial.write(analog); ///////////////////////////////////////////////////////////// } ######################################################################## ### Empfänger: // ArduinUno Empfänger int val; int setze; void setup() { Serial.begin(9600); pinMode(8, OUTPUT); pinMode(9, OUTPUT); } void loop() { if (Serial.available()) { val = Serial.read(); Serial.println(val); } if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') { digitalWrite(8, 1); } if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'b') { digitalWrite(8, 0); } if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'a') { digitalWrite(9, 1); } if (val == 8) { digitalWrite(9, 0); } } Danke für eure Hilfe
Addi S. schrieb: > bin noch nicht so lange dabei und stehe auf dem Schlauch. > Ich bin dabei zwei Arduinos zu verbinden: > > Nano Sender > Uno Empfänger wie soll das gwehen? beide haben USB bridges on Board und sind Slaves! keiner kann USB Master spielen, eine direkte Verbindung ist mir mit Rx und Tx passend verbunden nie gelungen weil der USB Chip die Leitung festhält. mit mini PRO 328 ohne FTDI kann das klappen
Danke für die Antwort. Es funktioniert. Wenn ich das geänderte Programm hochladen möchte muss ich die Tx/Rx Verbindung auftrennen, nervig aber geht. Habe anfangs nur mit absoluten Zahlen gearbeitet, finde die Aufteilung in string für Einzelbereiche deutlich besser.
Joachim B. schrieb: > eine direkte Verbindung ist mir mit Rx > und Tx passend verbunden nie gelungen weil der USB Chip die Leitung > festhält. Die Leitungen zwischen dem AT328 und der USB-Bridge sollten mit Widerständen entkoppelt sein. Ob das jeder Chinese korrekt umsetzt, steht auf einem anderen Blatt - vom originalen Schaltungsdesign her ist das möglich. Hätte ich das in einer realen Anwendung vor, würde ich den ProMini bevorzugen, der hat keinen USB-Baustein.
kann zum Thema nicht viel beitragen für den sender gehts aber einfacher mit : https://www.arduino.cc/en/Reference/SoftwareSerial wenn man noch einen pin frei hat. Und digitalWrite(9, 0); habe ich noch nie gesehen. kenne nur digitalWrite(9, HIGH); oder digitalWrite(9, LOW);
:
Bearbeitet durch User
Addi S. schrieb: > if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') was soll das werden? val ist ein int value! und eine zeichenkette kann man wohl kaum so vergleichen. ich sag nichts weiter dazu, das web ist voll von beispielen hierzu. die initialisierung ist auch "behindert" ... char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'b'}; mt
Apollo M. schrieb: > Addi S. schrieb: >> if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') > > was soll das werden? val ist ein int value! > und eine zeichenkette kann man wohl kaum so vergleichen. > ich sag nichts weiter dazu, das web ist voll von beispielen hierzu. > Ist das nicht der Komma-Operator in dem if? Das sind 7 Ausdrücke val =='a' .. 'o' und der letzte wird für das if herangezogen. Man könnte auch schreiben if('o') Was immer true ist. Also wird das in den geschweiften Klammern immer ausgeführt. Oder sehe ich das falsch?
Manfred schrieb: > Die Leitungen zwischen dem AT328 und der USB-Bridge sollten mit > Widerständen entkoppelt sein. Ob das jeder Chinese korrekt umsetzt, > steht auf einem anderen Blatt - vom originalen Schaltungsdesign her ist > das möglich. Ich musste auf meinen Arduino Nano Clones (die mit CH341 Chip) die Rx LED entfernen, damit dieser Anschluss extern belegt werden konnte. Bei einem funktionierte nicht einmal der USB Anschluss, solange die LED drauf war. Ist ein bekannter Designfehler, den man anhand des Schaltplanes und der elektrischen Daten der beiden Chips nachvollziehen kann.
Danke für die vielen Antworten. ///////////////////////////////////////////////////////////////////// Autor: Manfred (Gast) Datum: 26.11.2018 23:20 Joachim B. schrieb: > eine direkte Verbindung ist mir mit Rx > und Tx passend verbunden nie gelungen weil der USB Chip die Leitung > festhält. Die Leitungen zwischen dem AT328 und der USB-Bridge sollten mit Widerständen entkoppelt sein. Ob das jeder Chinese korrekt umsetzt, steht auf einem anderen Blatt - vom originalen Schaltungsdesign her ist das möglich. Ich habe keinen Widerstand in der Leitung, einige meinen Ja, einige Nein. Ist ein versuch wert! ///////////////////////////////////////////////////////////////////// Autor: Apollo M.(Firma: @home)(majortom) Datum: 27.11.2018 02:43 Addi S. schrieb: > if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') was soll das werden? val ist ein int value! und eine zeichenkette kann man wohl kaum so vergleichen. ich sag nichts weiter dazu, das web ist voll von beispielen hierzu. die initialisierung ist auch "behindert" ... char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'b'}; mt Ich sehe im SerialMonitor das es richtig Übermittelt wird. Und es funktioniert auch! Das dort "Arduino" steht ist nur zweitrangig. Es geht um die Funktion. Es könnte dort auch "L1an" = Leuchte 1 an eingetragen werden.. Zu dem behindert sage ich mal nichts, bin kein Profi. ///////////////////////////////////////////////////////////////////// Autor: Stefanus F.(stefanus) Datum: 27.11.2018 07:59 Manfred schrieb: > Die Leitungen zwischen dem AT328 und der USB-Bridge sollten mit > Widerständen entkoppelt sein. Ob das jeder Chinese korrekt umsetzt, > steht auf einem anderen Blatt - vom originalen Schaltungsdesign her ist > das möglich. Ich musste auf meinen Arduino Nano Clones (die mit CH341 Chip) die Rx LED entfernen, damit dieser Anschluss extern belegt werden konnte. Bei einem funktionierte nicht einmal der USB Anschluss, solange die LED drauf war. Ist ein bekannter Designfehler, den man anhand des Schaltplanes und der elektrischen Daten der beiden Chips nachvollziehen kann. Löten wollte ich nicht, danke für den Hinweis.
DAVID -. schrieb: > Und digitalWrite(9, 0); habe ich noch nie gesehen. > kenne nur digitalWrite(9, HIGH); oder digitalWrite(9, LOW); Ach david... Daß das großgeschrieben ist, sollte dir den Hinweis geben, das es sich da um ein Makro handelt (#define). Deine IDE sollte das auch entsprechen highlighten. Wird also vom PreCompiler entsprechend ersetzt.
Addi schrieb: >> Ich musste auf meinen Arduino Nano Clones (die mit CH341 Chip) die Rx >> LED entfernen > Löten wollte ich nicht, danke für den Hinweis. Die kannst du einfach mit einer Zange abreißen. Ich habe nochmal in den Schaltplan geschaut -> Vermutlich ist das in deinem Fall nicht die Problemursache. Die Rx LED stört die Funktion des USB-UART. Direktverbindungen zwischen AVR+AVR sind nicht betroffen.
Apollo M. schrieb: > Addi S. schrieb: >> if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') > > was soll das werden? val ist ein int value! > und eine zeichenkette kann man wohl kaum so vergleichen. > ich sag nichts weiter dazu, das web ist voll von beispielen hierzu. if (val == 'a', 'r', 'd', 'u', 'i', 'n', 'o') entspricht if ('o') und ist immer wahr - wolltest du das? sicher nicht! > die initialisierung ist auch "behindert" ... > char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'b'}; warum nicht gleich als string? char Str3[] = {"ardunio"}; zum gültigen string vergleich muss man per hand schon mehr machen als hier gezeigt oder mal die lib's studieren ob so etwas nicht schon mitgeliefert wird, ... auch selber nachdenken und weniger fragen hilft oft. mt
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.