• 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
Wykorzystanie przez Arduino danych ze smartfonowego akcelerometra
#1
Witam, uczę się przejmowania przez Arduino danych przychodzących po UART z aplikacji smartfonowej RoboRemo i napotkałem problem, z którym jakoś nie mogę sobie poradzić. Próbuję wykorzystać dane pochodzące z akcelerometru telefonu, które są łańcuchami znaków: na początku tego łańcucha jest jeden z dwóch znaków: X lub Y (bo akcelerometr monitoruje obrót wokół 2 osi), potem jest spacja a następnie wartość liczbowa od 0 do 255. Chciałbym wykorzystać selektywnie tylko te dane, które dotyczą osi Y.
Próbuję więc napisać programik, który będzie pokazywać wartość liczbową na monitorze portu szeregowego ale tylko dla osi Y. Ogólnie staram się przechwycić dane jako String, potem wyciąć niepotrzebne dane a następnie wartość liczbową zamienić na typ int - żeby wykorzystać ją później do sterowania PWM. Zastosowałem if-a, dzięki któremu na monitorze powinna wyświetlać się albo konkretna wartość dla Y albo napis "cokolwiek" - w przypadku X. Niestety coś nie działa i na monitorze cały czas pojawia się napis "cokolwiek" - tak jakby dane Y w ogóle nie docierały do Arduino. Ale wiem, że docierają.

Dodam, że nie jestem informatykiem i języka C/C++ dla Arduino uczę się powoli samodzielnie na własnych próbach i błędach. Niestety błędów jest cały cza jeszcze dużo... Smile

Poniżej kod. Z góry dziękuję za podpowiedź.
Marek

Kod:
String sdane = ""; //zdefiniowanie zmiennych w klasie String do przechowywania łańcucha znaków
String sXczyY= "";
String svalue= "";

int ivalue;

void setup() {
Serial1.begin(9600); //uruchomienie Serial1 do komunikacji UART przez moduł Bluetooth
Serial.begin(9600);
}

void loop() {
if(Serial1.available() >0) // jeśli na porcie szeregowym z Bluetooth (czyli Serial1) pojawią się jakieś dane z akcelerometru RoboRemoFree to wykonuj poniżej
{sdane = Serial1.readStringUntil('\n'); //przypisanie otrzymanego łańcucha znaków do zmiennej sdane
sXczyY = sdane.substring(0,1); //przypisanie zmiennej sXczyY pierwszego znaku - to jest X lub Y
svalue = sdane.substring(2); //przypisanie zmiennej svalue aktualnej wartości liczbowej po usunięciu X/Y i spacji
ivalue = svalue.toInt();} //transformacja wartości liczbowej przypisanej do zmiennej w klasie String na zmienną typu int
sprawdzenie();}


void sprawdzenie()
{
if (sXczyY == 'Y')
{Serial.println(ivalue);
delay(2000);}
else
{Serial.println("cokolwiek");
delay(2000);}
}
 
Odpowiedź
#2
Kolego warunek spełniony i temu wyświetla tylko cokolwiek tylko po co else?
 
Odpowiedź
#3
Już wiem w czym był problem. W if-e porównanie powinno być "Y" a nie 'Y'.
Pozdrawiam,
Marek
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości