Светодиодная лента RGB, управляемая через PySerial, работает лишь отчасти

Я пытаюсь настроить светодиодную ленту из 30 RGB-светодиодов (модель WS2801). Лента подключена к Arduino Uno и внешнему источнику питания, и цель состоит в том, чтобы отправлять цвета на Arduino с помощью PySerial, которые затем отображаются на светодиодной ленте.

Я пытаюсь разобраться в коммуникациях, но у меня с этим возникают трудности, особенно из-за неточной типизации Python.

Я написал код, который генерирует плавные переходы цветов, и добился того, что полоска действительно отображает довольно плавный переход цветов, к сожалению, цвета неправильные.

Теперь я предполагаю, что где-то что-то переполняется, особенно потому, что такие цвета, как 0xFF0000 (красный), отображаются как желтый тон, что указывает на то, что поверх красного добавляется также и зеленый.

Код Python с использованием pySerial:

@classmethod
def set_lights(self: RGBHardware, colors: List[int]) -> None:
    for i in range(len(colors)):
        rgb = color_to_rgb(colors[i])
        self.arduino.write(chr(76).encode()) # 'L'
        self.arduino.write(chr(i).encode())
        self.arduino.write(chr(rgb[0]).encode())
        self.arduino.write(chr(rgb[1]).encode())
        self.arduino.write(chr(rgb[2]).encode())
    self.arduino.write(chr(90).encode()) # 'Z'

@classmethod
def turn_on(self) -> None:
    self.arduino = serial.Serial('/dev/ttyACM0', 115200)
    if self.arduino.isOpen:
        self.arduino.close()
    self.arduino.open()
    pass

Код, работающий на Arduino Uno:

void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L)
  clock_prescale_set(clock_div_1); // Включить 16 МГц на Trinket
#endif

  Serial.begin(115200);
  strip.begin();
  // Обновить содержимое светодиодов, для начала они все «выключены»
  strip.show();
}

void loop() {
   while (Serial.available()) {
        uint8_t serial = Serial.read();
        if (serial == 'Z') {
            strip.show();
        } else if (serial == 'L') {
            int i = getNextInput();
            int r = getNextInput();
            int g = getNextInput();
            int b = getNextInput();
            strip.setPixelColor(i, Color(r,g,b));
        }
   }
}

uint8_t getNextInput() {
  while(!Serial.available()); // ждем символ
  return Serial.read();
}

У меня такое сильное чувство, что я упускаю какую-то незначительную деталь, и это очень расстраивает.

Любая помощь будет высоко оценена!

РЕДАКТИРОВАНИЕ: Поэтому я записал некоторые данные и вставил результаты ниже. Я обнаружил, что не вся светодиодная лента обновлялась, и ни одна из них не имела правильного цвета. Однажды даже символ "Z" как будто пропал (из-за чего лента полностью обновилась), так что цвет вообще не отображался.

Я также забыл упомянуть ранее, что я использую Celery в Python для переключения света в качестве фоновой задачи.

Для записи результатов я использовал

print("i, R,G,B: " + str(i) + ", " + str(rgb[0]) + "," + str(rgb[1]) + "," + str(rgb[2])) для печати данных в Python и

Serial.println("i, R,G,B: " + String(i) + ", " + String(r) + "," + String(g) + "," + String(b)); чтобы сделать то же самое на Arduino.

Отправка красного цвета из Python:

[2018-07-23 16:13:57,121: WARNING/ForkPoolWorker-7] i, R,G,B: 0, 255,0,0
[2018-07-23 16:13:57,122: WARNING/ForkPoolWorker-7] i, R,G,B: 1, 255,0,0
[2018-07-23 16:13:57,123: WARNING/ForkPoolWorker-7] i, R,G,B: 2, 255,0,0
[2018-07-23 16:13:57,125: WARNING/ForkPoolWorker-7] i, R,G,B: 3, 255,0,0
[2018-07-23 16:13:57,126: WARNING/ForkPoolWorker-7] i, R,G,B: 4, 255,0,0
[2018-07-23 16:13:57,127: WARNING/ForkPoolWorker-7] i, R,G,B: 5, 255,0,0
[2018-07-23 16:13:57,127: WARNING/ForkPoolWorker-7] i, R,G,B: 6, 255,0,0
[2018-07-23 16:13:57,128: WARNING/ForkPoolWorker-7] i, R,G,B: 7, 255,0,0
[2018-07-23 16:13:57,129: WARNING/ForkPoolWorker-7] i, R,G,B: 8, 255,0,0
[2018-07-23 16:13:57,129: WARNING/ForkPoolWorker-7] i, R,G,B: 9, 255,0,0
[2018-07-23 16:13:57,131: WARNING/ForkPoolWorker-7] i, R,G,B: 10, 255,0,0
[2018-07-23 16:13:57,132: WARNING/ForkPoolWorker-7] i, R,G,B: 11, 255,0,0
[2018-07-23 16:13:57,132: WARNING/ForkPoolWorker-7] i, R,G,B: 12, 255,0,0
[2018-07-23 16:13:57,133: WARNING/ForkPoolWorker-7] i, R,G,B: 13, 255,0,0
[2018-07-23 16:13:57,134: WARNING/ForkPoolWorker-7] i, R,G,B: 14, 255,0,0
[2018-07-23 16:13:57,136: WARNING/ForkPoolWorker-7] i, R,G,B: 15, 255,0,0
[2018-07-23 16:13:57,137: WARNING/ForkPoolWorker-7] i, R,G,B: 16, 255,0,0
[2018-07-23 16:13:57,139: WARNING/ForkPoolWorker-7] i, R,G,B: 17, 255,0,0
[2018-07-23 16:13:57,140: WARNING/ForkPoolWorker-7] i, R,G,B: 18, 255,0,0
[2018-07-23 16:13:57,141: WARNING/ForkPoolWorker-7] i, R,G,B: 19, 255,0,0
[2018-07-23 16:13:57,142: WARNING/ForkPoolWorker-7] i, R,G,B: 20, 255,0,0
[2018-07-23 16:13:57,144: WARNING/ForkPoolWorker-7] i, R,G,B: 21, 255,0,0
[2018-07-23 16:13:57,145: WARNING/ForkPoolWorker-7] i, R,G,B: 22, 255,0,0
[2018-07-23 16:13:57,146: WARNING/ForkPoolWorker-7] i, R,G,B: 23, 255,0,0
[2018-07-23 16:13:57,147: WARNING/ForkPoolWorker-7] i, R,G,B: 24, 255,0,0
[2018-07-23 16:13:57,148: WARNING/ForkPoolWorker-7] i, R,G,B: 25, 255,0,0
[2018-07-23 16:13:57,149: WARNING/ForkPoolWorker-7] i, R,G,B: 26, 255,0,0
[2018-07-23 16:13:57,150: WARNING/ForkPoolWorker-7] i, R,G,B: 27, 255,0,0
[2018-07-23 16:13:57,151: WARNING/ForkPoolWorker-7] i, R,G,B: 28, 255,0,0
[2018-07-23 16:13:57,151: WARNING/ForkPoolWorker-7] i, R,G,B: 29, 255,0,0

Получил красный цвет на ардуино:

i, R,G,B: 0, 195,191,0
i, R,G,B: 1, 195,191,0
i, R,G,B: 2, 195,191,0
i, R,G,B: 3, 195,191,0
i, R,G,B: 4, 195,191,0
i, R,G,B: 5, 195,191,0
i, R,G,B: 6, 195,191,0
i, R,G,B: 7, 195,191,0
i, R,G,B: 8, 195,191,0
i, R,G,B: 9, 195,191,0
i, R,G,B: 10, 195,191,0
i, R,G,B: 11, 195,191,0
i, R,G,B: 12, 195,191,0
i, R,G,B: 13, 195,191,0
i, R,G,B: 14, 195,191,0
i, R,G,B: 15, 195,191,0
i, R,G,B: 16, 195,191,0
i, R,G,B: 17, 195,191,0
i, R,G,B: 18, 195,191,0
i, R,G,B: 19, 195,191,0
i, R,G,B: 20, 195,191,0
i, R,G,B: 21, 195,191,0
i, R,G,B: 22, 195,191,0
i, R,G,B: 23, 195,191,0
i, R,G,B: 24, 195,191,0
i, R,G,B: 25, 195,191,0
i, R,G,B: 26, 76,27,195

Отправка зеленого цвета из Python:

[2018-07-23 16:22:34,374: WARNING/ForkPoolWorker-8] i, R,G,B: 0, 0,255,0
[2018-07-23 16:22:34,376: WARNING/ForkPoolWorker-8] i, R,G,B: 1, 0,255,0
[2018-07-23 16:22:34,377: WARNING/ForkPoolWorker-8] i, R,G,B: 2, 0,255,0
[2018-07-23 16:22:34,378: WARNING/ForkPoolWorker-8] i, R,G,B: 3, 0,255,0
[2018-07-23 16:22:34,380: WARNING/ForkPoolWorker-8] i, R,G,B: 4, 0,255,0
[2018-07-23 16:22:34,381: WARNING/ForkPoolWorker-8] i, R,G,B: 5, 0,255,0
[2018-07-23 16:22:34,382: WARNING/ForkPoolWorker-8] i, R,G,B: 6, 0,255,0
[2018-07-23 16:22:34,383: WARNING/ForkPoolWorker-8] i, R,G,B: 7, 0,255,0
[2018-07-23 16:22:34,384: WARNING/ForkPoolWorker-8] i, R,G,B: 8, 0,255,0
[2018-07-23 16:22:34,385: WARNING/ForkPoolWorker-8] i, R,G,B: 9, 0,255,0
[2018-07-23 16:22:34,386: WARNING/ForkPoolWorker-8] i, R,G,B: 10, 0,255,0
[2018-07-23 16:22:34,387: WARNING/ForkPoolWorker-8] i, R,G,B: 11, 0,255,0
[2018-07-23 16:22:34,387: WARNING/ForkPoolWorker-8] i, R,G,B: 12, 0,255,0
[2018-07-23 16:22:34,388: WARNING/ForkPoolWorker-8] i, R,G,B: 13, 0,255,0
[2018-07-23 16:22:34,389: WARNING/ForkPoolWorker-8] i, R,G,B: 14, 0,255,0
[2018-07-23 16:22:34,389: WARNING/ForkPoolWorker-8] i, R,G,B: 15, 0,255,0
[2018-07-23 16:22:34,390: WARNING/ForkPoolWorker-8] i, R,G,B: 16, 0,255,0
[2018-07-23 16:22:34,390: WARNING/ForkPoolWorker-8] i, R,G,B: 17, 0,255,0
[2018-07-23 16:22:34,391: WARNING/ForkPoolWorker-8] i, R,G,B: 18, 0,255,0
[2018-07-23 16:22:34,392: WARNING/ForkPoolWorker-8] i, R,G,B: 19, 0,255,0
[2018-07-23 16:22:34,393: WARNING/ForkPoolWorker-8] i, R,G,B: 20, 0,255,0
[2018-07-23 16:22:34,393: WARNING/ForkPoolWorker-8] i, R,G,B: 21, 0,255,0
[2018-07-23 16:22:34,394: WARNING/ForkPoolWorker-8] i, R,G,B: 22, 0,255,0
[2018-07-23 16:22:34,395: WARNING/ForkPoolWorker-8] i, R,G,B: 23, 0,255,0
[2018-07-23 16:22:34,395: WARNING/ForkPoolWorker-8] i, R,G,B: 24, 0,255,0
[2018-07-23 16:22:34,396: WARNING/ForkPoolWorker-8] i, R,G,B: 25, 0,255,0
[2018-07-23 16:22:34,397: WARNING/ForkPoolWorker-8] i, R,G,B: 26, 0,255,0
[2018-07-23 16:22:34,398: WARNING/ForkPoolWorker-8] i, R,G,B: 27, 0,255,0
[2018-07-23 16:22:34,398: WARNING/ForkPoolWorker-8] i, R,G,B: 28, 0,255,0
[2018-07-23 16:22:34,399: WARNING/ForkPoolWorker-8] i, R,G,B: 29, 0,255,0

Получил зеленый цвет на Arduino:

i, R,G,B: 0, 0,195,191
i, R,G,B: 1, 0,195,191
i, R,G,B: 2, 0,195,191
i, R,G,B: 3, 0,195,191
i, R,G,B: 4, 0,195,191
i, R,G,B: 5, 0,195,191
i, R,G,B: 6, 0,195,191
i, R,G,B: 7, 0,195,191
i, R,G,B: 8, 0,195,191
i, R,G,B: 9, 0,195,191
i, R,G,B: 10, 0,195,191
i, R,G,B: 11, 0,195,191
i, R,G,B: 12, 0,195,191
i, R,G,B: 13, 0,195,191
i, R,G,B: 14, 0,195,191
i, R,G,B: 15, 0,195,191
i, R,G,B: 16, 0,195,191
i, R,G,B: 17, 0,195,191
i, R,G,B: 18, 0,195,191
i, R,G,B: 19, 0,195,191
i, R,G,B: 20, 0,195,191
i, R,G,B: 21, 0,195,191
i, R,G,B: 22, 0,195,191
i, R,G,B: 23, 0,195,191
i, R,G,B: 24, 0,195,191
i, R,G,B: 25, 0,195,191
i, R,G,B: 26, 76,28,0

Отправка синего цвета из Python:

[2018-07-23 16:26:52,416: WARNING/ForkPoolWorker-2] i, R,G,B: 0, 0,0,255
[2018-07-23 16:26:52,416: WARNING/ForkPoolWorker-2] i, R,G,B: 1, 0,0,255
[2018-07-23 16:26:52,417: WARNING/ForkPoolWorker-2] i, R,G,B: 2, 0,0,255
[2018-07-23 16:26:52,417: WARNING/ForkPoolWorker-2] i, R,G,B: 3, 0,0,255
[2018-07-23 16:26:52,418: WARNING/ForkPoolWorker-2] i, R,G,B: 4, 0,0,255
[2018-07-23 16:26:52,418: WARNING/ForkPoolWorker-2] i, R,G,B: 5, 0,0,255
[2018-07-23 16:26:52,419: WARNING/ForkPoolWorker-2] i, R,G,B: 6, 0,0,255
[2018-07-23 16:26:52,419: WARNING/ForkPoolWorker-2] i, R,G,B: 7, 0,0,255
[2018-07-23 16:26:52,420: WARNING/ForkPoolWorker-2] i, R,G,B: 8, 0,0,255
[2018-07-23 16:26:52,420: WARNING/ForkPoolWorker-2] i, R,G,B: 9, 0,0,255
[2018-07-23 16:26:52,421: WARNING/ForkPoolWorker-2] i, R,G,B: 10, 0,0,255
[2018-07-23 16:26:52,421: WARNING/ForkPoolWorker-2] i, R,G,B: 11, 0,0,255
[2018-07-23 16:26:52,422: WARNING/ForkPoolWorker-2] i, R,G,B: 12, 0,0,255
[2018-07-23 16:26:52,422: WARNING/ForkPoolWorker-2] i, R,G,B: 13, 0,0,255
[2018-07-23 16:26:52,423: WARNING/ForkPoolWorker-2] i, R,G,B: 14, 0,0,255
[2018-07-23 16:26:52,423: WARNING/ForkPoolWorker-2] i, R,G,B: 15, 0,0,255
[2018-07-23 16:26:52,424: WARNING/ForkPoolWorker-2] i, R,G,B: 16, 0,0,255
[2018-07-23 16:26:52,424: WARNING/ForkPoolWorker-2] i, R,G,B: 17, 0,0,255
[2018-07-23 16:26:52,425: WARNING/ForkPoolWorker-2] i, R,G,B: 18, 0,0,255
[2018-07-23 16:26:52,426: WARNING/ForkPoolWorker-2] i, R,G,B: 19, 0,0,255
[2018-07-23 16:26:52,427: WARNING/ForkPoolWorker-2] i, R,G,B: 20, 0,0,255
[2018-07-23 16:26:52,427: WARNING/ForkPoolWorker-2] i, R,G,B: 21, 0,0,255
[2018-07-23 16:26:52,428: WARNING/ForkPoolWorker-2] i, R,G,B: 22, 0,0,255
[2018-07-23 16:26:52,428: WARNING/ForkPoolWorker-2] i, R,G,B: 23, 0,0,255
[2018-07-23 16:26:52,429: WARNING/ForkPoolWorker-2] i, R,G,B: 24, 0,0,255
[2018-07-23 16:26:52,429: WARNING/ForkPoolWorker-2] i, R,G,B: 25, 0,0,255
[2018-07-23 16:26:52,430: WARNING/ForkPoolWorker-2] i, R,G,B: 26, 0,0,255
[2018-07-23 16:26:52,430: WARNING/ForkPoolWorker-2] i, R,G,B: 27, 0,0,255
[2018-07-23 16:26:52,431: WARNING/ForkPoolWorker-2] i, R,G,B: 28, 0,0,255
[2018-07-23 16:26:52,431: WARNING/ForkPoolWorker-2] i, R,G,B: 29, 0,0,255

Получил синий цвет на Arduino:

i, R,G,B: 0, 0,0,195
i, R,G,B: 1, 0,0,195
i, R,G,B: 2, 0,0,195
i, R,G,B: 3, 0,0,195
i, R,G,B: 4, 0,0,195
i, R,G,B: 5, 0,0,195
i, R,G,B: 6, 0,0,195
i, R,G,B: 7, 0,0,195
i, R,G,B: 8, 0,0,195
i, R,G,B: 9, 0,0,195
i, R,G,B: 10, 0,0,195
i, R,G,B: 11, 0,0,195
i, R,G,B: 12, 0,0,195
i, R,G,B: 13, 0,0,195
i, R,G,B: 14, 0,0,195
i, R,G,B: 15, 0,0,195
i, R,G,B: 16, 0,0,195
i, R,G,B: 17, 0,0,195
i, R,G,B: 18, 0,0,195
i, R,G,B: 20, 0,0,195
i, R,G,B: 23, 191,76,26

Отправка оранжевого цвета из Python:

[2018-07-23 16:29:20,725: WARNING/ForkPoolWorker-9] i, R,G,B: 0, 255,128,0
[2018-07-23 16:29:20,726: WARNING/ForkPoolWorker-9] i, R,G,B: 1, 255,128,0
[2018-07-23 16:29:20,727: WARNING/ForkPoolWorker-9] i, R,G,B: 2, 255,128,0
[2018-07-23 16:29:20,728: WARNING/ForkPoolWorker-9] i, R,G,B: 3, 255,128,0
[2018-07-23 16:29:20,729: WARNING/ForkPoolWorker-9] i, R,G,B: 4, 255,128,0
[2018-07-23 16:29:20,731: WARNING/ForkPoolWorker-9] i, R,G,B: 5, 255,128,0
[2018-07-23 16:29:20,732: WARNING/ForkPoolWorker-9] i, R,G,B: 6, 255,128,0
[2018-07-23 16:29:20,733: WARNING/ForkPoolWorker-9] i, R,G,B: 7, 255,128,0
[2018-07-23 16:29:20,734: WARNING/ForkPoolWorker-9] i, R,G,B: 8, 255,128,0
[2018-07-23 16:29:20,735: WARNING/ForkPoolWorker-9] i, R,G,B: 9, 255,128,0
[2018-07-23 16:29:20,736: WARNING/ForkPoolWorker-9] i, R,G,B: 10, 255,128,0
[2018-07-23 16:29:20,737: WARNING/ForkPoolWorker-9] i, R,G,B: 11, 255,128,0
[2018-07-23 16:29:20,738: WARNING/ForkPoolWorker-9] i, R,G,B: 12, 255,128,0
[2018-07-23 16:29:20,739: WARNING/ForkPoolWorker-9] i, R,G,B: 13, 255,128,0
[2018-07-23 16:29:20,740: WARNING/ForkPoolWorker-9] i, R,G,B: 14, 255,128,0
[2018-07-23 16:29:20,741: WARNING/ForkPoolWorker-9] i, R,G,B: 15, 255,128,0
[2018-07-23 16:29:20,742: WARNING/ForkPoolWorker-9] i, R,G,B: 16, 255,128,0
[2018-07-23 16:29:20,743: WARNING/ForkPoolWorker-9] i, R,G,B: 17, 255,128,0
[2018-07-23 16:29:20,744: WARNING/ForkPoolWorker-9] i, R,G,B: 18, 255,128,0
[2018-07-23 16:29:20,744: WARNING/ForkPoolWorker-9] i, R,G,B: 19, 255,128,0
[2018-07-23 16:29:20,745: WARNING/ForkPoolWorker-9] i, R,G,B: 20, 255,128,0
[2018-07-23 16:29:20,746: WARNING/ForkPoolWorker-9] i, R,G,B: 21, 255,128,0
[2018-07-23 16:29:20,747: WARNING/ForkPoolWorker-9] i, R,G,B: 22, 255,128,0
[2018-07-23 16:29:20,747: WARNING/ForkPoolWorker-9] i, R,G,B: 23, 255,128,0
[2018-07-23 16:29:20,749: WARNING/ForkPoolWorker-9] i, R,G,B: 24, 255,128,0
[2018-07-23 16:29:20,750: WARNING/ForkPoolWorker-9] i, R,G,B: 25, 255,128,0
[2018-07-23 16:29:20,750: WARNING/ForkPoolWorker-9] i, R,G,B: 26, 255,128,0
[2018-07-23 16:29:20,751: WARNING/ForkPoolWorker-9] i, R,G,B: 27, 255,128,0
[2018-07-23 16:29:20,752: WARNING/ForkPoolWorker-9] i, R,G,B: 28, 255,128,0
[2018-07-23 16:29:20,752: WARNING/ForkPoolWorker-9] i, R,G,B: 29, 255,128,0

Получил оранжевый цвет на Arduino:

i, R,G,B: 0, 195,191,194
i, R,G,B: 1, 195,191,194
i, R,G,B: 2, 195,191,194
i, R,G,B: 3, 195,191,194
i, R,G,B: 4, 195,191,194
i, R,G,B: 5, 195,191,194
i, R,G,B: 6, 195,191,194
i, R,G,B: 7, 195,191,194
i, R,G,B: 8, 195,191,194
i, R,G,B: 9, 195,191,194
i, R,G,B: 10, 195,191,194
i, R,G,B: 11, 195,191,194
i, R,G,B: 12, 195,191,194
i, R,G,B: 13, 195,191,194
i, R,G,B: 14, 195,191,194
i, R,G,B: 15, 195,191,194
i, R,G,B: 16, 195,191,194
i, R,G,B: 17, 195,191,194
i, R,G,B: 18, 195,191,194
i, R,G,B: 19, 195,191,194
i, R,G,B: 76, 23,195,191
i, R,G,B: 194, 128,0,76

Получил оранжевый цвет на Arduino (снова):

i, R,G,B: 0, 195,191,194
i, R,G,B: 1, 195,191,194
i, R,G,B: 2, 195,191,194
i, R,G,B: 3, 195,191,194
i, R,G,B: 4, 195,191,194
i, R,G,B: 5, 195,191,194
i, R,G,B: 6, 195,191,194
i, R,G,B: 7, 195,191,194
i, R,G,B: 8, 195,191,194
i, R,G,B: 9, 195,191,194
i, R,G,B: 10, 195,191,194
i, R,G,B: 11, 195,191,194
i, R,G,B: 12, 195,191,194
i, R,G,B: 13, 195,191,194
i, R,G,B: 14, 195,191,194
i, R,G,B: 15, 195,191,194
i, R,G,B: 16, 195,191,194
i, R,G,B: 17, 195,191,194
i, R,G,B: 18, 195,191,194
i, R,G,B: 128, 0,76,24
i, R,G,B: 27, 195,191,194

Еще одно изменение: Интересно также то, что основной цвет (например, когда я посылаю красный, большинство светодиодов желтые) остается одним и тем же каждый раз, когда я пытаюсь это сделать. Но количество светодиодов, которые передаются, различается с каждой попыткой. То же самое касается последних одного или двух светодиодов, которые получает Arduino. Их цвета и индексы везде разные.

, 👍0


1 ответ


Лучший ответ:

1

Это

...
  self.arduino.write(chr(76).encode()) # 'L'
  self.arduino.write(chr(i).encode())
  self.arduino.write(chr(rgb[0]).encode())
  self.arduino.write(chr(rgb[1]).encode())
  self.arduino.write(chr(rgb[2]).encode())
self.arduino.write(chr(90).encode()) # 'Z'
...

следует писать:

  self.arduino.write(b'L')
  self.arduino.write(i.to_bytes(1,'big'))
  self.arduino.write(bytes(rgb))
self.arduino.write(b'Z')

Так гораздо удобнее читать; можно провести еще больший рефакторинг:

  sout = b'L' + i.to_bytes(1,'big') + bytes(rgb)
  self.arduino.write(sout)
self.arduino.write(b'Z')

Вы также тратите силы здесь:

Serial.println("i, R,G,B: " + String(i) + ", " + String(r) + "," + String(g) + "," + String(b));

Это следовало бы сказать примерно так:

Serial.print(i);
Serial.print(", ");
Serial.print(r);
Serial.print(", ");
Serial.print(g);
Serial.print(", ");
Serial.println(b);

Это устраняет три временных объекта String, которые вы создавали с помощью String().

Остальная часть кода выглядит так, как будто она должна работать, поэтому вам следует попробовать устранить неполадки. Вы можете:

  • Уменьшите скорость передачи данных, пока не заработает
  • Попробуйте 9600 бод и увеличивайте скорость, пока она не перестанет работать
  • Попробуйте программу-образец последовательного порта, сначала убедитесь, что последовательная часть работает правильно
  • Напишите собственную минимальную тестовую программу, убедитесь сначала, что последовательный порт работает правильно.
,