seriale e programma grafico

ciao ragazzi, non sono un esperto di arduino nè di programamzione, però voglio fare una domanda, vorrei poter fare un programma grafico comprendente un pulsante " ON/OFF" e vorrei che quando ci clikko sopra mi accende o spegne il led, premetto che ovviamente su arduino ho gia fatto questo tipo di sketch, ma non saprei da dove iniziare con la seriale e come o meglio in che linguaggio è meglio scrivere il programma, io trovo facile e volendo l’ho già fatto con phyton ( gia fatto solo la grafica con il pulsante) MI POTETE DARE UNA MANO CON TANTA PAZIENZA? :-[ :-[

Ciao fabry085, benvenuto nel mondo Arduino. Il programma grafico lo puoi scrivere con il linguaggio che più ti piace, l'importante è che ti permetta di "intergire" con la seriale (e con python non ci son problemi).

Ti consiglio di partire con i mumerosi esempi che ci sono nella sezione Learning, nella fattispecie nella sottosezione Communication.

Guarda caso, tra gli esempi c'è proprio qualcosa analogo a quello che vuoi fare tu ;): http://arduino.cc/en/Tutorial/PhysicalPixel (considera solo prima parte di codice, relativa allo sketch Arduino; la seconda è relativa a Processing.. )

Con il tuo programmino Python ti sarà quindi sufficiente mandare "H" sulla seriale per accendere il led, oppure "L" per spegnerlo..

Ok perfetto, per adesso ho capito, ma ora spostandosi sul programma scritto con phyton come faccio a mandare "H" sulla seriale per accendere il led, oppure "L" per spegnerlo? immagino che devo inserire del codice ( che non so :-( ) se vuoi posso provare a postare il codice del programma scritto con phyton.

Ciao, puoi per esempio usare pySerial: http://pyserial.sourceforge.net/

Se poi usi la funzione di ricerca nel forum (in alto a dx) e provi a cercare python o pyserial troverai molto materiale.

Buona lettura! :D

VOGLIO RINGRAZIARE PITUSSO per la sua diponibilità.

Ho letto un po ma essendo che non me ne capisco molto purtroppo da autodidatta non riesco a fare quello che voglio, di seguito posto il codice phyton, se qualche cristiano ( o non ) mi può dare una mano lo ringrazio infinitamente. ( mentre per quanto riguarda il codice arduino ho fatto che fare un copia incolla dal sito che mi è stato fornito prima) Nel seguente programma ho impostato due bottoni uno "ON" e uno "OFF" , a questi vorrei poterli dare la possibilità di interagire con il led dell'arduino.

!/usr/bin/env python

-- coding: utf-8 --

generated by wxGlade 0.6.3 on Wed Nov 17 17:40:31 2010

import wx

begin wxGlade: extracode

end wxGlade

class MyFrame(wx.Frame): def init(self, *args, **kwds):

begin wxGlade: MyFrame.init

kwds["style"] = wx.DEFAULT_FRAME_STYLE wx.Frame.init(self, *args, **kwds) self.text_titolo = wx.TextCtrl(self, -1, " accensione led", style=wx.TE_CENTRE) self.button_on = wx.Button(self, -1, "ON", style=wx.BU_BOTTOM) self.panel_1 = wx.Panel(self, -1) self.button_off = wx.Button(self, -1, "OFF", style=wx.BU_BOTTOM)

self.set_properties() self.do_layout()

end wxGlade

def __set_properties(self):

begin wxGlade: MyFrame.__set_properties

self.SetTitle("frame_1") self.text_titolo.SetMinSize((400, 50)) self.text_titolo.SetBackgroundColour(wx.Colour(0, 127, 255)) self.text_titolo.SetForegroundColour(wx.Colour(255, 127, 0)) self.text_titolo.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) self.button_on.SetMinSize((150, 100)) self.button_on.SetBackgroundColour(wx.Colour(127, 255, 0)) self.button_on.SetForegroundColour(wx.Colour(255, 127, 0)) self.button_on.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, "")) self.button_off.SetMinSize((150, 100)) self.button_off.SetBackgroundColour(wx.Colour(255, 0, 0)) self.button_off.SetForegroundColour(wx.Colour(255, 127, 0)) self.button_off.SetFont(wx.Font(15, wx.DEFAULT, wx.NORMAL, wx.NORMAL, 0, ""))

end wxGlade

def __do_layout(self):

begin wxGlade: MyFrame.__do_layout

sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_2 = wx.BoxSizer(wx.VERTICAL) sizer_3 = wx.BoxSizer(wx.HORIZONTAL) sizer_2.Add(self.text_titolo, 0, 0, 0) sizer_3.Add(self.button_on, 0, 0, 0) sizer_3.Add(self.panel_1, 1, wx.EXPAND, 0) sizer_3.Add(self.button_off, 0, 0, 0) sizer_2.Add(sizer_3, 1, wx.EXPAND, 0) sizer_1.Add(sizer_2, 1, wx.EXPAND, 0) self.SetSizer(sizer_1) sizer_1.Fit(self) self.Layout()

end wxGlade

end of class MyFrame

if name == "main": app = wx.PySimpleApp(0) wx.InitAllImageHandlers() frame_1 = MyFrame(None, -1, "") app.SetTopWindow(frame_1) frame_1.Show() app.MainLoop()

ooopps, c'è pure una pagina nel playground :D http://www.arduino.cc/playground/Interfacing/Python

Sostanzialmente, dopo aver installato la pySerial di cui già ti ho fornito link, puoi inviare via seriale così:

import serial # la pySerial
ser = serial.Serial('/dev/tty.usbserial', 9600)
ser.write('H')

P.S. Se usi Debian puoi installare direttamente da repository il pacchetto python-serial

ciao , si si la pagina l'avevo gia vista, ma questo codice lo devo mettere all'inizio del codice del programma phyton? Magari puoi dirmi dove lo devo inserire? Non è che voglio la pappa pronta ma purtroppo io non me ne capisco ne di arduino ne di linguaggio di programmazione, ma il mio cervellino ( molto molto limitato) se non vede un esempio completo fatto non capisce nulla, mi basterebbe una volta il codice completo per poi poterci studiare sopra , apliarlo,modificarlo ecc..ecc. ignorante come sono non so neanche l'inglese devo ricorrere sempre a traduttori.. :-( sono messo male male.

nel main del python, tranne l'include che si mette insieme all'altra. In realtà quello che noi chiamiamo setup in quasi tutti i linguaggi è il main, e il setup non esiste (è un ciclo infinito, ma nei sistemi multithread o multiprocesso piuttosto che sprecare CPU ci si mette in attesa di un evento (che sia il trascorrere di un determinato periodo di tempo come un interrupt)

Nello specifico, gli import vanno in testa al codice

import wx
import serial

devi poi dichiarare la seriale che corrisponde ad Arduino (la stessa che vedi utilizzata sull'IDE- nel mio caso /dev/ttyUSB0)

ser = serial.Serial('/dev/ttyUSB0', 9600)

Fatto questo devi associare alla pressione del button la scrittura su seriale. Per esempio, per il button ON puoi scrivere qualcosa del genere:

self.button_on.Bind(wx.EVT_BUTTON, self._buttonOnClick)

Alla pressione del button eseguiamo la funzione specificata (_buttonOnClick).

Tale funzione va a scrivere sulla seriale il valore che ci interessa:

   def _buttonOnClick(self,event):
      ser.write('H')

Puoi fare la medesima cosa con il botton OFF. Ora direi che hai davvero tutti gli strumenti per completare questo progettino.