TX und RX Probleme

OP #5636762
Lesenswert?

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
#5636792
Lesenswert?

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
OP #5636808
Lesenswert?

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.
Gast #5636888
Lesenswert?

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.
Gast #5636996
Lesenswert?

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?
Gast #5637032
Lesenswert?

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.
Gast #5637361
Lesenswert?

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.
Gast #5637405
Lesenswert?

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.
(Firma: @home) #5637619
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren