Consultas, desarrollo de programas y petición de presupuestos:

domingo, 8 de enero de 2012

Mi primera aplicacion con Gambas y Arduino



Arduino y Gambas
Mi primera aplicación

Hoy os traigo mi primera aplicación con Gambas y Arduino.
Es algo muy sencillo,el tipico encendido de led y apagado, pero bueno... por algun lado hay que empezar... :)

Hay que diferenciar 2 partes:
La programación de arduino:
Lo primero que hace es conectarse al puerto serie a una velocidad 9600, y mandar un mensaje "Conectado con el Arduino.Hello world". Luego entra en un loop, donde según reciba el valor "1" o "0", enciende o apaga el led conectado al puerto 13, enviando el correspondente mensaje al puerto de serie de "Arduino: He apagado/encendido el led 13"

int dato;
void setup()
{
// Inicializamos puerto serie a 9600 bps
Serial.begin(9600);
pinMode(13, OUTPUT);
// Enviamos "Hello World" con salto de línea al final
Serial.println("Conectado con el Arduino. Hello world!");
//arduino manda esta cadena al PC
}
void loop()
{
//¿Existen datos por el puerto serie?
if (Serial.available()) {
//Guardamos el dato por la variable dato
dato=Serial.read();
// Serial.println(dato);
switch (dato) {
case 49:
// escribo 1 en el PC y lo envio
//Apagamos el led 13
digitalWrite(13,LOW);
Serial.println("Arduino: He apagado el led 13");
break;
case 48:
// escribo 0 en el PC y lo envio al arduino
//Encendemos el led 13
digitalWrite(13,HIGH);
Serial.println("Arduino: He encendido el led 13");
break;
}
}
}


Por otro lado esta el programa en gambas (basado en el ejemplo que trae gambas sobre el puerto serie):

Lo que hace el programa es configurar el puerto serie, y esperar al que el usuario pulse el boton de "Abrir" que se encarga de abrir el puerto y dejar las propiedade del boton de icono led verde activo, para que podamos pulsar sobre el.

Cuando pulsas sobre el boton, manda un mensaje al arduino, el mensaje varia si esta encendido o apagado (variable "encendido")


' Gambas class file
PUBLIC encendido AS Boolean

PUBLIC SUB Form_Close()
IF Sport.Status = Net.Active THEN CLOSE Sport
END

PUBLIC SUB Button1_Click()
IF Sport.Status = Net.Active THEN
CLOSE Sport
Button1.Text = "Abrir"
Label3.Enabled = FALSE
ToolButtonLed.enabled = FALSE
ELSE
' Line parameters
Sport.PortName = TxtPort.Text
Sport.Speed = CmbSpeed.Text
Sport.Parity = CmbParity.Index
Sport.DataBits = CmbData.Text
Sport.StopBits = CmbStop.Text
' keep DTR on
Sport.FlowControl = ComboBox1.Index
Sport.Open()

TextArea1.Text = "Port Abierto : " & Sport.PortName & " Settings : " &
Sport.Speed & "," & Sport.Parity & "," & Sport.DataBits & "," &
Sport.StopBits & Chr(13) & Chr(10)
Button1.Text = "Cerrar"
Label3.Enabled = TRUE
ToolButtonLed.enabled = TRUE
END IF
END

PUBLIC SUB SPort_Read()
DIM s AS String
READ #Sport, s, Lof(Sport)
TextArea1.Text = TextArea1.Text & s
END


PUBLIC SUB ComboBox1_Click()
Sport.FlowControl = ComboBox1.Index
END


PUBLIC SUB Form_Open()
ME.center
cmbSpeed.Index = cmbSpeed.Find("9600")
END


PUBLIC SUB ToolButtonLed_Click()
IF encendido = FALSE THEN
TRY PRINT #Sport, "0" 'enciendo led
IF ERROR THEN Message.Error("tienes que abrir el puerto")
ToolButtonLed.Picture = Picture["ledVerdeEncendido.jpg"]
encendido = TRUE
ELSE
PRINT #Sport, "1" 'apago led
ToolButtonLed.Picture = Picture["ledVerdeApagado.jpg"]
encendido = FALSE
ENDIF
END

Os dejo un video para que veais como funciona:
http://www.youtube.com/watch?feature=player_embedded&v=2LdRMIEhfyw


Codigo fuentes:
Arduino: puertoSerieEncendidoYapagado.pde
Gambas: SerialPort-Arduino 0.0.18.tar.gz

fuentes:
 Me he basado en las explicaciones de este blog:
http://www.craswer.net/2011/02/arduino-y-puerto-serie/
Y en el ejemplo que trae gambas2 sobre el puerto serie.

No hay comentarios:

Publicar un comentario