Trucos sobre manejo de softwarelibre y gnu linux. También a los programas que hago en gambas3, python, java, etc.... Consejos y trucos sobre otros programas: excel, word, internet, instalación de programas, Arduino y demás....
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:
Algunas veces nos interesa saber si nuestro programa se esta ejecutando por una 2º vez.
En gnu/linux, tenemos el comando "ps" que nos muestra los programas que se esten ejecutando, con el argumento "a", nos va a mostrar todas los programas que se esten ejecuntado en las distintas terminales.
¿como poder usar este comando en Gambas?
Una opción es usarlo con el comando "Shell", por ejemplo, creo un modulo llamado "comprobar" y este es su codigo:
' Gambas module file
' nombre: es el nombre de la aplicacion que estamos buscando ver si esta ejecutandose 2 veces.
PUBLICSUB ejecucion(nombre ASString) ASBoolean
DIM texto ASString
DIM buscar ASInteger
DIM buscar2 ASInteger
SHELL ("ps a >"& User.home&"/temporal.process") WAIT
texto =File.Load(User.home&"/temporal.process")
KILL User.home&"/temporal.process"' para no dejar restos
En este código con la orden: SHELL ("ps a >"& User.home&"/temporal.process") WAIT
vamos a crear un archivo "temporal.proccess", que va a contener la salida que genera el "ps a" (para ello usamos el redireccionamiento ">".
luego cargamos el contenido de este archivo en la variable texto: texto =File.Load(User.home&"/temporal.process")
Y empazamos a analizalo:
Primero buscamos si existe dentro de "texto", el contenido de la variable "nombre" buscar =InStr(texto, nombre)
Si lo encuentra (busca es distinto a cero), procede a otro busqueda, entre el resto del texto y el total de la longitud, buscando el contenido de la variable "nombre" buscar2 =InStr(Mid$(texto, buscar +Len(nombre), Len(texto)), nombre)
Y si busca2 tambien es distinto a cero, entonces eso indica que has por lo menos 2 veces, y por lo tanto 2 ejecuciones.
Para usar este procedimiento:
.....
if comprobar.ejecucion("hola.gambas") then Message.Info("Se esta ejecutando por lo menos 2 veces")
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){
case49:
// escribo 1 en el PC y lo envio
//Apagamos el led 13
digitalWrite(13,LOW);
Serial.println("Arduino: He apagado el led 13");
break;
case48:
// 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")
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