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:



domingo, 5 de mayo de 2013

Gambas y Arduino: Ejemplo 5 Medicion de distancia y decirla en voz alta

Gambas y Arduino
 Ejemplo 5
 Medir distancias y decirlas en voz alta





Os dejo aqui otro ejemplo de gambas y arduino, esta vez usando un sensor de distancias (el HC-SR04).
El programa de arduino, lee la distancia y la escribe en el puerto serial.
Lo que hago con gambas es leer la entrada del puerto serie y usar el comando espeak
para dictar la distancia.

Montaje:



Captura del programa funcionando:



Código para arduino:

int trigger=11; // Arduino pin tied to trigger pin on the ultrasonic sensor.
int echo= 12; // Arduino pin tied to echo pin on the ultrasonic sensor.
float distance;
int val;
float lim;

void setup() {
Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
}

void loop() {
digitalWrite(trigger,LOW);
delayMicroseconds(5);
digitalWrite(trigger,HIGH);
delayMicroseconds(10);
digitalWrite(trigger,LOW);
distance=pulseIn(echo,HIGH);
distance=distance*0.0001657;
// Serial.println("Distancia:");
Serial.println(distance);
delay(200);

}

El programa en gambas


' Gambas class file

Public valor As Integer
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"
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"
End If
Catch
Message.Info("Error:" & Error.text)
End

Public Sub SPort_Read()
Dim valor As Integer
Dim cadenas As String[]
Dim cadena As String
Dim s As String
Read #Sport, s, Lof(Sport)
If s <> "" Then
cadenas = Split(s, "\n\r")
Print cadenas[cadenas.count - 1]
valor = cadenas.count - 1
While cadenas[valor] = ""
valor = valor - 1
Wend
cadena = "\"Distancia es " & cadenas[valor] & "\""
LabelDistancia.text = cadena
Exec ["espeak", "-v", "es", cadena]
Wait 3
Endif
End

Public Sub ComboBox1_Click()
Sport.FlowControl = ComboBox1.Index
End

Public Sub Form_Open()

Me.Caption = "Medidor de distancia por Arduino"
Me.center
cmbSpeed.Index = cmbSpeed.Find("9600")
ComboBox1.Index = 0
End

Enlace de descarga del código:

Nota:
fuentes:
http://zygzax.com/2012/09/14/medir-distancias-con-arduino-sensor-us-100-o-hc-sr04-p2/
http://fritzing.org/projects/hc-sr04-led-bar/

sábado, 4 de mayo de 2013

Arduino y Gambas: Ejemplo 4: Usando Pulsadores

Arduino y Gambas

Ejemplo 4

Usando Pulsadores





Aquí os dejo un ejemplo, que me ha pedido  Diego carpio
Se trata de usar dos pulsadores, conectados al arduino  y que con  gambas mostremos en el monitor del pc, cual de ellos se ha pulsado.


 
Circuito de los dos pulsadores:

En gambas creo un formulario con los combobox de las caracteristicas de la conexión serial (en principio hay que dejarlos igual como aparecen en la captura) y pongo dos ToggleButton   que van a cambiar de color según el pulsador de la protoboard de arduino que se pulse.
Aqui os  dejo una captura del programa en funcionamiento:


Como siempre son 2 programas, uno que debemos grabar en el arduino y otro el de gambas (realizado en la version de gambas3.4.1)



1º Para el arduino:

int dato1;
int dato2;
int inPin1=8;
int inPin2=9;
void setup()
{
// Inicializamos puerto serie a 9600 bps
Serial.begin(9600);
pinMode(inPin1,INPUT);
pinMode(inPin2,INPUT);
// 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()
{
dato1=digitalRead(inPin1); // lee datos del pin nº 8
dato2=digitalRead(inPin2); // lee datos del pin nº 9

if (dato1==1) {
Serial.println(1); // escribo en el puerto serie el numero 1
digitalWrite(13, 1); // enciendo el led del arduino
delay(450); //espero casi medio segundo
digitalWrite(13, 0);  //apago el led de arduino

}
if (dato2==1) {
Serial.println(2); // escribo en el puerto serie el numero 2
digitalWrite(13, 1);
delay(450);
digitalWrite(13, 0);
}
}

2º El programa de Gambas3:

' Gambas class file

Public valor As Integer
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"
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"
End If
Catch
Message.Info("Error:" & Error.text)
End

Public Sub SPort_Read()
Dim s As String
Read #Sport, s, Lof(Sport)
TextArea1.Text = s 'TextArea1.Text & s
If IsNumber(s) Then valor = Val(s)
If valor = 1 Then
'recibo el numero 1, cambio de color el boton 
ToggleButton1.Background = Color.red
Wait 0.4
ToggleButton1.Background = Color.Gray
Endif
If valor = 2 Then
'recibo el numero 2, cambio de color el boton 
ToggleButton2.Background = Color.green
Wait 0.4
ToggleButton2.Background = Color.Gray
Endif
End

Public Sub ComboBox1_Click()
Sport.FlowControl = ComboBox1.Index
End

Public Sub Form_Open()
Me.center
cmbSpeed.Index = cmbSpeed.Find("9600")
ComboBox1.Index = 0
ToggleButton2.Background = Color.Gray
ToggleButton1.Background = Color.Gray
End


Os dejo aquí los enlaces de descarga de los programas....

Enlace de descarga del programa de arduino: enlace
Enlace de descarga del programa en gambas3.4: enlace

Para ver más ejemplos de pulsadores en Arduino: http://www.hispavila.com/3ds/atmega/pulsadores.html



Nota:



viernes, 3 de mayo de 2013

Escuchar un mp3 en gambas3

 

Escuchar un fichero .mp3 en gambas3



Pasos a seguir:

 1º Tenemos que añadir a nuestro proyecto  el  componente  "gb.sdl.sound"

Menu: Proyecto/Propiedades/Componentes y clickearlo

Añadiendo el componente gb.sdl.sound a nuestro proyecto
 Esto hace que  tengamos  varias clases con las que podemos reproducir sonidos (ver http://gambasdoc.org/help/comp/gb.sdl.sound )


2º La que vamos a usar , es la clase  Music (http://gambasdoc.org/help/comp/gb.sdl.sound/music)

 Esta clase tiene el método Load (que es la que se encarga de cargar el archivo .mp3 en la memoria), y Play (que empezará a reproducir el sonido).

Os dejo un ejemplo, donde se escuchará un archivo mp3 al pulsar un botón

Ejemplo:
Public sonido1 As Music

Public Sub Form_Open()
 
  Me.Center
 
End

Public Sub ToolButton1_Click()
 
  Music.load("/tmp/sonido1.mp3")
  Music.play
 
End


 Enlace de descarga: ejemplo completo