• 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
Przesyłanie danych między arduino a PC
#1
Cześć,
Jestem tutaj nowy, to mój pierwszy temat i problem, z którym sobie nie mogę poradzić.
Mianowicie:
Robię kontroler pasków LED RGB w VB.NET / C# , w którym mogę za pomocą sliderów zmieniać sobie nasycenie pojedynczych kolorów, a następnie informację wysyłam do arduino, które kolor ten przekazuje na pasek LED.

Problem polega na tym, że czasami arduino dostaje informacje zbyt szybko i są one przez to nie pełne, co wpływa na to, że kolory są kompletnie inne.

Przykład:
PC: wysyłam za pomoca seriala taki oto tekst: "0,255,255"
Arduino: Odbiera podany tekst jako:
"0,255,"
"255"

Nie wiem jak rozwiązać ten problem, z PC do arduino informacje wysyłane są co 1 ms (tak wiem bardzo szybko). Spowalniałem to do 10 ms ale efekt był taki sam, a każda wartość powyżej 10 nie pozwalała płynnie zmieniać kolorów bo zauważalne były już skoki między odcieniami kolorów na pasku LED.

Jeżeli coś jest nie zrozumiałe albo czegoś nie napisałem to proszę pytać, a jeżeli to możliwe to pomóc mi z tym mankamentem.
 
Odpowiedź
#2
Kod poprosimy , prawdopodobną przyczyną jest brak opóźnienia potrzebnego na pełny odbiór danych poprzez uart .
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
Kod:
int ledrPin = 10;
int ledgPin = 9;
int ledbPin = 11;
int r;
int g;
int b;

void setup() {
 Serial.begin(115200);
 pinMode(ledrPin, OUTPUT);
 pinMode(ledgPin, OUTPUT);
 pinMode(ledbPin, OUTPUT);
}

void loop() {
 if (Serial.available() > 0) {
   r = Serial.parseInt();
   g = Serial.parseInt();
   b = Serial.parseInt();
   analogWrite(ledrPin, r);
   analogWrite(ledgPin, g);
   analogWrite(ledbPin, b);
   delay(10);
}
else
{
   Serial.println("arduino");
   analogWrite(ledrPin, r);
   analogWrite(ledgPin, g);
   analogWrite(ledbPin, b);
   delay(500);
}
}

poprzez wysyłany tekst "arduino" wyszukuję pod jaki port jest podpięta płytka, gdyby ktoś chciał wiedzieć.

w aplikacji na kompie kodu nie muszę podawać, po prostu co 1 ms wysyła się tekst z kolorami rgb, i tyle, nic więcej.

Kod brałem kiedyś z jakiegoś gotowca o ile pamiętam, i wystarczał mi dopóki mnie to przeskakiwanie kolorów nie zaczęło denerwować.
Dodatkowo aby kolory były wysyłane poprawnie wystarczy zrestartować aplikację i gdy ponownie połączę się z arduino to przeważnie wszystko jest ok.
 
Odpowiedź
#4
Zmień w kompie niech wysyła rzadziej bo opóźnienie masz a ardu 10ms a to jest 10 informacji z kompa jak śle co 1ms
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#5
niestety to nic nie pomaga :/
 
Odpowiedź
#6
a dłuższe delay(10) próbowałeś , qrcze miałem kiedyś już że urywał mi informację z portu i było to właśnie przez delay . Zerknij jeszcze te opóźnienie w arduino , jak nie pomoże pomyślimy nad innym rozwiązaniem
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#7
ok, to jutro coś jeszcze pokombinuję z tym delay'em.
 
Odpowiedź
#8
zerknij tutaj coś takiego tyle że z danymi do ekranu dotykowego robiłem

http://forum.arduinopolska.com/watek-wsp...light=uart
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#9
No ciekawe, jutro przetestuję i dam znać jak wyszło.

Dałeś tam 80ms opóźnienie dla przepustowości 9600, a w komentarzu napisałeś, że dla 115200 wystarczy 5ms, poza prędkością jest jakaś różnica w obydwu przepustowościach (jakieś wymagania większe, obciążenie) ?
 
Odpowiedź
#10
być może funkcja parseint działa z tak dużym opóźnieniem
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości