Официальный сайт компании Arduino по адресу arduino.cc
Опрос 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 порта,
Не вижу в коде ничего даже отдаленно напоминающего о прерывании.
А какая разница, если прерывания в данном случае вообще не нужны?
Опять же, как видно из поста ТС, не любые прерывания ему "по средствам".
Ну удачно тебе помогать человеку, который говорит одно, а делает другое, раз никакой разницы.