Saludos.
El proyecto que tengo es el siguiente, es una interfaz hecha en Visual Basic 2008, que envía datos por el puerto serial y se conecta con un max232 a un PIC16F876, y posteriormente se realiza el control para un servomotor, pero hay ciertos detalles que me gustaría que me ayudaran.
Aquí les anexo todos los archivos.
Bueno, en sí son 2 problemas:
1.- Me gustaría poder cambiar de puerto COM, a la interfaz le puse unos RadioButtons, según el RadioButton que se presione es el COM que se usará, pero el problema es que una vez iniciada la aplicación, se inicializa el puerto y no sé cómo cambiarlo.
Soy nuevo en esto de interfaces de Visual Basic, y bajé un tutorial donde venía como mandar datos por el puerto serial, pero no viene como poder cambiar el COM que utilizamos.
Así que requiero de su ayuda para resolver este problema.
Aquí anexo todos los archivos y el código fuente.
2.- El otro problema que tengo, es que cada vez que se presiona un botón para mover el servo se ejecuta lo siguiente:
Con esto me enviá un carácter, en este caso una 'a' pero me gustaría si me pueden ayudar en un código que me envié muchas 'a' mientras esta presionado el botón, porque de esta manera el servo se mueve pero le tengo que estar aplastando al botón.
Quisiera saber si hay la forma de sensar cuando el botón se queda presionado, y enviar muchas 'a'
Aquí anexo el código completo de Visual Basic.
Para el caso del PIC, éste es el código fuente, está hecho con PICC de CCS:
El proyecto que tengo es el siguiente, es una interfaz hecha en Visual Basic 2008, que envía datos por el puerto serial y se conecta con un max232 a un PIC16F876, y posteriormente se realiza el control para un servomotor, pero hay ciertos detalles que me gustaría que me ayudaran.
Aquí les anexo todos los archivos.
Bueno, en sí son 2 problemas:
1.- Me gustaría poder cambiar de puerto COM, a la interfaz le puse unos RadioButtons, según el RadioButton que se presione es el COM que se usará, pero el problema es que una vez iniciada la aplicación, se inicializa el puerto y no sé cómo cambiarlo.
Soy nuevo en esto de interfaces de Visual Basic, y bajé un tutorial donde venía como mandar datos por el puerto serial, pero no viene como poder cambiar el COM que utilizamos.
Así que requiero de su ayuda para resolver este problema.
Aquí anexo todos los archivos y el código fuente.
2.- El otro problema que tengo, es que cada vez que se presiona un botón para mover el servo se ejecuta lo siguiente:
Código:
Private Sub ButtonS1arriba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonS1arriba.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H61 'Envia una a
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Quisiera saber si hay la forma de sensar cuando el botón se queda presionado, y enviar muchas 'a'
Aquí anexo el código completo de Visual Basic.
Código:
Imports System.IO.Ports
Public Class Form1
Public Sub New()
InitializeComponent()
'Abrir puerto mientras se ejecuta la aplicacion
If Not SerialPort1.IsOpen Then
Try
SerialPort1.Open()
Catch ex As System.Exception
MessageBox.Show(ex.ToString())
End Try
End If
End Sub
Sub ConfiguracionPuerto()
If RadioButton3.Checked Then 'Configura el tipo de puerto
SerialPort1.PortName = "COM1"
End If
If RadioButton4.Checked Then
SerialPort1.PortName = "COM2"
End If
If RadioButton5.Checked Then
SerialPort1.PortName = "COM3"
End If
If RadioButton6.Checked Then
SerialPort1.PortName = "COM4"
End If
If RadioButton7.Checked Then
SerialPort1.PortName = "COM5"
End If
If RadioButton8.Checked Then
SerialPort1.PortName = "COM6"
End If
If RadioButton9.Checked Then
SerialPort1.PortName = "COM7"
End If
If RadioButton10.Checked Then
SerialPort1.PortName = "COM8"
End If
If RadioButton11.Checked Then
SerialPort1.PortName = "COM9"
End If
If RadioButton12.Checked Then
SerialPort1.PortName = "COM10"
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ConfiguracionPuerto()
End Sub
Private Sub ButtonS1arriba_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonS1arriba.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H61 'Envia una a
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
Private Sub ButtonS1abajo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonS1abajo.Click
Dim mBuffer As Byte() = New Byte(0) {}
mBuffer(0) = &H62 'Envia una b
SerialPort1.Write(mBuffer, 0, mBuffer.Length)
End Sub
End Class
PHP:
#include<16f876a.h>
#fuses XT,NOPROTECT,NOWDT,PUT
#use delay (clock=4000000)
#use fast_io(b)
#byte portb=0x06
#bit rb0=6.0
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
void iniciar(void);
void main()
{
set_tris_a(0xff);
set_tris_b(0b11111110);
portb=0;
disable_interrupts(GLOBAL);
iniciar();
}
void iniciar(void)
{
char caracter_recibido;
long int tiempo_alto,tiempo_bajo;
tiempo_alto=900; //damos el valor inicial para establecer el servo a 0 grados
while(TRUE)
{
if(kbhit()) //prueba si a llegado un caracter
{
caracter_recibido=getc(); //Guarda el caracter
if(caracter_recibido=='a') //si es una a
{
if(tiempo_alto<2100)
{ tiempo_alto+=10; } //incrementa el tiempo en alto
}
if(tiempo_alto>900)
{
if(caracter_recibido=='b') //si es una b
{ tiempo_alto-=10; } //decrementa el tiempo en alto
}
}
tiempo_bajo=20000-tiempo_alto; //establece el tiempo en bajo, como
//el servo hitec maneja f=50hz en tiempo son
//20000 microsegundos
rb0=1; //empieza el PWM
delay_us(tiempo_alto);
rb0=0;
delay_us(tiempo_bajo);
}
}
Adjuntos
Última edición por un moderador: