@RieldaBot
Начинающий программист Python

Python Serial, Tkinter | В чем моя ошибка?

я делаю код чтобы когда я выбираю цвет в color picker из модуля Tkinter, он отправлялся на порт Ардуино.

Вот мои коды:
Arduino:
#include <FastLED.h>
#define NUM_LEDS 53
#define DATA_PIN 6

CRGB leds[NUM_LEDS];

void setup() {
  Serial.begin(9600);
  FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);
}

void loop() {
  while (Serial.available() > 0) {

    // look for the next valid integer in the incoming serial stream:
    int red = Serial.parseInt();
    // do it again:
    int green = Serial.parseInt();
    // do it again:
    int blue = Serial.parseInt();

    // look for the newline. That's the end of your sentence:
    if (Serial.read() == '\n') {
      red = constrain(red, 0, 255);
      green = constrain(green, 0, 255);
      blue = constrain(blue, 0, 255);
  

      FastLED.setBrightness(255);
  
      fill_solid( leds, NUM_LEDS, CRGB(red, green, blue));
      FastLED.show();
    }
  }
}


Python:
from tkinter import *
 
from tkinter import colorchooser

import serial
import time

arduino = serial.Serial(port='COM3', baudrate=9600, timeout=.1)
def choose_color():
 
    color_code = colorchooser.askcolor(title ="Choose color")


def write_read(x):
    arduino.write(bytes(x, 'utf-8'))
    time.sleep(0.05)
    data = arduino.readline()
    return data

root = Tk()
button = Button(root, text = "Select color",
                   command = choose_color)
button.pack()
root.geometry("300x300")
root.mainloop()

while 1:
    color_code = choose_color(color_code[0])
    color_result_rgb = ' '.join(str(int(x)) for x in rgb_tuple)
    value = write_read(color_result_rgb)
    time.sleep(1)

В командную строку ничего не выводится, и на порт ничего не отправляется, помогите исправить.
  • Вопрос задан
  • 59 просмотров
Решения вопроса 2
@kalapanga
Как минимум, цвет выбирается в одну переменную, а отправляется какая-то совершенно другая, а о той просто забываем.
Ответ написан
Комментировать
Vindicar
@Vindicar
root.mainloop()
Этот вызов показывает окно Tkinter и уходит в цикл обработки событий. Цикл длится пока окно не закрыто (т.е. пока твоя программа работает).
Твой цикл while 1: не будет выполнен до этого момента.
Так что лучше производи весь ввод-вывод в обработчике choose_color(), или добавь отдельную кнопку для отправки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы