14-02-2017, 18:44
Witam,
Mam problem z użyciem SoftwareSerial.
Używam Arduino Pro Mini (Atmega 328P, 3.3V)
Do arduino mam podpięte 3 inne układy wysyłające dane po serialu:
1. Odtwarzacz mp3 (DFPlayer) SoftwareSerial #1 pin(3,4) PORTD
2. Układ radiowy (HC-11) SoftwareSerial #2 pin(14,15) PORTC
3. Klawiaturę (3 przyciski + 2 potencjometry) SoftwareSerial #2 pin(9,8) PORTB
(dodatkowo sprzętowy uart wykorzystuję do monitorowania czy wszystko działa jak bym chciał).
Program, który próbuje napisać powinien ciągle "nasłuchiwać",
czy coś nie przyszło z układu radiowego lub klawiatury
i jeśli coś jest, to wyślij komendę do mp3.
Każdy z 3 układów w pojedynkę działa (mp3 gra, klawiatura wysyła co ma wysyłać, układ radiowy działa ok)- każdy z SoftwareSeriali pojedynczo działa OK. Ale razem nie działają (muszę nacisnąć ...10razy klawiaturę żeby coś się odebrało).
Spodziewałbym się, że poniższy kod będzie działał następująco (główna pętla):
nasłuchuj na pierwszym porcie, jeżeli coś jest to coś zrób, jak nie ma, to nasłuchuj na drugim itd...
Czy jest szansa zmodyfikować ten program tak, żeby działał jak chcę?
Z góry dziękuję za zainteresowanie i pomoc.
mm
Mam problem z użyciem SoftwareSerial.
Używam Arduino Pro Mini (Atmega 328P, 3.3V)
Do arduino mam podpięte 3 inne układy wysyłające dane po serialu:
1. Odtwarzacz mp3 (DFPlayer) SoftwareSerial #1 pin(3,4) PORTD
2. Układ radiowy (HC-11) SoftwareSerial #2 pin(14,15) PORTC
3. Klawiaturę (3 przyciski + 2 potencjometry) SoftwareSerial #2 pin(9,8) PORTB
(dodatkowo sprzętowy uart wykorzystuję do monitorowania czy wszystko działa jak bym chciał).
Program, który próbuje napisać powinien ciągle "nasłuchiwać",
czy coś nie przyszło z układu radiowego lub klawiatury
i jeśli coś jest, to wyślij komendę do mp3.
Każdy z 3 układów w pojedynkę działa (mp3 gra, klawiatura wysyła co ma wysyłać, układ radiowy działa ok)- każdy z SoftwareSeriali pojedynczo działa OK. Ale razem nie działają (muszę nacisnąć ...10razy klawiaturę żeby coś się odebrało).
Spodziewałbym się, że poniższy kod będzie działał następująco (główna pętla):
nasłuchuj na pierwszym porcie, jeżeli coś jest to coś zrób, jak nie ma, to nasłuchuj na drugim itd...
Czy jest szansa zmodyfikować ten program tak, żeby działał jak chcę?
Kod:
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
String inputString = "";
DFRobotDFPlayerMini myDFPlayer;
SoftwareSerial mySoftwareSerial_DF(3, 4); // 3RX, 4TX //DFPlayer
SoftwareSerial mySoftwareSerial_KEY(9, 8); // 9RX, 8TX //KEYBOARD + Knoobs
SoftwareSerial mySoftwareSerial_RADIO(15, 14); // 15RX, 14TX //RADIO
void setup(void)
{
Serial.begin(9600);
//inicializowanie odtwarzacza mp3 DFPlayer
mySoftwareSerial_DF.begin(9600);
if (!myDFPlayer.begin(mySoftwareSerial_DF)) {
Serial.println(F("DF Error"));
while(true);
}
Serial.println(F("DF OK"));
mySoftwareSerial_RADIO.begin(9600);
mySoftwareSerial_KEY.begin(9600);
}
void loop(void)
{
mySoftwareSerial_KEY.listen();
//delay(1);
if (mySoftwareSerial_KEY.available()) {
char inChar = (char)mySoftwareSerial_KEY.read();
inputString += inChar;
Serial.println(inputString);
}
mySoftwareSerial_RADIO.listen();
//delay(1);
if (mySoftwareSerial_RADIO.available()) {
char inChar = (char)mySoftwareSerial_RADIO.read();
inputString += inChar;
Serial.println(inputString);
}
}
Z góry dziękuję za zainteresowanie i pomoc.
mm