Pages: [1]   Go Down
Author Topic: Problem mit NewSoftSerial mit 2 Serial ports  (Read 1048 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
invalid input......
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey miteinander,
ich hab ein kleineres Problem. Ich würd gern den Arduino auf dem des Touchshield slide sitzt als Gateway zwischen dem Touchshield Slide und einem weiteren Arduino hernehmen. Sprich, dass ich ein Menü auf dem Touchshield hab und am anderen Arduino Sensoren, Bluetooth etc. Funktioniert alles soweit prima bis ich versuch 2 serielle ports abzufragen.

Mein Code aud dem Arduino ist:
Code:
#include <NewSoftSerial.h>

#define ArduinoSerial_rxpin 9
#define ArduinoSerial_txpin 8
#define Touch_rxPin 3
#define Touch_txPin 2

//variables
int val = -1;

NewSoftSerial ArduinoSerial(ArduinoSerial_rxpin,ArduinoSerial_txpin);
NewSoftSerial touchSerial(Touch_rxPin,Touch_txPin);

   void setup(){
   pinMode(ArduinoSerial_txpin,OUTPUT);
   pinMode(ArduinoSerial_rxpin,INPUT);
   pinMode(Touch_rxPin, INPUT);
   pinMode(Touch_txPin, OUTPUT);
   ArduinoSerial.begin(9600);
   delay(500);
   touchSerial.begin(9600);
   delay(500);
}

   void loop(){
   if (touchSerial.available()) {
            int counter=0;
            char stringIn[32] = "";
            while(touchSerial.available()>0) {
                  val = touchSerial.read();
                  stringIn[counter]=val;
                  counter++;                
            }        
            ArduinoSerial.print(stringIn);
    }
    
  if (ArduinoSerial.available()){
            int counter=0;
            char stringIn[32] = "";
            while(ArduinoSerial.available()>0) {
                  val = ArduinoSerial.read();
                  stringIn[counter]=val;
                  counter++;
            }
           touchSerial.print(stringIn);
    }
  
 }

Wenn ich eine if schleife herausnehme (egal welche) funktioniert es in entsprechender Richtung. Hat irgendwer eine Idee woran es liegt oder wie man es besser machen könnte?

Danke im vorraus,
Ko
Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 703
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
void setup(){
   pinMode(ArduinoSerial_txpin,OUTPUT);
   pinMode(ArduinoSerial_rxpin,INPUT);
   pinMode(Touch_rxPin, INPUT);
   pinMode(Touch_txPin, OUTPUT);
   ....
}
PinMode-Deklaration für serielle Portleitungen ist nicht notwendig.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
invalid input......
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tut mir leid wenn ichs sag aber selbst wenn ichs weglass, funktoniert es nicht smiley-sad
Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 659
Arduino sucks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So wie ich das lese, kann ja im Moment nur eines der beiden wahr werden oder?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
invalid input......
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ja ich will ja nur des Signal/die Daten weitergeben. Oder wie meinst du des?
Logged

0
Offline Offline
God Member
*****
Karma: 1
Posts: 659
Arduino sucks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn ein IF wahr wird, dann kann ja das andere nicht mehr abgefragt werden.

Willst du jetzt beide zusammen abfragen und das geht nicht, oder willst du nur eins abfragen, und es geht generell nicht?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
invalid input......
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ich will beide abfragen. weil ich in beide richtungen ja Daten schicken muss.

mich wundert es nur dass wenn ich anstatt des Touchshields ( also der touchSerial Schnittstelle) die normale vordefinierte Serial schnittstelle hernehm, es funktioniert.
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 90
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin,

lies mal auf der NewSoftSerial Seite nach,
http://arduiniana.org/libraries/newsoftserial/
Hier ein Zitat:
Code:
Any time you “use” an object by calling its begin(), available(), read(), or print[ln]() methods, it becomes the “active” object, and the previously active object is deactivated and its RX buffer discarded. An important point here is that object.available() always returns 0 unless object is already active. This means that you can't write code like this:

void loop()
{
  if (device1.available() > 0)
  {
    int c = device1.read();
    ...
  }
  if (device2.available() > 0)
  {
    int c = device2.read();
    ...
  }
}

This code will never do anything but activate one device after the other.

Mfg
Philipp
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
invalid input......
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

jo danke, Habs auch bemerkt wie bescheuert ich war. Habs jetz mit nem Interrupt gelöst und funktioniert wunderbar
Logged

Pages: [1]   Go Up
Jump to: