Опрос COM порта для получения данных с компьютера
- Войдите на сайт для отправки комментариев
Добрые люди, помогите пожалуйста
Написал большой код для Arduino Nano который задает цвет светодиодов WS2812B по командам из COM порта,
то - есть пользователь отправляет с компьютера в ком порт строчку, в которой указывает какой светодиод каким цветом нужно зажечь, а ардуино делает это.
Но, проблема в том, что пользователь отправляет команды в разные промежутки времени, и очень часто случается такая ситуация, что отправленная пользователем команда, не попадает в тот момент, когда арудуино читает данные из com порта. Из за этого, зачастую ардуино не получает команды пользователя.
Надеюсь понятно. )))
Я пытался реализовать получение данных с com порта, по средствам прерывания, но все уперлось в то, что при считывании данных типа String из com порта, происходит ТаймАут который ломает прерывание.
Теперь не знаю что делать, помогите пожалуйста!
Мой кривой скетч:
char buffer[19];
int led;
int Bright = 255 ;
int r;
int g;
int b;
String com;
void(* reset) (void) = 0;
#include <GyverTimers.h>
#include <FastLED.h>
#define NUM_LEDS 120
#define PIN 5
#define LEDS 120
#define LED_COUNT = 120;
CRGB leds[LEDS];
void setup() {
FastLED.addLeds<WS2812, PIN, GRB>(leds, LEDS);
Serial.begin(115200);
FastLED.setBrightness(Bright);
Serial.println("Start");
}
void loop()
{
com = "";
led = 0;
r = 0;
g = 0;
b = 0;
Serial.setTimeout(50);
com = Serial.readString();
com.toCharArray(buffer,16);
led=atoi(strtok(buffer," "));
r=atoi(strtok(NULL," "));
g=atoi(strtok(NULL," "));
b=atoi(strtok(NULL," "));
leds[led].r = r;
leds[led].g = g;
leds[led].b = b;
FastLED.show();
if (Serial.parseInt() == -999) reset();
}
А нахрена ты принудительно читаешь из порта, когда там ничо нету? За Serial.available() знаешь чонить?
Я пытался реализовать получение данных с com порта, по средствам прерывания, но все уперлось в то, что при считывании данных типа String из com порта,
Не вижу в коде ничего даже отдаленно напоминающего о прерывании.
http://arduino.ru/Reference/Serial/Available
Я пытался реализовать получение данных с com порта, по средствам прерывания, но все уперлось в то, что при считывании данных типа String из com порта,
Не вижу в коде ничего даже отдаленно напоминающего о прерывании.
А какая разница, если прерывания в данном случае вообще не нужны?
Опять же, как видно из поста ТС, не любые прерывания ему "по средствам".
Ну удачно тебе помогать человеку, который говорит одно, а делает другое, раз никакой разницы.