Está en la página 1de 48

GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.

HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -141

EJERCICIOS DE VISUAL BASIC PARA AUTOMATIZACIÓN

Convertir un Numero binario a decimal

Module Module1
Sub Main()
Dim paso As Integer = 1
Dim conversion As Integer = 0
Dim j , longitud As Integer
Dim bit, binario As String
Console.WriteLine("con este programa convertimos um numero binario en
decimal")
Console.WriteLine("Escriba um numero binario menor o igual a 32 bitsl")
Console.WriteLine("No olvide escribir solo numeros sin espacion , ejemplo
:1001011")
binario = Console.ReadLine()
longitud = Len(binario)
Console.WriteLine("longitud de cadena{0} ", longitud)
For j = longitud - 1 To j > 0 Step -1
bit = binario.Substring(j, 1)
Console.WriteLine("bit {0} :{1} ", (longitud - j), bit)
If (bit = "1") Then
conversion = conversion + paso
End If
paso = paso * 2
Next
Console.WriteLine("-------------------------------------------------------------------------")
Console.WriteLine("su numero decimal es {0}", conversion)
Console.ReadLine()
End Sub
End Module

CONVERSION DECIMAL A BINARIO


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -142

Module Module2
Function decABINARIO(numdecimal As Long) As String
Dim peso As Long = 2147483648
Dim numero As Long
Dim binario As String = ""
Dim resultado As String = ""
numero = Convert.ToInt64(numdecimal)
Do
If (numero >= peso) Then
binario = binario + "1"
numero = numero - peso
Else
binario = binario + "0"
End If
peso = peso / 2
Loop While peso >= 1
Dim i As Integer
For i = 0 To Len(binario)
If (binario.Substring(i, 1) = "1") Then
resultado = binario.Substring(i, (32 - i))
Exit For
End If
Next
Return resultado
End Function

End Module

El Control ImageList

El control Imagelist nos permite cargar secuencias de imagines en nuestros


controles util para representar el estado de nuestras variables de manera gráfica ,
sin embargo no es un visible en tiempo de ejecución , solo es una especie de
conexión entre los controles visibles y las imágenes
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -143

CODIGO
Public Class Form1
Private Sub Button1_MouseDown(sender As Object, e As MouseEventArgs)
Handles btnEncendido.MouseDown
btnEncendido.ImageIndex = 0
End Sub
Private Sub btnEncendido_MouseUp(sender As Object, e As MouseEventArgs)
Handles btnEncendido.MouseUp
btnEncendido.ImageIndex = 1
End Sub
End Class

El Control TextBox

El control TextBox será de gran utilidad para capturar datos de usuario, vamos sac

Imagine que diseño un programa que captura el reporte diario de los operadores del
proceso, a usted le interesa conocer si se registro alguna falla, por lo tanto es natural
buscaer en el texto la palabra “falla, esto se puede realizar con sencillo método de
l textbox que nos permite buscar y reemplazar palabras con una sola línea de
código
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -144

Public Class Form1


Private Sub btnBuscar_Click(sender As Object, e As EventArgs) Handles
btnBuscar.Click
btnBuscar.Text = txtReporte.Text.Replace("falla", "ENCONTRADO :FALLAS ")
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles
MyBase.Load
txtReporte.Text = " El dia de hoy se detectaron fallas en motor M5 del área de
trituracion"
End Sub
End Class

El control Timer

El timer nos permite generar eventos periódicos con intervalos que podemos
ontrolar , es control básico para rutinas de muestreo de datos

Public Class Form1


Dim numero As Integer = 0
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
Label1.Text = numero
numero = numero + 1
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs)
Handles CheckBox1.CheckedChanged
Timer1.Enabled = CheckBox1.Checked
End Sub
End Class

El Control Serial Port


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -145

El control SerialPort antes llamado “MsComm” nos permite comunicarnos por el


puerto serial RS232 es un protocolo muy popular , nacio e los 60´s

Su ventaja es la sencillez de codificar el envio y recepción de información , para


este curso lo vamos a implementar muestreando datos provenientes de un
microcontrolado y comunicándose con otras computadora

SerialPort Clase .NET Framework 4.6 y 4.5


Representa un recurso puerto serie.

En este tema se explica cómo utilizar My.Computer.Ports para recibir cadenas de


los puertos serie del equipo en Visual Basic.
Para recibir cadenas del puerto serie
1. Inicialice la cadena de devolución.
Dim returnStr As String = ""

2. Determine qué puerto serie debe proporcionar las cadenas. Este ejemplo
supone que es COM1.
3.
4. Utilice el método My.Computer.Ports.OpenSerialPort para obtener una
referencia al puerto. Para obtener más información, vea OpenSerialPort.
El bloque Try...Catch...Finally permite a la aplicación cerrar el puerto serie
aun cuando se genere una excepción.Todo el código que manipula el puerto
serie debe aparecer dentro de este bloque.

Dim com1 As IO.Ports.SerialPort = Nothing


Try
com1 = My.Computer.Ports.OpenSerialPort("COM1")
com1.ReadTimeout = 10000
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If com1 IsNot Nothing Then com1.Close()
End Try
5. Cree un bucle Do para leer las líneas de texto hasta que no queden líneas
disponibles.
Do
Loop

6. Utilice el método ReadLine para leer en el puerto serie la siguiente línea de


texto disponible.
Dim Incoming As String = com1.ReadLine()

7. Utilice una instrucción If para determinar si el


método ReadLine devuelve Nothing (lo que significa que no hay más texto
disponible). Si devuelve Nothing, salga del bucle Do.
If Incoming Is Nothing Then
Exit Do
End If
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -146

8. Agregue un bloque Else a la instrucción If para controlar el caso de que


realmente se lea la cadena. El bloque anexa la cadena del puerto serie a la
cadena de devolución.
Else
returnStr &= Incoming & vbCrLf
9. Devuelva la cadena.
Return returnStr

Ejemplo

Function ReceiveSerialData() As String


Dim returnStr As String = ""
Dim com1 As IO.Ports.SerialPort = Nothing
Try
com1 = My.Computer.Ports.OpenSerialPort("COM1")
com1.ReadTimeout = 10000
Do
Dim Incoming As String = com1.ReadLine()
If Incoming Is Nothing Then
Exit Do
Else
returnStr &= Incoming & vbCrLf
End If
Loop
Catch ex As TimeoutException
returnStr = "Error: Serial Port read timed out."
Finally
If com1 IsNot Nothing Then com1.Close()
End Try
Return returnStr
End Function

Showwavw Flash Object

El Control Showwavw Flash Object nos permite importar archivos multimedia de


Flash con animacion vectorial y sonido
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -147

WWW.multitecnologia.com/MedidorTemperatura.rar

Descargue WWW.multitecnologia.com/MedidorTemperatura.rar

El control media player


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -148

Eventos periódicos con el control timer

En este programa vamos a simular que tenemos dos sensores de color y deseamos
que el proceso se detenga cuando ambos colores sean iguales

Public Class Form1


Dim r1, r2 As Integer
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
r1 = Rnd() * 255
r2 = Rnd() * 255
LblSensorA.BackColor = Color.FromArgb(r1, 0, 0)
lblSensorB.BackColor = Color.FromArgb(r2, 0, 0)
LblSensorA.Text = "SensorA : " + LblSensorA.BackColor.ToString
lblSensorB.Text = "SensorB : " + lblSensorB.BackColor.ToString
If LblSensorA.BackColor = lblSensorB.BackColor Then
Timer1.Enabled = False
MsgBox("Coinciden los colores")
End If
End Sub
Private Sub btnIniciar_Click(sender As Object, e As EventArgs) Handles
btnIniciar.Click
Timer1.Interval = 100
Timer1.Enabled = True
End Sub
End Class

El programa funciona correctamente


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -149

EL CONTROL CHART

El chart nos permite crear variedad de graficas representativas de datos, es un


control sencillo de configurar con métodos para imprimir y manejo de datos, en
nuestro curso lo aplicaremos para graficar señales de sensores.

El control no se encuentra en el panel de herramientas de Visual Estudio es muy


probabe que tenga que descargaro del sitio oficial de Microsoft , puede buscarlo con
google: MSchar.exe

http://www.softwarefx.com/sfxTrial/getFreeProduct.asp?ProdPlatform=N&Email=

ARDUINO Y VISUAL BASIC

PROBAR VIRTUALMENTE EL FUNCIONAMIENTO DE HMI(HUMAN MACHINE


INTERFACE- INTERFACE HOMBRE MAQUINA)

Demostración de lectura y escritura de puerto serial virtual

La siguiente aplicación tiene por objetivos demostrar la lectura y escritura serial


digital y analogica

DESCRIPCION

El led verde es ejemplo de lectura serial (lee del puerto y escribe en el arduino) el
led verde prende con A y se apaga con B
El led rojo es ejemplo de escritura ( lee del arduino y envía al puerto serial,
cuando se pulsa el pulsador)

Se hace en 5 etapas
Para enviar datos de virtual terminal a arduino virtual use virtual terminal
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -150

1. Simulado con proteus y arduino virtual y virtual terminal

CODIGO EN ARDUINO

int ledVerde = 13; //Pin donde se encuentra el LED, salida


int ledRojo =8;
char leer; //Variable donde se almacena la letra
int boton=2; //Pin donde se encuentra el pulsador, entrada
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
Serial.begin(9600); //Inicia comunicación serial
pinMode(boton,INPUT); //Configurar el boton como una entrada
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
}
void loop() // Esta funcion se mantiene ejecutando
{
int estado = digitalRead(boton); // el arduino va enviar
digitalWrite(ledRojo,estado);
Serial.println(estado); // escribe en el puerto serial
delay(10);
leer=Serial.read(); // el arduino recibe del puerto serial
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -151

switch(leer)
{ case 'A' : digitalWrite(ledVerde,HIGH); Serial.println("Led Verde Prendido ");break;
case 'B' : digitalWrite(ledVerde,LOW);Serial.println("Led Verde Apagado Apagado
"); break;
}
delay(10);
}

2. Simulado con proteus y arduino virtual y puerto virtual(COMPIM)( simula


un puerto virtual exterior)
Instale VSPE

Cargar el puerto virtual


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -152
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -153

Modificar las propiedades del COMPIM


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -154

3. Simulado con visual basic y proteus usando puerto virtual


Diseñe el siguiente formulario en Visual Basic
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -155

Diseño del formulario en Visual Basic 2012

Escriba el siguiente código en visual Basic

Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Dim cont As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "COM4" ' 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
CheckForIllegalCrossThreadCalls = False ' Esta línea no le gusta mucho a los
programadores, pero aquí la ponemos para que funcione el Label1
End Sub
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -156

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As


System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim Estado As Integer
txtEnviar.Text = SerialPort1.ReadLine
Estado = Val(txtEnviar.Text)
If Estado = 1 Then
btnSeñal.BackColor = Color.Red
Else
btnSeñal.BackColor = Color.DarkRed
End If
End Sub

Private Sub ApagarLed(ByVal sender As System.Object, ByVal e As


System.EventArgs) Handles btnApagar.Click
SerialPort1.WriteLine("B")
End Sub
Private Sub Listar(ByVal sender As Object, ByVal e As EventArgs) Handles
btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Private Sub btnAbrir_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles btnAbrir.Click
SerialPort1.Open()
BtnCerrar.Enabled = True
btnAbrir.Enabled = False
End Sub

Private Sub btnCerrar_Click(ByVal sender As Object, ByVal e As EventArgs)


Handles BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
End Sub

Private Sub btnDetener_Click(ByVal sender As Object, ByVal e As EventArgs)


Handles btnDetener.Click
Timer1.Stop()
End Sub
Private Sub btnAuto_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles BtnAutomatico.Click
Timer1.Interval = Val(txtInterval.Text)
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles


Timer1.Tick
If cont Mod 2 = 0 Then
SerialPort1.WriteLine("A")
Else
SerialPort1.WriteLine("B")
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -157

End If
cont = cont + 1
txtEnviar.Text = cont
End Sub

Private Sub btnPrender_Click(ByVal sender As Object, ByVal e As EventArgs)


Handles btnPrender.Click
SerialPort1.WriteLine("A")
End Sub
End Class

ELCODIGO DEL ARDUINO MODIFICADO ES

int ledVerde = 13; //Pin donde se encuentra el LED, salida


int ledRojo =8;
char leer; //Variable donde se almacena la letra
int boton=2; //Pin donde se encuentra el pulsador, entrada
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
Serial.begin(9600); //Inicia comunicación serial
pinMode(boton,INPUT); //Configurar el boton como una entrada
pinMode(ledVerde, OUTPUT);
pinMode(ledRojo, OUTPUT);
}

void loop() // Esta funcion se mantiene ejecutando


{
int estado = digitalRead(boton); // el arduino va enviar
digitalWrite(ledRojo,estado);
switch ( estado)
{
case 1: Serial.println("1"); break;
case 0: Serial.println("0"); break;
default :Serial.println("2"); break;
}
delay(5);
leer=Serial.read(); // el arduino recibe del puerto serial
switch(leer)
{ case 'A' : digitalWrite(ledVerde,HIGH); Serial.println("Led Verde Prendido ");break;
case 'B' : digitalWrite(ledVerde,LOW);Serial.println("Led Verde Apagado Apagado
"); break;
}
delay(5);
}

Ejecute el HMI desde visual Basic. debe salir una pantalla parecida a esto
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -158

Estado en proteus al presionar el botón se prende el led rojol y envía al visual basic
el nro 1 y 0 en caso contrario

Estando en visual basic si sei presiona el botón enviar entonces prende el led verde
en Proteus y en el puerto serial de arduino se escribe prendido , en caso contrario se
apaga el led verde y se escribe apagado en puerto serial

1. arduino físico y protoboar físico


2. Simulado con visual basic con arduino físico y protoboar físico

PRACTICA EN LABORATORIO

1. PRENDER Y APAGAR UN LED CON ARDUINO

Modifique la el tutorial T4 y T5 para prender unled la letra A y apagar con la


letra B

Realice el siguiente diseño en Proteus

El codigo en arduino es

int led = 13; //Pin donde se encuentra el LED, salida


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -159

char leer; //Variable donde se almacena la letra


void setup() // Se ejecuta cada vez que el Arduino se inicia
{ Serial.begin(9600); //Inicia comunicación serial
pinMode(led, OUTPUT); //Configurar el LED como una salida
}
void loop() // Esta funcion se mantiene ejecutando
{ leer=Serial.read();
switch(leer)
{case 'A':digitalWrite(led,HIGH);break;
case 'B':digitalWrite(led,LOW);break;
}
}

Se tiene tres focos se tiene el siguiente cuadro de control

FOCO PRENDIDO APAGADO


ROJO A D
VERDE B E
AZUL C F

int rojo = 11; //Pin donde se encuentra el LED, salida


int verde = 12; //Pin donde se encuentra el LED, salida
int azul = 13; //Pin donde se encuentra el LED, salida
char leer; //Variable donde se almacena la letra
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
Serial.begin(9600); //Inicia comunicación serial
pinMode(rojo, OUTPUT); //Configurar el LED como una salida
pinMode(verde, OUTPUT); //Configurar el LED como una salida
pinMode(azul, OUTPUT); //Configurar el LED como una salida
}
void loop() // Esta funcion se mantiene ejecutando
{ leer=Serial.read();
delay(10);
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -160

switch(leer)
{case 'A':digitalWrite(rojo,HIGH);break;
case 'B':digitalWrite(verde,HIGH);break;
case 'C':digitalWrite(azul,HIGH);break;
case 'D':digitalWrite(rojo,LOW);break;
case 'E':digitalWrite(verde,LOW);break;
case 'F':digitalWrite(azul,LOW);break;
}
}

Ponga delay(100) después case ´”F”

ABCDEFABCDEF Y VEA EL JUEGO DE LUCES ( si usted desea analogico pruebe


con escritura analógica

El mismo ejercicio pero controlado desde visual basic ( u otro software como el
Blender) vea la guía de practicas nro 6

Diseñe lo siguiente en Visual Basic


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -161

CODIGO EN VISUAL BASIC

Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Dim Cadena As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "COM4" ' 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
ListBox1.Items.Add("PUERTO CERRADO")
End Sub
Private Sub Listar(sender As Object, e As EventArgs) Handles BtnListar.Click
' Show all available COM ports.
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub

Private Sub BtnAbrir_Click(sender As Object, e As EventArgs) Handles


BtnAbrir.Click
SerialPort1.Open()
BtnCerrar.Enabled = True
BtnAbrir.Enabled = False
ListBox1.Items.Add("PUERTO ABIERTO")
End Sub
Private Sub btnRojo_Click(sender As Object, e As EventArgs) Handles
btnRojo.Click
Try
SerialPort1.Write("A")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles
BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
BtnAbrir.Enabled = True
ListBox1.Items.Add("PUERTO CERRADO")
End Sub
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -162

Private Sub btnEnviar_Click_1(sender As Object, e As EventArgs) Handles


btnEnviar.Click
Try
SerialPort1.Write(TextBox1.Text)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub btnApagar_Click(sender As Object, e As EventArgs) Handles


btnApagar.Click
Try
SerialPort1.Write("D")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub btnaleatorio_Click(sender As Object, e As EventArgs) Handles


btnaleatorio.Click
Randomize()
Dim cadena As String = ""
Dim fila As Integer
Dim r As Integer
For fila = 0 To 50
r = Int(Rnd() * 6)
cadena = cadena + Chr(65 + r)
Next
TextBox1.Text = cadena
End Sub
End Class

Ejecute y vera lo siguiente


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -163

EJERCICIO DE ENTRADA ANALOGICA


FUNCION MAP

La función map permite dividir en un rango dado de valores en “partes”.


int opcion = map(volumen, 0, 1023, 0, 3);
// map(entrada, valorMinimo, valorMaximo, desde, hasta)
En este ejemplo divide en 4 valores posibles. [0,1,2,3]. Ya que son los parámetros
anteúltimo y último.

Uso de la Funcion Map para led RGB 3 colores (manejo con potenciómetros)

Con tres potenciómetros se controla el brillo de leds RGB el mismo se puede enviar
por el puerto serial los valores Rojo verde y azul para luego mostrar por ejemplo en
Visual Basic

Diagrama en Proteus
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -164

CODIGO EN ARDUINO

int LedRojo=11;
int LedVerde=10;
int LedAzul=9;
int ERojo=A0;
int EVerde=A1;
int EAzul=A2;
void setup() {
pinMode(LedRojo,OUTPUT);//D
pinMode(LedVerde,OUTPUT);//D
pinMode(LedAzul,OUTPUT);//D
pinMode(ERojo,INPUT);//D
pinMode(EVerde,INPUT);//D
pinMode(EAzul,INPUT);//D
Serial.begin(9600);
}
void loop()
{
int Rojo= analogRead(ERojo);
int Verde= analogRead(EVerde);
int Azul= analogRead(EAzul);

int CRojo= map(Rojo,0,255,0,1023);


int CVerde= map(Verde,0,255,0,1023);
int CAzul = map(Azul,0,255,0,1023);
long Valor=CRojo*65536+CVerde*256+CAzul;
analogWrite(LedRojo,Rojo);
analogWrite(LedVerde,Verde);
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -165

analogWrite(LedAzul,Azul);
Serial.println(Valor);
delay(5);
}

Resultado

CODIGO EN VISUAL BASIC

Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Dim Valor As Long
Dim Rojo, Verde, Azul As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "COM4" ' 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
CheckForIllegalCrossThreadCalls = False ' Esta línea no le gusta mucho a los
programadores, pero aquí la ponemos para que funcione el Label1
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -166

Dim Resto As Integer


Try
txtValor.Text = SerialPort1.ReadLine
Valor = Val(txtValor.Text)
Rojo = Int(Valor / 65536)
Resto = Valor - Rojo * 65536
Verde = Int(Resto / 256)
Azul = Resto - Verde * 256
txtRojo.Text = Rojo
txtVerde.Text = Verde
txtAzul.Text = Azul
btnColor.BackColor = Color.FromArgb(Rojo, Verde, Azul)
'System.Threading.Thread.Sleep(5) ' 1 segundo
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub Listar(ByVal sender As Object, ByVal e As EventArgs) Handles
btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Private Sub btnAbrir_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles btnAbrir.Click
SerialPort1.Open()
BtnCerrar.Enabled = True
btnAbrir.Enabled = False
End Sub
Private Sub btnCerrar_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
End Sub
End Class

Resultado
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -167

CODIGO DEL ARDUINO MODIFICADO PARA VISUAL BASIC 2012

int LedRojo=11;
int LedVerde=10;
int LedAzul=9;
int ERojo=A0;
int EVerde=A1;
int EAzul=A2;
void setup() {
pinMode(LedRojo,OUTPUT);//D
pinMode(LedVerde,OUTPUT);//D
pinMode(LedAzul,OUTPUT);//D
pinMode(ERojo,INPUT);//D
pinMode(EVerde,INPUT);//D
pinMode(EAzul,INPUT);//D
Serial.begin(9600);
}
void loop()
{
int Rojo= analogRead(ERojo);
int Verde= analogRead(EVerde);
int Azul= analogRead(EAzul);
//delay(5);
int CRojo= map(Rojo,0,1023,0,255);
int CVerde= map(Verde,0,1023,0,255);
int CAzul = map(Azul,0,1023,0,255);
long Valor=CRojo*65536+CVerde*256+CAzul;
analogWrite(LedRojo,Rojo);
analogWrite(LedVerde,Verde);
analogWrite(LedAzul,Azul);
Serial.println(Valor);
// delay(5);
}

MUEVA UN RECTANGULO EN VISUAL BASIC CON DOS POTENCIOMETROS


DESD3E ARDUINO
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -168

int amarillo = 11; //Pin donde se encuentra el LED, salida


int verde = 10; //Pin donde se encuentra el LED, salida
int Entrada1 =A0;
int Entrada2 =A1;
void setup() // Se ejecuta cada vez que el Arduino se inicia
{
pinMode(Entrada1, INPUT); //Configurar el LED como una salida
pinMode(Entrada2, INPUT); //Configurar el LED como una salida

pinMode(amarillo, OUTPUT); //Configurar el LED como una salida


pinMode(verde, OUTPUT); //Configurar el LED como una salida
Serial.begin(9600); //Inicia comunicación serial
}
void loop() // Esta funcion se mantiene ejecutando
{
int valor1= analogRead(Entrada1);
int valor2= analogRead(Entrada2);
Serial.print(valor1);
Serial.print(":");
Serial.println(valor2);
//analogWrite(led,valor %255);
int velocidad1= map(valor1,0,255,0,1023);
int velocidad2= map(valor2,0,255,0,1023);
analogWrite(amarillo,velocidad1);
analogWrite(verde,velocidad2);
//delay(100);
}
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -169

CODIGO DEL VISUAL BASIC

Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Imports System.Drawing
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Dim cadena, cadena1, cadena2 As String
Dim ValorX, ValorY As Integer
Dim Pen As Pen
Dim Grafico As Graphics
Dim brocha As SolidBrush
Dim ancho As Integer = 100
Dim alto As Integer = 50
Dim cont As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "COM4" ' 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
CheckForIllegalCrossThreadCalls = False ' Esta línea no le gusta mucho a los
programadores, pero aquí la ponemos para que funcione el Label1
ListBox1.Items.Add("Puerto Abierto")
cadena = "000:000"
Grafico = PictureBox1.CreateGraphics
Pen = New Pen(Color.Blue, 2)
brocha = New SolidBrush(Color.FromArgb(255, 255, 0))
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim pos As Integer
Try
cadena = SerialPort1.ReadLine
txtSeñal.Text = cadena
pos = InStr(cadena, ":")
cadena1 = Mid(cadena, 1, pos - 1)
cadena2 = Mid(cadena, pos + 1)
txtSeñal1.Text = cadena1
txtSeñal2.Text = cadena2
graficar()
ListBox1.Items.Add(cont & " " & cadena)
If cont <= 10000 Then
cont = cont + 1
Else
cont = 0
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -170

End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub Listar(ByVal sender As Object, ByVal e As EventArgs) Handles


btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Private Sub btnAbrir_Click(ByVal sender As Object, ByVal e As EventArgs)
Handles btnAbrir.Click
SerialPort1.Open()
BtnCerrar.Enabled = True
btnAbrir.Enabled = False
ListBox1.Items.Add("Puerto Abierto")
End Sub

Private Sub btnCerrar_Click(ByVal sender As Object, ByVal e As EventArgs)


Handles BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
ListBox1.Items.Add("Puerto Cerrado")
End Sub
Sub graficar()
Grafico.Clear(Color.Black)
ValorX = Val(txtSeñal1.Text)
ValorY = Val(txtSeñal2.Text)
Grafico.DrawRectangle(Pen, ValorX, ValorY, ancho, alto)
End Sub
End Class

EJERCICIO COMPLETO DE MANEJO RGB

Diseñe lo siguiente en visual basic


GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -171

CODIGO EN VISUAL BASIC

Imports System.Drawing
Imports System.IO
Imports System.IO.Ports
Imports System.Threading
Public Class Form1
Shared _continue As Boolean
Shared _serialPort As SerialPort
Public rojo As Integer
Public verde As Integer
Public azul As Integer
Public Rled ' Aleatorio
Public CadRojo As String
Public CadVerde As String
Public CadAzul As String
Public contVerde As Integer = 0
Public Velocidad As Integer = 10
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
SerialPort1.Close()
SerialPort1.PortName = "COM4" ' Cambia elbli 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
BtnCerrar.Enabled = False
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -172

btnAbrir.Enabled = True
txtVel.Text = Velocidad
txtRojo.Text = rojo
txtVerde.Text = verde
txtAzul.Text = azul
End Sub

Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles


BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
End Sub
Private Sub btnListar_Click(sender As Object, e As EventArgs) Handles
btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub

Private Sub btnAbrir_Click(sender As Object, e As EventArgs) Handles


btnAbrir.Click
Try
btnAbrir.Enabled = False
BtnCerrar.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
SerialPort1.Open()
End Sub

Private Sub BtnEnviarRojo(sender As Object, e As EventArgs) Handles


BtnRojo.Click
Try
CadRojo = "R" + txtRojo.Text
rojo = Val(txtRojo.Text)
btnMrojo.BackColor = Color.FromArgb(rojo, 0, 0)
btnMResultado.BackColor = Color.FromArgb(rojo, verde, azul)
SerialPort1.Write(CadRojo)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub btnVerde_Click(sender As Object, e As EventArgs) Handles


btnVerde.Click
Try
CadVerde = "V" + txtVerde.Text
verde = Val(txtVerde.Text)
btnMVerde.BackColor = Color.FromArgb(0, verde, 0)
btnMResultado.BackColor = Color.FromArgb(rojo, verde, azul)
SerialPort1.Write(CadVerde)
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -173

Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnAzul_Click(sender As Object, e As EventArgs) Handles


BtnAzul.Click
Try
CadAzul = "A" + TxtAzul.Text
azul = Val(TxtAzul.Text)
btnMAzul.BackColor = Color.FromArgb(0, 0, azul)
btnMResultado.BackColor = Color.FromArgb(rojo, verde, azul)
SerialPort1.Write(CadAzul)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnAleatorio_Click(sender As Object, e As EventArgs) Handles


BtnAleatorio.Click
Rled = 1 + Int(Rnd() * 3)
Select Case Rled
Case 1
txtRojo.Text = Int(Rnd() * 253)
BtnEnviarRojo(sender, e)
Case 2
txtVerde.Text = Int(Rnd() * 253)
btnVerde_Click(sender, e)
Case 3
txtAzul.Text = Int(Rnd() * 253)
BtnAzul_Click(sender, e)
End Select
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
BtnAleatorio_Click(sender, e)
End Sub

Private Sub BtnAuto_Click(sender As Object, e As EventArgs) Handles


BtnAuto.Click
Try
Timer1.Interval = Val(txtVel.Text)
Timer1.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub btnDetener_Click(sender As Object, e As EventArgs) Handles
btnDetener.Click
Timer1.Stop()
End Sub

CODIGO EN ARDUINO
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -174

char Cadena[10]="R123";
char dato;
char letra;
int nro,i;
int Rojo=9;
int Verde=10;
int Azul=11;
int valor=0;
void setup() {
pinMode(Rojo,OUTPUT);//D
pinMode(Verde,OUTPUT);//D
pinMode(Azul,OUTPUT);//D
Serial.begin(9600);
}
void loop()
{ i=0;
if (Serial.available() > 0)
{ valor=1;
while (Serial.available() > 0)
{
dato= Serial.read();
delay(5);
if (i==0 )
letra=dato;
else
Cadena[i-1]=dato;
i++;
}
Cadena[i-1]='\n';
Serial.println(Cadena);
nro = atoi(Cadena) ;
i=0;
}
if (valor==1)
{
Serial.print(letra);

Serial.println(Cadena);
switch(letra)
{ case 'R': analogWrite(Rojo, nro); break;
case 'V': analogWrite(Verde, nro); break;
case 'A': analogWrite(Azul, nro); break;
}
delay(10);
valor=0;
}
}

El resultado es
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -175

Ponga led RGB de un sola Unidad Y use papel para difusión

EJERCICIOS DE MANEJO DE PRUERTO SERIAL EN VISUAL BASIC ( SIN


NECESIDAD DE PROGRAMAR EN ARDUINO solo con el puerto serial)

Al presionar enviar en el Visual envía los datos del Txtenviar el puerto serial en este
caso es el puerto serial Nro 5 ( del arduino pero no se programa nada)
Estando en le Com 4. Al poner enviar entonces se recibe visual el mensaje

Imports System.Drawing
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
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -176

SerialPort1.Close()
SerialPort1.PortName = "COM4" ' 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
CheckForIllegalCrossThreadCalls = False
End Sub
Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles
BtnCerrar.Click
SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
End Sub
Private Sub btnListar_Click(sender As Object, e As EventArgs) Handles
btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub
Private Sub btnAbrir_Click(sender As Object, e As EventArgs) Handles
btnAbrir.Click
Try
SerialPort1.Open()
btnAbrir.Enabled = False
btnCerrar.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub BtnEnviarRojo(sender As Object, e As EventArgs) Handles
btnEnviar.Click
Try
SerialPort1.WriteLine(TxtEnviar.Text)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Try
ListBox1.Items.Add(SerialPort1.ReadLine)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

Tarea. Como trabajar con dos puertos seriales en visual basic( 2 arduinos)
Entonces visual prodria trabajar con dos arduinos como se muestra
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -177

NUMEROS ALEATORIOS EN ARDUINO

Se desea simular por un tiempo determinado una señal que debe generar con
numero ( que representa la lectura de un sensor , que debe ser lleido por el visual
basic para luego grabarlo procesarlo y mostrarlo en excel

Diagrama en proteus
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -178

CODIGO EN ARDUINO

int valor,i,dato,nro; // variable que almacena el valor aleatorio


int led = 10; // define led como 10
int cont=0; //PARA que se un minuto debe ser 200
char Cadena[10];
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
i=0;
if (Serial.available() > 0)
{ valor=1;
while (Serial.available() > 0)
{
dato= Serial.read();
delay(5);
Cadena[i]=dato;
i++;
}
Cadena[i-1]='\n';
Serial.println(Cadena);
nro = atoi(Cadena) ;
i=0;
cont=0;
}
if (cont<nro)
{ Serial.println(Cadena);
cont++;
valor = random(100, 200);
Serial.println(valor);
analogWrite(led, valor); // envía a la salida led de tipo PWM el valor
delay(50);
}
else
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -179

{ if (nro >0)
{ Serial.println("fin");
analogWrite(led, 0);
nro=0;
}
}
}

CODIGO EN VISUAL BASIC

Imports System.Drawing
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 = "COM4" ' 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
CheckForIllegalCrossThreadCalls = False
End Sub

Private Sub BtnCerrar_Click(sender As Object, e As EventArgs) Handles


BtnCerrar.Click
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -180

SerialPort1.Close()
BtnCerrar.Enabled = False
btnAbrir.Enabled = True
End Sub
Private Sub btnListar_Click(sender As Object, e As EventArgs) Handles
btnListar.Click
For Each sp As String In My.Computer.Ports.SerialPortNames
ListBox1.Items.Add(sp)
Next
End Sub

Private Sub btnAbrir_Click(sender As Object, e As EventArgs) Handles


btnAbrir.Click
Try
SerialPort1.Open()
btnAbrir.Enabled = False
btnCerrar.Enabled = True
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub BtnEnviarRojo(sender As Object, e As EventArgs) Handles


btnEnviar.Click
Try
SerialPort1.WriteLine(TxtEnviar.Text)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As
System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Try
ListBox1.Items.Add(SerialPort1.ReadLine)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

Tarea eleaborar un proceso que dibuje cartas de control de un sistema automatico


para control control de temperatura, distancias etc, en control de tempertura si la
temperatura al limete superior prender calentador y es menor que el inferior al limite
prender calentador usar contador de 8 digitos o lcd.

NOTAS
 Como actuadores digitales, tenemos luces, alarmas, sirenas, desbloqueo de puertas,
etc.

A esta resistencia que fuerza el valor alto en vacio se le conoce como pullup Si la
conectáramos a masa para forzar una lectura a Ground se le
llamaría pulldown resisto
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -181

int LED = 10 ;
int boton = 6;
void setup()
{
pinMode( LED, OUTPUT) ; // LED como salida
pinMode( boton , INPUT) ; //botón como entrada
}
void loop()
{
int valor = digitalRead(boton) ; // leemos el valor de boton en valor
digitalWrite( LED, !valor) ;
}
int pulsador1=2; //Pin donde se encuentra el pulsador, entrada
int pulsador2=3; //Pin donde se encuentra el pulsador, entrada
int motor=10; //Pin donde se encuentra el pulsador, entrada

void setup() // Se ejecuta cada vez que el Arduino se inicia


{ Serial.begin(9600);
pinMode(pulsador1, INPUT); //Configurar el pulsador como una entrada
pinMode(pulsador2, INPUT); //Configurar el pulsador como una entrada

pinMode(motor, OUTPUT); //Configurar el pulsador como una entrada


}
void loop() // Esta funcion se mantiene ejecutando
{ // cuando este energizado el Arduino
int valor1 = !digitalRead(pulsador1);
delay(10);
int valor2 = !digitalRead(pulsador2);
delay(10);
digitalWrite(motor,valor2);
int resultado=valor1 && valor2;
digitalWrite(motor,valor1);
}

7 COMUNICACIÓN CON EL EXTERIOR


El puerto serie en Arduino y los tipos String
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -182

void setup()
{
Serial.begin(9600) ; // Inicializa el Puerto seria 9600 bits por
segundo
}
void loop()
{
int i = 54 ;
Serial.println( i );
}

RECIBIENDO MENSAJES A TRAVÉS DEL PUERTO SERIE


.
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -183

void setup()
{
Serial.begin(9600) ; // Inicializa el Puerto serie
}
void loop()
{
if (Serial.available() > 0)
{
int x = Serial.parseInt();
Serial.println ( x) ;
}
}

String unacadena="En un lugar de La Mancha de cuyo nombre";


String otracadena="Erase una vez";
byte pos=0;
String cadenaEntero="13asdf";
void setup(){
Serial.begin(9600);
//Devolverá 39
Serial.println(unacadena.length());
//Devolverá 1 (true)
Serial.println(unacadena.endsWith("nombre"));
//Devolverá 1 (true)
Serial.println(unacadena.startsWith("En"));
//Devolverá un número negativo ('n' va antes de 'r')
Serial.println(unacadena.compareTo(otracadena));
//Devolverá 0 (son diferentes)
Serial.println(unacadena.equals(otracadena));
//Devolverá 0 (son diferentes)
Serial.println(unacadena.equalsIgnoreCase(otracadena));
//Primero devolverá 12 (primer "de") y luego 25 (segundo "de")
pos=unacadena.indexOf("de");
Serial.println(pos);
Serial.println(unacadena.indexOf("de",pos+1));
//Devolverá -1 porque se empieza a buscar antes
Serial.println(unacadena.lastIndexOf("Mancha",3));
//Devolverá 'n'
Serial.println(unacadena.charAt(1));
//Devolverá “un”
Serial.println(unacadena.substring(3,6));
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -184

//Devolverá “cuyo nombre”


Serial.println(unacadena.substring(unacadena.indexOf("cuyo")));
//La palabra “apellido” sustituye a “nombre”
unacadena.replace("nombre","apellido");
Serial.println(unacadena);
//La letra 'I' sustituye a la primera ('E')
unacadena.setCharAt(0,'I');
Serial.println(unacadena);
//Toda la cadena se transforma en mayúsculas
unacadena.toUpperCase();
Serial.println(unacadena);
//Se eliminan los espacios en blanco en los extremos
unacadena.trim();
Serial.println(unacadena);
//”otracadena” se concatena con “unacadena”
unacadena.concat(otracadena);
Serial.println(unacadena);
//Devolverá "13asdf7" (“+” actúa como concatenador de cadenas)
Serial.println(cadenaEntero+7);
/*La instrucción toInt() convierte la cadena "13asdf7" en el número
entero 13, por lo que "+" ahora actúa como operador suma */
Serial.println(cadenaEntero.toInt() +7);
}
void loop(){}
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -185

String cadena="R123V255A124";
byte posRojo=0;
byte posVerde=0;
byte posAzul=0;
void setup(){
Serial.begin(9600);
}
//Devolverá 39
void loop(){
Serial.println(cadena);
posRojo=cadena.indexOf("R");
posVerde=cadena.indexOf("V");
posAzul=cadena.indexOf("A");
Serial.println("PosRojo "+String(posRojo));
Serial.println("PosVerde "+String(posVerde));
Serial.println("PosAzul "+String(posAzul));
Serial.println("Cadena Roja "+cadena.substring(posRojo+1,posVerde));
Serial.println("Cadena Verde "+cadena.substring(posVerde+1,posAzul));
Serial.println("Cadena Azul "+cadena.substring(posAzul+1));
delay(2000);
}

R123V23A234
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -186

int LedRojo=9;
int LedVerde=10;
int LedAzul=11;

String cadena="R123V255A124";
byte posRojo=0;
byte posVerde=0;
byte posAzul=0;
void setup(){
Serial.begin(9600);
pinMode(LedRojo,OUTPUT);//D
pinMode(LedVerde,OUTPUT);//D
pinMode(LedAzul,OUTPUT);//D
}
//Devolverá 39
void loop(){
if (Serial.available())
{
cadena = Serial.readStringUntil('\n');
Serial.println(cadena);
posRojo=cadena.indexOf("R");
posVerde=cadena.indexOf("V");
posAzul=cadena.indexOf("A");
Serial.println("PosRojo "+String(posRojo));
Serial.println("PosVerde "+String(posVerde));
Serial.println("PosAzul "+String(posAzul));

Serial.println("Cadena Roja "+cadena.substring(posRojo+1,posVerde));


Serial.println("Cadena Verde "+cadena.substring(posVerde+1,posAzul));
Serial.println("Cadena Azul "+cadena.substring(posAzul+1));
int vRojo, vVerde, vAzul;

vRojo=cadena.substring(posRojo+1,posVerde).toInt();
vVerde=cadena.substring(posVerde+1,posAzul).toInt();
vAzul=cadena.substring(posAzul+1).toInt();
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -187

analogWrite(LedRojo, vRojo);
analogWrite(LedVerde,vVerde);
analogWrite(LedAzul,vAzul);
delay(20);
}
}

Module Module1
Sub Main()
Dim Cadena As String = "110"
Dim fila As Integer
Dim nro, valor, vf As Integer
Dim cont As Integer = 0
Dim factor As Integer = 0
For fila = Len(Cadena) - 1 To 0 Step -1
nro = Val(Cadena(fila))
factor = Math.Pow(2, cont)
valor = nro * factor
vf = vf + valor
cont = cont + 1
Next
Console.WriteLine(" el numero es " & vf)
Console.ReadLine()
End Sub
End Module

Module Module1
Sub Main()
Dim Cadena As String = ""
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -188

Dim fila As Integer


Dim nro, valor, vf As Integer
Dim cont As Integer = 0
Dim factor, COCIENTE, RESTO As Integer
nro = 6
While nro > 1
COCIENTE = nro \ 2
RESTO = nro Mod 2
Cadena = RESTO & Cadena
nro = COCIENTE
End While
Cadena = COCIENTE & Cadena
Console.WriteLine(" el numero es " & Cadena)
Console.ReadLine()
End Sub
End Module

También podría gustarte