Yo,
Ça faisait un moment que j'étais pas repassé sur ce sujet. Mais mieux vaut tard que jamais, je mets les codes ici pour ceux que ça pourrait intéresser.
Bon du coup c'est ultra basique, mais y'a moyen d'étoffer tout ça en trouvant d'autres trucs à controler via une interface graphique.
Le sketch Arduino (pour le coup c'est vraiment basique haha)
const byte rpin = 9;
const byte gpin = 10;
const byte bpin = 11;
void setup() {
pinMode(rpin, OUTPUT);
pinMode(gpin, OUTPUT);
pinMode(bpin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 5) {
int rval = Serial.parseInt();
int gval = Serial.parseInt();
int bval = Serial.parseInt();
if(rval >= 0 && rval <= 255 && gval >= 0 && gval <= 255 && bval >= 0 && bval <= 255 && Serial.read() == '\n'){
analogWrite(rpin, rval);
analogWrite(gpin, gval);
analogWrite(bpin, bval);
}
}
}
Et le python
# -*- coding: ISO-8859-1 -*-
import kivy
from kivy.uix.gridlayout import GridLayout
from kivy.uix.slider import Slider
from kivy.uix.label import Label
from kivy.app import App
import serial
import sys
SERIALPORT = "/dev/tty.usbmodem1d11" ##def du port série
try:
ser = serial.Serial(SERIALPORT, 9600)
except serial.SerialException:
print "no device connected - exiting"
sys.exit()
class app(App):
def build(self):
self.data = str('0,0,0')
demo = GridLayout(cols = 4, rows = 3)
label1 = Label(
text = "R",
)
label2 = Label(
text = "V",
)
label3 = Label(
text = "B",
)
label7 = Label(
text = "General",
)
slider1 = Slider(
orientation = 'vertical',
pos_hint = {'x':0.5},
min = 0,
max = 255,
value = 0,
step = 1)
slider2 = Slider(
orientation = 'vertical',
pos_hint = {'x':0.5},
min = 0,
max = 255,
value = 0,
step = 1)
slider3 = Slider(
orientation = 'vertical',
pos_hint = {'x':0.5},
min = 0,
max = 255,
value = 0,
step = 1)
slider4 = Slider(
orientation = 'vertical',
pos_hint = {'x':0.5},
min = 0,
max = 100,
value = 100,
step = 1)
label4 = Label(
text = str(int(slider1.value))
)
label5 = Label(
text = str(int(slider2.value))
)
label6 = Label(
text = str(int(slider3.value))
)
label8 = Label(
text = str(int(slider4.value))
)
#Construction de l'interface graphique
demo.add_widget(label1)
demo.add_widget(label2)
demo.add_widget(label3)
demo.add_widget(label7)
demo.add_widget(slider1)
demo.add_widget(slider2)
demo.add_widget(slider3)
demo.add_widget(slider4)
demo.add_widget(label4)
demo.add_widget(label5)
demo.add_widget(label6)
demo.add_widget(label8)
#def des actions
def on_touch_event1(slider1, value):
#print "valR = ", value
label4.text = str(int(value))
update_data()
def on_touch_event2(slider2, value):
#print "valV = ", value
label5.text = str(int(value))
update_data()
def on_touch_event3(slider3, value):
#print "valB = ", value
label6.text = str(int(value))
update_data()
def on_touch_event4(slider4, value):
#slider qui controle l'intensité générale en multipliant les autres par un facteur entre 0 et 1
label8.text = str(int(value))
update_data()
def update_data():
self.data = str(int(slider1.value)*int(slider4.value)/100) + ',' + str(int(slider2.value)*int(slider4.value)/100) + ',' + str(int(slider3.value)*int(slider4.value)/100) + '\n'
ser.write(self.data)
slider1.bind(value = on_touch_event1)
slider2.bind(value = on_touch_event2)
slider3.bind(value = on_touch_event3)
slider4.bind(value = on_touch_event4)
return demo
if __name__ == '__main__':
app().run()
Hésitez pas si vous avez des questions, et encore merci pour votre aide.