Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



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



viernes, 18 de noviembre de 2011

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:




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.

Nota: 22/01/2012
Lo que esta leyendo el arduino es la "salida" que genera la aplicación Gambas.

Gambas le envia un caracter "1" o "0" (no el número el 1 o 0).

El caracter "0" corresponde en la tabla ASCII al 48,
Y el caracter "1" corresponde en la tabal ASCII al 49

Por eso el tema de usar el  48 y el 49 en el código de Arduino.

Nota:
Una entrada interesante sobre lectura de entras analogicas:
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CDEQFjAA&url=http%3A%2F%2Fplatea.pntic.mec.es%2F~mhidalgo%2Fdocumentos%2F04_2011_EntradasAnalogicas.pdf&ei=duguT6rcHNOBhQfts4WCCw&usg=AFQjCNH2BooTBKKIlgGrNE4GFWNj9cuFAw&sig2=3jowRw23996gFHStD4_nzw

Otra entrada interesante:
http://recursostic.educacion.es/observatorio/web/es/equipamiento-tecnologico/didactica-de-la-tecnologia/944-monografico-arduinoblocks?showall=1

Y otro..
http://www.arduinoacademy.com/

Notas: 
03/05/2012
Podeis ver un ejemplo más complejo en el siguiente enlace:
http://jsbsan.blogspot.com.es/2012/05/arduino-y-gambas3-lectura-y-graficos-de.html

19/05/2012
Podeis ver otro ejemplo (con dos ServoMotores) en este enlace:
http://jsbsan.blogspot.com.es/2012/05/gambas-y-arduino-moviendo-dos.html

27/01/2014: Solución Error: Cannot open serial port (5)


Tengo un arduino más moderno (tipo leonardo), y cuando ejecuto el programa me da el siguiente error Cannot open serial port(5). 
Esto es debido a  que tiene ya un verdadero puerto USB y ahora nombre del puerto de conexión se llama: /dev/ttyACM0 (en vez de /dev/ttyUSB0)

Con este cambio, en los datos del programa que hay que poner inicialmente,  ya se  ejecuta correctamente con este tipo de arduino:

Nota:
en el entorno del Ide de Arduino, cuando elegimos el tipo Leonardo, el puerto serie se denomina tambien  /dev/ttyACM0



Saludos





jueves, 17 de noviembre de 2011

19 cosas útiles que puedes hacer con ffmpeg

He visto esta entrada en un blog, y es muy buena y util.... os recomiendo que la visiteis....


http://mundogeek.net/archivos/2008/10/10/19-cosas-utiles-que-puedes-hacer-con-ffmpeg/


"Esta es una recopilación de ejemplos de cosas útiles que se pueden hacer con ffmpeg, como puede ser convertir vídeos para PSP, iPod o iPhone, extraer el audio de un vídeo o extraer imágenes de un vídeo.
Obtener información de un vídeo
ffmpeg -i video.avi

Combinar una serie de imágenes en un vídeo

ffmpeg -f image2 -i imagen%d.jpg video.mpg
Con este comando convertiríamos todas las imágenes del directorio actual (con nombres imagen1.jpg, imagen2.jpg, etc…) en un video llamado video.mpg.

Convertir un vídeo en imágenes

ffmpeg -i video.mpg imagen%d.jpg
Con este comando se crearan varias imágenes imagen1.jpg, imagen2.jpg, … Para las imágenes resultantes se pueden usar los formatos PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF o SGI..........."
Sigue el enlace de arriba para ver mas.....

Saludos



lunes, 14 de noviembre de 2011

MapComen: Generador de comentarios para Robodoc (beta)



MapComen:
Generador de comentarios para Robodoc desde el código fuente en gambas2 y gambas3




Como os comente la semana pasada he estado realizadon este programa, con el FrontEndRoboDoc, podeis documentar facilmente vuestros proyectos de gambas2 y gambas3. En concreto esta utilidad, analiza el codigo fuente, añadiendo "etiquetas" y la estructura que necesita RoboDoc para crear la documentación. 




Su utilización es muy sencilla, y simplemente tenéis que elegir el proyecto y pulsar el botón de "Generador comentarios".

Luego, ejecutar el FrontEndRobodoc y ya tendreis la documentación generada.

Aqui teneis una pagina web generada del proyecto "Siesta" de Shordi:


Enlaces de descarga: 


Y un video de ejemplo de su uso:



Saludos

Nota:
Esta versión es una beta, puede contener errores, hacer copias de seguridad de vuestros proyectos antes de usar el programa.