arduino y visual basic
DESCRIPTION
Una pequeña reseña de Arduino con Visual BasicTRANSCRIPT
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
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
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);
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
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);}
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);}
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
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.
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.
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
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
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);}}
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.
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) {
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)); }
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;
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);}
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/
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