• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino dane z serial portu.
#1
Mam problem z danymi które przychodzą do arduino (Uno R3) przez serial port. Mam funkcję która wyszukuję dany ciąg znaków i obrabia go zamieniając go w liczbę. Kiedy dodałem funkcję Serial.find() program przestał działać. Program ma za zadanie odebrać dane <D255> zamienić je w liczbę i zaświecić diodę z mocą 255.

Kod programu:

Kod:
#define ledPin 9
String dane = "";
char str[6];
void setup() {
 Serial.begin(9600);
 pinMode(ledPin , OUTPUT);
}

void loop() {
 if (Serial.available() > 0) {

   if (Serial.find("<D255>")) {
     
     dane = Serial.readStringUntil('\n');
     Serial.println(dane);
     dane.remove(0, 2);
     Serial.println(dane);
     dane.remove(3, 4);
     Serial.println(dane);
     dane.toCharArray(str , sizeof(str));

     long liczba = atol(str);
     Serial.println(liczba);


     analogWrite(ledPin , liczba);



   }
 }
}
 
Odpowiedź
#2
Szczerze powiedziawszy, to nigdy nie używałem funkcji .find();
Ja takie problemy rozwiązuję w ten sposób:
Sprawdzam w pętli, na przykład while (Serial.available() > 0){};
jakie stringi dostaję -> Serial.readString();
i jeśli trafię na mojego stringa, to wywołuję odpowiednią funkcję.
W Twoim przypadku było by jakoś tak:

String jakasWartosc = Serial.readString();
if (jakasWartosc=="D255"){
dane = Serial.readStringUntil('\n');
Serial.println(dane);
dane.remove(0, 2);
Serial.println(dane);
dane.remove(3, 4);
Serial.println(dane);
dane.toCharArray(str , sizeof(str));

long liczba = atol(str);
Serial.println(liczba);


analogWrite(ledPin , liczba);
}
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
Tak , zrobiłem i wygląda na to że arduino w ogóle nie przyjmuje tych danych. Po kolei się nic nie wyświetlało a liczba wyszła zero. Jakiś pomysł jak temu zaradzić?
 
Odpowiedź
#4
Udało mi się rozwiązać problem  Smile . Okazało się że funkcja Serial.find() zabiera sobie to co wpisałem i czyści bufor.
Zamieniłem linikę

 if (Serial.find("<D255>")) { }

na

dane = Serial.readStringUntil('\n');

    if (dane == "<D255>") {}


i działa  Big Grin . 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości