Обработка данных с COM порта
- Войдите на сайт для отправки комментариев
Пнд, 21/08/2017 - 06:28
Здравствуйте, только начал знакомиться с ардуинкой, и возникла проблема, которую не получается решить:
С COM порта вводится 3х значное число, далее ардуинка разбивает это число на 3 части по 3 символа каждая и записывает их в значения светодиода, но это только в теории ( хотя алгоритм работает в Visual studio), на практике же значение записывется только в переменную blue, в остольных ничего,
как это решить я не предсталяю, очень надеюсь на помощь, заранее спасибо
Вот код:
int value; // освобождаем память в контроллере для переменой порта int red=21, green=21, blue=11;//освобождаем память в контроллере для переменных #include <Adafruit_NeoPixel.h> #define PIN 6 // номер порта к которому подключен модуль #define count_led 24 // количество светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(count_led, PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(9600); // подключаем последовательный порт pinMode(13, OUTPUT); // объявляем пин 13 как выход pixels.begin(); pixels.show(); // Устанавливаем все светодиоды в состояние "Выключено" } void loop() { if (Serial.available()) // проверяем, поступают ли какие-то команды { value = Serial.read(); // переменная value равна полученной команде red = (value / 100000000)*100+((value % 100000000) / 10000000)*10+((value % 10000000) / 1000000);// записываем первые 3 цифры value в red green = ((value % 1000000) / 100000)*100 + ((value % 100000) / 10000)*10 + ((value % 10000) / 1000); // записываем средние 3 цифры value в green blue = ((value % 1000) / 100)*100 + ((value % 100) / 10)*10 + ((value % 10) / 1);// записываем последние 3 цифры value в blue //значения диодов pixels.setPixelColor(0, pixels.Color(red,green,blue)); pixels.setPixelColor(1, pixels.Color(red,green,blue)); pixels.setPixelColor(2, pixels.Color(red,green,blue)); pixels.setPixelColor(3, pixels.Color(red,green,blue)); pixels.setPixelColor(4, pixels.Color(red,green,blue)); pixels.setPixelColor(5, pixels.Color(red,green,blue)); pixels.show(); Serial.write(green); } }
С COM порта вводится 3х значное число
не с компорта, а в интерфейс UART контроллера, и не число, а ASCII символы.
// проверяем, поступают ли какие-то команды
не команды, а символы.
// переменная value равна полученной команде
тип переменной не int, а char
*кароче - учи матчасть. Serial
Спасибо, учту, но как у меня работало с передачей 3х символов?
value =
Serial
.read(); // принимает один символ
если нужно принимать трёхзначную цифру, то нужно собирать символы в строку и преобразовывать строку с число - в ссылке про сериал есть какая функция
как вариант - ты передавал строку из 3-х символов
Большое спасибо, попробую