Обработка данных с 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-х символов
Большое спасибо, попробую