Обработка данных с COM порта

Erop1928
Offline
Зарегистрирован: 21.08.2017

Здравствуйте, только начал знакомиться с ардуинкой, и возникла проблема, которую не получается решить:

С 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);

  }
}

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Erop1928 пишет:

С COM порта вводится 3х значное число

не с компорта, а в интерфейс UART контроллера, и не число, а ASCII символы.

// проверяем, поступают ли какие-то команды

не команды, а символы.

// переменная value равна полученной команде

тип переменной не int, а char

*кароче - учи матчасть. Serial

Erop1928
Offline
Зарегистрирован: 21.08.2017

Спасибо, учту, но как у меня работало с передачей 3х символов?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

value = Serial.read(); // принимает один символ

если нужно принимать трёхзначную цифру, то нужно собирать символы в строку и преобразовывать строку с число - в ссылке про сериал есть какая функция

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Erop1928 пишет:
Спасибо, учту, но как у меня работало с передачей 3х символов?

как вариант - ты передавал строку из 3-х символов

Erop1928
Offline
Зарегистрирован: 21.08.2017

Большое спасибо, попробую