SHARE
TWEET

Arduino + Python + Firmata

emanueleg Jun 17th, 2013 207 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Programma per il controllo di Arduino da
  2. # Raspberry Pi tramite Python + Firmata
  3. #
  4. # Ispirato dal progetto di Stewart C. Russell's
  5. # pubblicato in The MagPi, n. 7 (Nov. 2012)
  6. # http://www.themagpi.com/
  7.  
  8. import pyfirmata
  9. import os
  10. from Tkinter import *
  11.  
  12. # controllo esistenza dispositivo passato come argomento
  13. if len(sys.argv) < 2:
  14.     sys.exit('Utilizzo: %s nome_device_seriale' % sys.argv[0])
  15.  
  16. if not os.path.exists(sys.argv[1]):
  17.     sys.exit('ERROR: La porta %s non sembra connessa!' % sys.argv[1])
  18.  
  19. # connessione alla scheda
  20. device_port = str(sys.argv[1])
  21. board = pyfirmata.Arduino(device_port)
  22. myiter = pyfirmata.util.Iterator(board)
  23. myiter.start()
  24.  
  25. # impostazione dei pin:
  26. # a(nalogici) / d(igitali) : numero pin : i(nput) / p(wm) / s(ervo) / o(output)
  27. pin0 = board.get_pin('a:0:i')
  28. pin3 = board.get_pin('d:3:p')
  29.  
  30. # salta se non e' disponibile il dato
  31. while pin0.read() is None:
  32.         pass
  33.  
  34. # lettura del valore in uscita dal partitore di tensione
  35. # come percentuale di Analog REF
  36. def get_potenziometro():
  37.         label_potenziometro = "Partizione resistenza:\n%3.1f %% di Vref" % (pin0.read()*100.0)
  38.         label.config(text = label_potenziometro)
  39.         root.after(500, get_potenziometro)
  40.  
  41. # impostazione della percentuale PWM per il pilotaggio del led
  42. def set_led(x):
  43.         pin3.write(float(x) / 100.0)
  44.  
  45. # chiusura della finestra
  46. def cleanup():
  47.         pin0.read()
  48.         pin3.write(0)
  49.         board.exit()
  50.         root.destroy()
  51.  
  52. # disegno dell'interfaccia grafica mettendo uno sotto l'altro
  53. # i blocchi della barra di scorrimento (scale) per il led,
  54. # un separatore (frame) e l'etichetta (label) con il valore
  55. # acquisito.
  56. root = Tk()
  57. root.wm_title("ArduPiFirmata 1.0")
  58. root.wm_protocol("WM_DELETE_WINDOW",cleanup)
  59.  
  60. scale = Scale(root, command = set_led, orient = HORIZONTAL, length = 300, label = 'Luminosita\' led (in %):')
  61. scale.pack(anchor = 'nw')
  62.  
  63. separator = Frame(height = 20, bd = 1, relief = SUNKEN)
  64. separator.pack(anchor = 'nw')
  65.  
  66. label = Label(root)
  67. label.pack(anchor = 'nw')
  68.  
  69. # avvio acquisizione periodica dall'input analogico
  70. root.after(500, get_potenziometro)
  71. root.mainloop()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top