Pages: 1 [2]   Go Down
Author Topic: [résolu]Moniteur et communication série  (Read 1647 times)
0 Members and 1 Guest are viewing this topic.
France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Cela dit, ça ne change rien à mon problème, le comprtement reste le même. Mais bon au moins j'ai appris deux trois trucs pour mieux coder.
Je viens de voir un truc pas beau du tout dans le code python smiley-wink

Tu ouvre le port série à chaque appel de updateData() !
Ouvre le port série une fois pour toute lors de l'instanciation de ta classe app, puis fait uniquement l'appel à ser.write(data) dans upateData().
Si l'auto reset à l'ouverture du port série se fait (ce qui semble le cas) ton arduino reboot à chaque fois et le temps du lancement tu "perd" les info smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep ça roule maintenant =D
Merci pour vos réponses.
Logged

Offline Offline
Sr. Member
****
Karma: 0
Posts: 332
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Essaye avec :  
Code:
ser.write(self.data.encode("utf8"))

Grillé, raté smiley-grin
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Yep ça roule maintenant =D
Publie ton code arduino et python qui marche (si ça ne te dérange pas bien sûr).
Cela permettra aux futurs lecteurs de ce topic de résoudre leurs problèmes smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 1
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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)
Code:
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
Code:
# -*- 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.



Logged

Pages: 1 [2]   Go Up
Jump to: