Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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
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
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
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.
Ejemplo
WWW.multitecnologia.com/MedidorTemperatura.rar
Descargue WWW.multitecnologia.com/MedidorTemperatura.rar
En este programa vamos a simular que tenemos dos sensores de color y deseamos
que el proceso se detenga cuando ambos colores sean iguales
EL CONTROL CHART
http://www.softwarefx.com/sfxTrial/getFreeProduct.asp?ProdPlatform=N&Email=
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
CODIGO EN ARDUINO
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);
}
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
End If
cont = cont + 1
txtEnviar.Text = cont
End Sub
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
PRACTICA EN LABORATORIO
El codigo en arduino es
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;
}
}
El mismo ejercicio pero controlado desde visual basic ( u otro software como el
Blender) vea la guía de practicas nro 6
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
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);
analogWrite(LedAzul,Azul);
Serial.println(Valor);
delay(5);
}
Resultado
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
Resultado
GP DE AUTOMATIZ.INDUSTRIAL 2019A\3.HMI ARDUINO Y VISUAL BASIC\Ismael Véliz Vilca -167
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);
}
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
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
Catch ex As Exception
MsgBox(ex.Message)
End Try
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
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
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
{ if (nro >0)
{ Serial.println("fin");
analogWrite(led, 0);
nro=0;
}
}
}
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
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
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()
{
Serial.begin(9600) ; // Inicializa el Puerto seria 9600 bits por
segundo
}
void loop()
{
int i = 54 ;
Serial.println( i );
}
void setup()
{
Serial.begin(9600) ; // Inicializa el Puerto serie
}
void loop()
{
if (Serial.available() > 0)
{
int x = Serial.parseInt();
Serial.println ( x) ;
}
}
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));
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