Arduino - Tcl/Tk

AttachmentSize
Binary Data tcl_tk.ino297 bytes
File led.tcl1.12 KB
Electrónica: 
Informática: 

Un amigo me ha comentado que le gusta mucho Arduino, pero que no sabe cómo hacer la conexión serie y que la programación en C o C++ no es lo suyo. Bueno, yo le he dicho que hay una plataforma muy buena: Tcl/Tk. De hecho, este lenguaje de programación se utiliza bastante en electrónica. Diré que Tcl es el lenguaje de programación y Tk la GUI. Tcl es un lenguaje interpretado muy potente y muy fácil de aprender. Además, se puede expandir mediante C -yo eso no lo he probado-. Tk es su interfaz gráfica. Creo que originalmente soportaba Tcl y C pero ahora tenemos la posibilidad de ejecutarlo bajo Perl, Pythom y Rubi también.

¿Por qué utilizar Tcl/Tk para desarrollar para Arduino?

  • Es fácil de instalar (en la versión Windows ya está incluido. Ver más abajo)
  • Es fácil de aprender
  • Tiene solucionado el "problema" de la comunicación con el puerto serie
  • Para aplicaciones pequeñas/medianas me parece muy válido
  • Es multiplataforma
  • Es gratuito

Como ejemplo básico, vamos a encender y apagar un led desde nuestro PC. El código para Arduino es:

int ledPin = 9;
int val;

void setup()
{
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  if (Serial.available()) {
    val = Serial.read();
    if (val == 'H') {
      digitalWrite(ledPin, HIGH);
    }
    else if (val == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }
}

Y nuestra aplicación en Tcl/Tk:

package require Tk

# Abrir el puerto serie
set puertoSerie [open com2: r+]
fconfigure $puertoSerie -mode "9600,n,8,1"
fconfigure $puertoSerie -blocking 0 -buffering none

# window manager
wm title . "Demostracion Tcl-Tk"
wm iconname . "Arduino"
#Cerrar el puerto al cerrar la aplicación
wm protocol . WM_DELETE_WINDOW Cerrar

# Widgets...
label .msg -justify left -text "Clicka para cambiar el estado del led"
pack .msg -side top
# Botones
button .boton -text "Encender" -width 10
pack .boton -side top -expand yes -pady 2

# Capturar eventos
bind .boton <Button> { EncenderApagar %W }

proc EncenderApagar {boton} {
  set accion [$boton cget -text]
  
  if { $accion eq "Encender" } {
    # Cambiamos el texto del botón y enviamos una H al puerto serie
    $boton configure -text "Apagar"
    puts $::puertoSerie "H"
  } else {
    # Cambiamos el texto del botón y enviamos una L al puerto serie
    $boton configure -text "Encender"
    puts $::puertoSerie "L"
  }  
}

proc Cerrar {} {
  close $::puertoSerie
  exit
}

He de decir que no sé programar en Tcl/Tk pero esto es lo que he podido aprender en media hora. De todas formas, intentaré hacer todas las cosillas que vaya haciendo en Qt con Tcl/Tk. Por cierto, si no te gusta que aspecto tiene la ventana puedes utilizar los ttk::.

Vale, ¿cómo me instalo Tcl/Tk?

Pues si ya tienes el IDE de Arduino para Windows ¡¡ya tienes Tcl/Tk!! Lo encontraras en: path_ide/hardware/tools/avr/bin

Supongo que para que el fichero lo interprete deberás asociar la extensión tcl al ejecutable del intérprete. En mi caso, como me di cuenta después de que el IDE ya incluía Tcl/Tk me instalé el paquete de ActiveState y eso lo manejó el instalador...

Bueno, en linux es super fácil con el gestor de paquetes de turno -no me acuerdo de memoria, pero si buscas tcl y tk los verás seguro-. Para Windows, os recomiendo que instaléis la versión de ActiveState que si no recuerdo mal es sólo un instalable.

Dónde aprender

Para aprender Tcl yo visitaría el sitio oficial: Tcl/Tk y este manual Tcl programming Para Tk tenemos este fabuloso tutorial TkDocs manual Espero que os haya picado el gusanillo y os vicieis con Arduino jjejejej

Social_buttons: