Arduino y Visual Basic

19
2013-05-28 1:39 AM Arduino y Visual Basic Page 1 of 19 http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm Arduino y Visual Basic por Juan Antonio Villalpando mi correo: [email protected]) (IES Fco. Romero Vargas - Jerez de la Fra.) Los programas utilizados están basados en los encontrados en las siguentes web: http://www.instructables.com/id/Using-Visual-Basic-to-control-Arduino-Uno/ http://stackoverflow.com/questions/5697047/convert-serial-read-into-a-useable-string-using-arduino http://arduino.cc/forum/index.php?action=printpage;topic=65486.0 http://msdn.microsoft.com/es-es/library/7ya7y41k.aspx ---------------------------------------------------------------------------------- Visual Basic 2010 lo puedes bajar de... http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express **************************************************************************************************************************************************************** Conexionado Monta este conexionado para realizar la mayoría de los programas de este tutorial

description

Una pequeña reseña de Arduino con Visual Basic

Transcript of Arduino y Visual Basic

Page 1: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 1 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

Arduino y Visual Basic por Juan Antonio Villalpando

mi correo: [email protected]) (IES Fco. Romero Vargas - Jerez de la Fra.)

Los programas utilizados están basados en los encontrados en las siguentes web:

http://www.instructables.com/id/Using-Visual-Basic-to-control-Arduino-Uno/

http://stackoverflow.com/questions/5697047/convert-serial-read-into-a-useable-string-using-arduino

http://arduino.cc/forum/index.php?action=printpage;topic=65486.0

http://msdn.microsoft.com/es-es/library/7ya7y41k.aspx

----------------------------------------------------------------------------------

Visual Basic 2010 lo puedes bajar de... http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express

****************************************************************************************************************************************************************

Conexionado

Monta este conexionado para realizar la mayoría de los programas de este tutorial

Page 2: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 2 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

NOTA: Cuando tenemos abierto el puerto COM3 no podemos utilizar a la vez el Serial Monitor.

NOTA: Con un Hyperterminal también podemos comunicarnos con el Arduino.

1.- Se trata de gobernar el Arduino desde VisualBasic 2010. Creamos dos botones, cuando pulsamos estosbotones se apaga o enciende el LED13 delArduino.En Visual Basic 2010, insertamos dos Botones y un SerialPort

Page 3: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 3 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

- Cambia el puerto COM3 por el puerto que tengas en el Arduino (1, 2, 3 o 4)

Cuando pulsamos el Button1 se enciende el LED13Cuando pulsamos el Button2 se apaga el LED13

Visual Basic 2010

Imports System.IO Imports System.IO.Ports Imports System.Threading

Public Class Form1 Shared _continue As Boolean Shared _serialPort As SerialPort

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SerialPort1.Close() SerialPort1.PortName = "com3" ' Cambia el Puerto SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SerialPort1.Open() SerialPort1.Write("1") SerialPort1.Close() End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SerialPort1.Open() SerialPort1.Write("0") SerialPort1.Close() End Sub End Class

En el Arduino creamos este código.

Programa para el Arduino

int ledPin = 13;

void setup() { Serial.begin(9600);

Page 4: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 4 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); }

void loop(){ while (Serial.available() == 0); int val = Serial.read() - '0';

if (val == 1) { Serial.println("LED on"); digitalWrite(ledPin, HIGH);} else if (val == 0) { Serial.println("LED OFF"); digitalWrite(ledPin, LOW);} else { //val = val; } Serial.println(val); Serial.flush(); }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

2.- Ahora con dos botones y dos LEDAhora se trata de tener varios Botones para controlar varios LED

Cuando pulsamos el Botón 1, se enciende el LED13, cuando volvemos a pulsarlo se apaga el LED13Cuando pulsamos el Botón 2, se enciende el LED12, cuando volvemos a pulsarlo se apaga el LED12

Visual Basic 2010

Imports System.IO.PortsImports System.Threading

Public Class Form1Dim cambio12 As Boolean = TrueDim cambio13 As Boolean = True

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadSerialPort1.Close()SerialPort1.PortName = "com3" 'CAMBIA EL PUERTO COMSerialPort1.BaudRate = 9600SerialPort1.DataBits = 8SerialPort1.Parity = Parity.NoneSerialPort1.StopBits = StopBits.One

Page 5: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 5 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

SerialPort1.Handshake = Handshake.NoneSerialPort1.Encoding = System.Text.Encoding.DefaultEnd Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickSerialPort1.Open()If cambio13 = True ThenSerialPort1.Write("13 on")ElseSerialPort1.Write("13 off")End Ifcambio13 = Not (cambio13)SerialPort1.Close()End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickSerialPort1.Open()If cambio12 = True ThenSerialPort1.Write("12 on")ElseSerialPort1.Write("12 off")End Ifcambio12 = Not (cambio12)SerialPort1.Close()End SubEnd Class

En el Arduino creamos este código.

Programa para el Arduino

char inData[20]; // Allocate some space for the stringchar inChar=-1; // Where to store the character readbyte index = 0; // Index into array; where to store the character

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

char Comp(char* This) {while (Serial.available() > 0) // Don't read unless// there you know there is data{if(index < 19) // One less than the size of the array{inChar = Serial.read(); // Read a characterinData[index] = inChar; // Store itindex++; // Increment where to write nextinData[index] = '\0'; // Null terminate the string}}

if (strcmp(inData,This) == 0) {for (int i=0;i<19;i++) {inData[i]=0;}index=0;return(0);}else {return(1);}}

void loop(){if (Comp("12 on")==0) { digitalWrite(12, HIGH);}if (Comp("12 off")==0) {digitalWrite(12, LOW);} if (Comp("13 on")==0) { digitalWrite(13, HIGH);}if (Comp("13 off")==0) {digitalWrite(13, LOW);}

Page 6: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 6 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

}

Lo que hace el programa Visual Basic anterior es enviar la frase "12 on" al puerto serie (En este caso no es el puerto serie, se trata del USB), el Arduino recojela información que le llega por su puerto serie y "descompone" las letras recibidas, si las letras "descompuestas" son 12 on, entonces se enciende el LED 12.

- Ahora lo mismo pero con otro código más sencillo, dos botones y dos LED. En este caso solo se envía un carácter ("1"), no una cadena "12 on")

Visual Basic - Arduino

' VISUAL BASIC 2010 (dos Button y un SerialPort) ' Programa realizado por Juan Antonio Villalpando' [email protected]

Imports System.IO.PortsImports System.Threading

Public Class Form1Dim cambio12 As Boolean = TrueDim cambio13 As Boolean = True

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadSerialPort1.Close()SerialPort1.PortName = "com3" 'CAMBIA EL PUERTO COMSerialPort1.BaudRate = 9600SerialPort1.DataBits = 8SerialPort1.Parity = Parity.NoneSerialPort1.StopBits = StopBits.OneSerialPort1.Handshake = Handshake.NoneSerialPort1.Encoding = System.Text.Encoding.DefaultEnd Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickSerialPort1.Open()If cambio13 = True ThenSerialPort1.Write("1")ElseSerialPort1.Write("2")End Ifcambio13 = Not (cambio13)SerialPort1.Close()End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickSerialPort1.Open()If cambio12 = True ThenSerialPort1.Write("3")ElseSerialPort1.Write("4")End Ifcambio12 = Not (cambio12)SerialPort1.Close()End SubEnd Class

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''/////////////////////////////////////////////////////////////////////////////////////////////////

/ ARDUINO

// Programa realizado por Juan Antonio Villalpando// [email protected]

int ledPin13 = 13;int ledPin12 = 12;int dato;

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

Page 7: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 7 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

void loop() {

if (Serial.available() > 0) {

dato = Serial.read();

if (dato == '1') {digitalWrite(ledPin13, HIGH);} if (dato == '2') {digitalWrite(ledPin13, LOW);}if (dato == '3') {digitalWrite(ledPin12, HIGH);} if (dato == '4') {digitalWrite(ledPin12, LOW);}}}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

3.- Ahora lo hacemos alrevés, es decir, pulsamosun botón en el Arduino y enviamos un mensaje aVisual Basic 20101.- Para hacerlo funcionar, primero pulsamos el Botón "Abrir puerto" para abrir el puerto COM32.- Luego pulsamos el botón de Recibir y quedamos a la espera.3.- Cuando pulsemos el Botón del Arduino, pasará la información "Hola amigo" al Visual Basic y lo presentará en el Label1.4. Para acabar el programa debemos pulsar el botón de "Cerrar puerto", si no lo cerramos el puerto quedará bloqueado y no podremos volver a cargar elArduino.En este caso, ejecuta el programa de Visual Basic y pulsa el botón de "Cerrar puerto"

- El botón "Enviar" no tiene código, cuando lo pulsemos el Arduino notará que le llega algo por el puerto serie mediante el LED TX.

Visual Basic 2010

Insertamos 4 botones, 1 Label y un TextBox. También insertamos un SerialPort y en su Propiedad PortName, establecemos el Puerto deconexión del Arduino.

Public Class Form1

Page 8: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 8 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs)SerialPort1.Close()End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickSerialPort1.Open()Button1.Enabled = FalseEnd Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickSerialPort1.Close()Button1.Enabled = TrueEnd Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickLabel1.Text = SerialPort1.ReadLineEnd Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.ClickSerialPort1.WriteLine(TextBox1.Text)End Sub

End Class

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Para que se abra el Bloc de notas cuando se pulse el botón del Arduino y se reciba la palabra Hola

Dim a As String.........................................a = SerialPort1.ReadLineIf a = "Hola amigo" & vbCr & "" Then System.Diagnostics.Process.Start("notepad.exe")

********************************************************************************' Mejora del código. Dos botones y un SerialPort. No hace falta el botón Recibir ni Enviar.

Public Class Form1

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.LoadSerialPort1.Close()SerialPort1.PortName = "com3" ' Cambia el PuertoSerialPort1.BaudRate = 9600 ' Esta es la velocidad de transmisión, debe ser la misma en los programas y en el Bluetooth

CheckForIllegalCrossThreadCalls = False ' Esta línea no le gusta mucho a los programadores, pero aquí la ponemos para que funcione el Label1End Sub

Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs)SerialPort1.Close()End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickSerialPort1.Open()Button1.Enabled = FalseEnd Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickSerialPort1.Close()Button1.Enabled = TrueLabel1.Text ="" End Sub

Private Sub SerialPort1_DataReceived(sender As Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

Label1.Text = Label1.Text & SerialPort1.ReadLine

If SerialPort1.ReadLine = "Hola amigo" & vbCr & "" Then Process.Start("calc.exe")

End Sub

End Class

En el Arduino creamos este código.

Page 9: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 9 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

Programa para el Arduino

const int boton2 = 2; const int ledPin = 13;int buttonState = 0;

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

void loop(){

buttonState = digitalRead(boton2);

if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); Serial.println("Hola amigo");}else {digitalWrite(ledPin, LOW);}}

********************************************************************************************************************

4.- Ahora se trata de realizar un programa quepueda enviar datos al Arduino y recibirlo. Sebasa en unir los dos programas vistosanteriormente.1.- Este programa está formado por los dos programas vistos anteriormente.

Page 10: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 10 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

Visual Basic 2010

Insertamos 4 botones, 1 Label y un TextBox. También insertamos un SerialPort y en su Propiedad PortName, establecemos el Puerto deconexión del Arduino.

Imports System.IOImports System.IO.PortsImports System.Threading

' Programa realizado por Juan Antonio Villalpando' [email protected]

' Este programa trata de dos modalidades distintas' una pulsamos un botón en Visual Basic y se enciende un LED en el Arduino' otra pulsamos un botón en el Arduino y se envia un mensaje al Visual Basic y se ejecuta un programa.

Public Class Form1

Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs)SerialPort1.Close()End Sub

Shared _continue As BooleanShared _serialPort As SerialPortDim cambio12 As Boolean = TrueDim cambio13 As Boolean = TrueDim entradadedatos As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadSerialPort1.Close()SerialPort1.PortName = "com3" 'CAMBIA EL PUERTO COMSerialPort1.BaudRate = 9600SerialPort1.DataBits = 8SerialPort1.Parity = Parity.None

Page 11: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 11 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

SerialPort1.StopBits = StopBits.OneSerialPort1.Handshake = Handshake.NoneSerialPort1.Encoding = System.Text.Encoding.DefaultEnd Sub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' SALIDA DE DATOS' Enciende / Apaga LED12 y LED13Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickSerialPort1.Close()SerialPort1.Open()If cambio13 = True ThenSerialPort1.Write("13 on")ElseSerialPort1.Write("13 off")End Ifcambio13 = Not (cambio13) SerialPort1.Close()End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.ClickSerialPort1.Close()SerialPort1.Open()If cambio12 = True ThenSerialPort1.Write("12 on")ElseSerialPort1.Write("12 off")End Ifcambio12 = Not (cambio12) SerialPort1.Close()End Sub''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ENTRADA DE DATOS' Botones del ArduinoPrivate Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.ClickSerialPort1.Close()SerialPort1.Open()Button3.Enabled = FalseEnd Sub

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.ClickSerialPort1.Close()Button3.Enabled = TrueEnd Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.ClickButton5.BackColor = Color.GreenYellowButton5.Text = "Pulsa un botón del Arduino"SerialPort1.Close()SerialPort1.Open()entradadedatos = SerialPort1.ReadLineLabel1.Text = entradadedatosIf entradadedatos = "Bloc de notas" & vbCr & "" Then System.Diagnostics.Process.Start("notepad.exe")If entradadedatos = "Calculadora" & vbCr & "" Then System.Diagnostics.Process.Start("calc.exe")SerialPort1.Close()' Button5.BackColor = SystemColors.ControlButton5.BackColor = Color.OrangeRedButton5.Text = "Preparado para recibir"End Sub

End Class

En el Arduino creamos este código.

Programa para el Arduino

char inData[20]; // Allocate some space for the stringchar inChar=-1; // Where to store the character read

Page 12: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 12 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

byte index = 0; // Index into array; where to store the character// Programa adaptado por Juan Antonio Villalpando int boton2 = 0;int boton3 = 0;

void setup() {Serial.begin(9600);pinMode(2, INPUT);pinMode(3, INPUT);pinMode(12, OUTPUT);pinMode(13, OUTPUT);

}// ENCENDIDO DEL LED12 y LED13////////////////////////////////////////////////////////////////

char Comp(char* This) {while (Serial.available() > 0)

{if(index < 19) // One less than the size of the array{inChar = Serial.read(); // Read a characterinData[index] = inChar; // Store itindex++; // Increment where to write nextinData[index] = '\0'; // Null terminate the string}}

if (strcmp(inData,This) == 0) {for (int i=0;i<19;i++) {inData[i]=0;}index=0;return(0);}else {return(1);}}

void loop(){if (Comp("12 on")==0) { digitalWrite(12, HIGH);}if (Comp("12 off")==0) {digitalWrite(12, LOW);} if (Comp("13 on")==0) { digitalWrite(13, HIGH);}if (Comp("13 off")==0) {digitalWrite(13, LOW);}

// LECTURA DE LOS BOTONES 2 y 3 DEL ARDUINO///////////////////////////////////////////////////////////////////////////////////////////

// Lee el estado de los botonesboton2 = digitalRead(2);boton3 = digitalRead(3);

if (boton2 == HIGH) { Serial.println("Bloc de notas");// digitalWrite(12, HIGH);delay(300);}else {////digitalWrite(12, LOW);}

if (boton3 == HIGH) { Serial.println("Calculadora");// digitalWrite(13, HIGH);delay(300);}else {// // digitalWrite(13, LOW);}}

Page 13: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 13 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

*************************************************************************************************************

Servidor Apache + PHP

Para realizar los programas basados en PHP en nuestro ordenador, debemos instalar un servidor web, es muy fácil.

1.- Instalamos el WAMP (Windows Apache MySQL PHP) 2.- Se instala en C:\wamp. La carpeta donde tienes que poner los php es C:\wamp\www.3.- La configuración se realiza con una ventana que sale en el área de notificación cerca del reloj.4.- El archivo de configuración es el httpd.conf en este archivo ponemos una almohadilla en...# onlineoffline tag - don't removeOrder Allow,Deny# Deny from allAllow from all 5.- Cada vez que guardemos el archivo de configuración debemos Restart el servicio Apache.6.- Para ver los php, ponemos en un navegador: localhost/arduino.php

5.- Se trata de realizar un programa que puedaenviar datos al Arduino mediante un archivo PHPalojado en un servidor web.1.- Creamos un archivo arduino.php con cuatro botones.2.- Dependiendo del botón pulsado se enviará al puerto serie un carácter chr(48), chr(49), chr(50), chr(51) que corresponde al "0", "1", "2" y "3" 3.- El Arduino leerá el dato del puerto serie y según sea "0", "1", "2" o "3" mandará señal a las salidas 12 y 13 y los LED encencerán o apagarán.

Page 14: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 14 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

.

Es posible que el archivo arduino2.php de un error cuando se ejecuta por primera vez, ignorarlo.

arduino.php

// Programa realizado por Juan Antonio Villalpando// [email protected]

<?php//`mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;$fp = fopen ("COM3:", "a");?><html><head>

<Form Name ="form1" Method ="POST" ACTION = "arduino.php"><INPUT TYPE = "Submit" Name = "dato" VALUE = "13 on"><INPUT TYPE = "Submit" Name = "dato" VALUE = "13 off"><INPUT TYPE = "Submit" Name = "dato" VALUE = "12 on"><INPUT TYPE = "Submit" Name = "dato" VALUE = "12 off">

</html>

<?php$datos=$_POST;$dato = $datos['dato'];

if ($dato=="13 on") {echo "Enciende LED 13" ;fputs($fp, chr(48)); }

if ($dato=="13 off") {echo "Apaga LED 13" ;fputs($fp, chr(49)); }

if ($dato=="12 on") {echo "Enciende LED 12" ;fputs($fp, chr(50)); }

if ($dato=="12 off") {echo "Apaga LED 12" ;fputs($fp, chr(51)); }

?>

En el Arduino creamos este código.

Programa para el Arduino

// Programa realizado por Juan Antonio Villalpando// [email protected]

int ledPin13 = 13;int ledPin12 = 12;int dato;

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

void loop() {

if (Serial.available() > 0) {

Page 15: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 15 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

dato = Serial.read();

if (dato == '0') {digitalWrite(ledPin13, HIGH);} if (dato == '1') {digitalWrite(ledPin13, LOW);}if (dato == '2') {digitalWrite(ledPin12, HIGH);} if (dato == '3') {digitalWrite(ledPin12, LOW);}}}

**********************************************************************************************************************************************.

6.- Vamos a realizar un programa que puedaenviar datos al Arduino mediante un archivoPHP, en este caso al apretar un botón seincrementa el brillo del LED y al apretar otrobotón se decrementa el brillo del LED.1.- Creamos un archivo arduino2.php con dos botones (Incrementa y Decrementa) 2.- Según pulsemos uno u otro, se enviará por el puerto serie el chr(48) que es el carácter "0" o el chr(49) que es el carácter "1" 3.- El Arduino leerá el dato del puerto serie y según sea "0" o "1", incrementara o decrementará la variable brillo.4.- El valor de la variable brillo irá a la salida PWM 9, dependiendo del valor de la variable, dará un nivel de tensión.

Es posible que el archivo arduino2.php de un error cuando se ejecuta por primera vez, ignorarlo.

arduino2.php

// Programa realizado por Juan Antonio Villalpando// [email protected]

<?php//`mode com3: BAUD=9600 PARITY=N data=8 stop=1 xon=off`;$fp = fopen ("COM3:", "a");?><html><head>

<Form Name ="form1" Method ="POST" ACTION = "arduino2.php"><INPUT TYPE = "Submit" Name = "dato" VALUE = "Incrementa"><INPUT TYPE = "Submit" Name = "dato" VALUE = "Decrementa">

</html>

<?php$datos=$_POST;$dato = $datos['dato'];

if ($dato=="Incrementa") {echo "Incrementa" ;fputs($fp, chr(48)); }

Page 16: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 16 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

if ($dato=="Decrementa") {echo "Decrementa" ;fputs($fp, chr(49)); }

?>

En el Arduino creamos este código. NOTA: en los esquemas anteriores utilizamos las salidas 12 y 13, en este montaje debemos utilizar la salida 9 ya que necesitamos que sea PWM.Simplemente cambia el cable de la salida 13 de los montajes anteriores por la 9.

Programa para el Arduino

// Programa realizado por Juan Antonio Villalpando// [email protected]

int ledPin9 = 9;int dato;int brillo = 0; int incremento = 5;

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

void loop() {

if (Serial.available() > 0) {

dato = Serial.read();

if (dato == '0') {analogWrite(ledPin9, brillo); brillo = brillo + incremento; } if (dato == '1') {analogWrite(ledPin9, brillo); brillo = brillo - incremento;

}}}

*********************************************************************************************************************

*********************************************************************************************************************

*********************************************************************************************************************

7.- Intento de pulsar un botón en el Arduino yque lo detecte una página php.

arduino3.pde

// Programa realizado por Juan Antonio Villalpando// [email protected]

const int boton2 = 2; const int ledPin = 13;int buttonState = 0;

Page 17: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 17 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

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

void loop(){

buttonState = digitalRead(boton2);

if (buttonState == HIGH) { digitalWrite(ledPin, HIGH); Serial.print("HOLA");}else {digitalWrite(ledPin, LOW);}}

arduino3.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html><head><meta http-equiv="refresh" content="1"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>

<body><p>Valor leido :</p><?php

if ($handle = fopen("COM3", "rb")) {

$data = fread($handle, 8); print "<center><h1>";echo $data;print "</h1></center>";fclose($handle);} ?></body></html>

http://wiki.pinguino.cc/index.php/Interfacing_with_php

**************************************************

Otro intento. Este ha funcionado, aunque no correctamente.

// ini_set ( "max_execution_time" , 99 );

<?php$fp = fopen ("COM3:", "r+"); if (!$fp) {echo "Error";

} else {

while (($char = fread($fp,10)) != chr(13)) {echo $char;

}fclose ($fp);}

Page 18: Arduino y Visual Basic

2013-05-28 1:39 AMArduino y Visual Basic

Page 18 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

?>

******************************************************************

con .exe freebasic

Mediante un .exe Ver: "http://arduino.cc/forum/index.php?action=printpage;topic=65552.0"

Dim As String qs, datDim idx As Integer

qs = Environ("QUERY_STRING")if qs = "" goto nodata

again:idx = Instr(qs, "-")Mid(qs, idx, 1) = "#"if idx > 0 goto again

qs = qs

Open Com "COM3: 9600,N,8,1,BIN,CD,CS,DS,RS" For Binary As #1print #1,, qsSleep 200dat = Input$(loc(1), #1)Close #1

if dat = "" goto nodataif dat <> "" goto gotdata

nodata:Print "status: 204"PrintPrintgoto fini

gotdata:Print "Content-type: text/html"Printprint "<html><body>"Print datPrint "http://arduino.cc/forum/index.php?action=printpage;topic=65552.0"Print "</body></html>"goto fini

fini:end

*************************

Guardar como arduino.bas y luego compliar f bc .....................arduino.exe y lo guardamos en el directorio cgi-bin del Apache.Luego en httpd.conf# ScriptAlias /cgi-bin/ "cgi-bin/"ScriptAlias /cgi-bin/ "/wamp/bin/apache/Apache2.2.21/cgi-bin/"

#<Directory "cgi-bin"><Directory "c:/wamp/bin/apache/Apache2.2.21/cgi-bin">

AddHandler cgi-script .cgi .exe .pl

- Otro código en VB parecido a lo anterior. de http://tiktakx.wordpress.com/2010/11/21/serial-port-interfacing-with-vb-net-2010/

Page 19: Arduino y Visual Basic

2013-05-28 1:40 AMArduino y Visual Basic

Page 19 of 19http://www.iesromerovargas.net/recursos/elec/sol/arduino.htm

- Arduino PHP

- Chat Bluetooth -VisualBasic

- http://www.amarino-toolkit.net/index.php/getting-started.html

- http://my.opera.com/gatodrolo/blog/show.dml/20699632

- http://www.instructables.com/id/how-to-Control-arduino-by-bluetooth-from-PC-pock/step6/controlling-from-a-pocket-PC-PDA/

- http://www.electan.com/emisor-receptor-433mhz-p-3039.html

- http://www.electan.com/arduino-mega-adk-android-p-3141.html

- http://www.instructables.com/id/Use-Twitter-to-control-Arduino-Uno-via-Visual-Basi/

- http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1266689999/all recibir datos

- Hyperterminal para conectarse al Arduino. http://www.pcworld.com/downloads/file_download/fid,3376-order,4/download.html

- http://www.mbeckler.org/microcontrollers/rgb_led/

En un próximo tuturial desarrollaré la transmisión por Bluetooth, para ello debemos adquirir un Arduino Bluetooth como esta:http://www.arduino.cc/en/Main/ArduinoBoardBluetooth(Ver precio: http://www.electan.com/arduino-bluetooth-p-2935.html) - unos 94 €

o bien comprar un módulo Bluetooth que se lo podemos insertar a nuestro Arduino básico: http://www.bricogeek.com/shop/modulos-radiofrecuencia/242-modem-bluetooth-bluesmirf-gold.htmlunos 51 € (Ver forma de conectar: http://wiring.org.co/learning/tutorials/bluetooth/)

También tengo pendiente hacer un tutorial para transmitir datos por RF, para ello se utiliza un par de módulo bastante baratos, unos 7 €:http://www.electan.com/emisor-receptor-433mhz-p-3039.html

*******************************************

Lo siguiente será comunicar el Arduino con el ordenador mediante Bluetooth

1.640.672