Comunicacao USB
3 participantes
Página 1 de 1
Comunicacao USB
Olá pessoal!!
Mostrarei um exemplo de como criar um software capaz de comunicar com um PIC via USB utlizando a biblioteca https://sites.google.com/site/microcontrolandos/arquivos/UsbLibrary.dll.
Mostrarei um exemplo de como criar um software capaz de comunicar com um PIC via USB utlizando a biblioteca https://sites.google.com/site/microcontrolandos/arquivos/UsbLibrary.dll.
- Código:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using UsbLibrary;
namespace Test
{
public partial class MainForm : Form
{
//Cria o objeto USB
UsbHidPort usb = new UsbHidPort();
public MainForm()
{
InitializeComponent();
//Define vid e pid
usb.VendorId = 0x1234; //VID
usb.ProductId = 0x0001; //PID
//Eventos da USB
usb.OnSpecifiedDeviceArrived += delegate
{
MessageBox.Show( "Seu dispositivo foi conectado" );
};
usb.OnSpecifiedDeviceRemoved += delegate
{
MessageBox.Show( "Seu dispositivo foi removido" );
};
usb.OnDeviceArrived += delegate
{
MessageBox.Show( "Algum dispositivo foi conectado" );
};
usb.OnDeviceRemoved += delegate
{
MessageBox.Show( "Algum dispositivo foi removido" );
};
usb.OnDataRecieved += DadosRecebidos;
}
#region Código obrigatório
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
usb.RegisterHandle(Handle);
}
protected override void WndProc(ref Message m)
{
usb.ParseMessages(ref m);
base.WndProc(ref m);
}
#endregion
void DadosRecebidos( object sender, DataRecievedEventArgs e )
{
EnviarDados( e.data );
}
void EnviarDados( byte[] dados )
{
usb.SpecifiedDevice.SendData( dados );
}
}
}
Última edição por Admin em Seg 6 Jan - 11:49:10, editado 2 vez(es)
Re: Comunicacao USB
Ao todo, quantos são os métodos desta classe ? teria como você fazer uam espécie de documentação desta biblioteca pra gente Tiago, explicando a chamada dos métodos e suas funções? Pelo menos as principais como: Leitura, escrita, Conexão, Desconexão, etc. Seria ótimo. Obrigado
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Comunicação USB Proteus Windows 8
Olá pessoal,
Aproveitando o tópico aberto sobre comunicação USB usando a plataforma .NET com C#, queria saber com vocês se eu consigo fazer uma Simulação no Proteus da comunicação do Supervisório que eu criar no Visual Studio com o circuito criado no Proteus usando na máquina o Windows 8 64 bits?
É isso ae... parabéns ae pelo fórum!!!!
Aproveitando o tópico aberto sobre comunicação USB usando a plataforma .NET com C#, queria saber com vocês se eu consigo fazer uma Simulação no Proteus da comunicação do Supervisório que eu criar no Visual Studio com o circuito criado no Proteus usando na máquina o Windows 8 64 bits?
É isso ae... parabéns ae pelo fórum!!!!
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Re: Comunicacao USB
Aonde e como eu passo meus parâmetro de VID e PID já pré configurada no arquivo USB.c do meu projeto utilizando esta biblioteca?
Obrigado.
Obrigado.
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Re: Comunicacao USB
Agora complicou..
No Programa Controlador USB você usa da seguinte maneira:
using UsbLibrary;
namespace ControladorUSB
{
public partial class MainForm : Form
{
Win32Usb winUsb = new Win32Usb();
enum Comandos {None=0, Analog, DigitalIn, DigitalOut, PWM};
byte[] UsbWriteData = new byte[65];
public MainForm()
{
InitializeComponent();
}
E AGORA FICOU ASSIM:
using UsbLibrary;
namespace Test
{
public partial class MainForm : Form
{
//Cria o objeto USB
UsbHidPort usb = new UsbHidPort();
public MainForm()
{
InitializeComponent();
//Define vid e pid
usb.VendorId = 0x1234; //VID
usb.ProductId = 0x0001; //PID
}
Qual a diferença entre este dois métodos?:
UsbHidPort usb = new UsbHidPort();
Win32Usb winUsb = new Win32Usb();
Minha dúvida pode ser a das mais simples, mas talvez seja a de muitos que possam visitar o site, pode ajudar alguém...
Obrigado
No Programa Controlador USB você usa da seguinte maneira:
using UsbLibrary;
namespace ControladorUSB
{
public partial class MainForm : Form
{
Win32Usb winUsb = new Win32Usb();
enum Comandos {None=0, Analog, DigitalIn, DigitalOut, PWM};
byte[] UsbWriteData = new byte[65];
public MainForm()
{
InitializeComponent();
}
E AGORA FICOU ASSIM:
using UsbLibrary;
namespace Test
{
public partial class MainForm : Form
{
//Cria o objeto USB
UsbHidPort usb = new UsbHidPort();
public MainForm()
{
InitializeComponent();
//Define vid e pid
usb.VendorId = 0x1234; //VID
usb.ProductId = 0x0001; //PID
}
Qual a diferença entre este dois métodos?:
UsbHidPort usb = new UsbHidPort();
Win32Usb winUsb = new Win32Usb();
Minha dúvida pode ser a das mais simples, mas talvez seja a de muitos que possam visitar o site, pode ajudar alguém...
Obrigado
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Re: Comunicacao USB
winUsb nao é usado...
O componente que realiza a comunicacao é o UsbHidPort.
Do jeito que eu postei lá em cima fica mais didático, pois no "ControladorUsb" o componente era declarado em outro arquivo.
O componente que realiza a comunicacao é o UsbHidPort.
Do jeito que eu postei lá em cima fica mais didático, pois no "ControladorUsb" o componente era declarado em outro arquivo.
Re: Comunicacao USB
Então deixa eu ver se entendi....
1) Este WinUSB então não está fazendo nada no Programa.... Correto? (obs: Comentei ele no seu Programa e compilou normal)
2) Este método: Win32Usb winUsb = new Win32Usb(); Serve para que na realidade?
3) Quando você fala que o que realiza a comunicação é o: UsbHidPort, você esta falando do método: UsbHidPort usb = new UsbHidPort(); ou do Componente USB que você adicionou no programa? (Inclusive o name do componente é usb)
4) Quando você diz que no programa o componente USB era declarado em outro arquivo, qual arquivo seria esse?
e... pra fechar....
5) Você diz... Selecione e arraste o componente USBLibrary para seu formulário e, edite suas propriedades e eventos. Quais propriedades eu mudo? não ví nenhuma propriedade que viesse a ser mudade...
Segue a imagem:
1) Este WinUSB então não está fazendo nada no Programa.... Correto? (obs: Comentei ele no seu Programa e compilou normal)
2) Este método: Win32Usb winUsb = new Win32Usb(); Serve para que na realidade?
3) Quando você fala que o que realiza a comunicação é o: UsbHidPort, você esta falando do método: UsbHidPort usb = new UsbHidPort(); ou do Componente USB que você adicionou no programa? (Inclusive o name do componente é usb)
4) Quando você diz que no programa o componente USB era declarado em outro arquivo, qual arquivo seria esse?
e... pra fechar....
5) Você diz... Selecione e arraste o componente USBLibrary para seu formulário e, edite suas propriedades e eventos. Quais propriedades eu mudo? não ví nenhuma propriedade que viesse a ser mudade...
Segue a imagem:
- Anexos
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Re: Comunicacao USB
A classe WinUsb é usado pelo UsbHidPort para fazer as configurações da usb.
Tanto o componente adicionado no programa quanto o declarado "UsbHidPort usb = new UsbHidPort()" são do mesmo tipo. Veja, não use os dois jeitos( declarar UsbHidPort e adicionar ) tudo no mesmo programa, se nao ocorrerá conflito.
Eu utilizo o SharpDevelop pra programar e todos os Controles do formulario sao criados automaticamente e salvo em outro arquivo. No seu caso, abra o arquivo "MainForm.designer.cs".
Para alterar as propriedades voce tem que selecionar o componente. Na imagem que voce mostrou, estava selecionada a biblioteca.
Tanto o componente adicionado no programa quanto o declarado "UsbHidPort usb = new UsbHidPort()" são do mesmo tipo. Veja, não use os dois jeitos( declarar UsbHidPort e adicionar ) tudo no mesmo programa, se nao ocorrerá conflito.
Eu utilizo o SharpDevelop pra programar e todos os Controles do formulario sao criados automaticamente e salvo em outro arquivo. No seu caso, abra o arquivo "MainForm.designer.cs".
Para alterar as propriedades voce tem que selecionar o componente. Na imagem que voce mostrou, estava selecionada a biblioteca.
Re: Comunicacao USB
Isso que eu não consigo entender....
Se a classe WinUSB é usada pelo UsbHidPort para fazer as configurações da USB, porque que eu comentei a instância da classe no seu Programa e ele não me deu erro?
Porque você não faz o instanciamento da classe nesse novo exemplo do post?
Se a classe WinUSB é usada pelo UsbHidPort para fazer as configurações da USB, porque que eu comentei a instância da classe no seu Programa e ele não me deu erro?
Porque você não faz o instanciamento da classe nesse novo exemplo do post?
JuniorLima- Mensagens : 10
Data de inscrição : 06/01/2014
Re: Comunicacao USB
Como te falei, a classe WinUSB é usado internamente pela classe UsbHidPort é não é necessário declará-la.
Re: Comunicacao USB
Tiago... Aonde eu consigo ver todos os métodos e eventos desta classe USB que eu posso usar?
Não manjo muito ainda... Onde eu acho?
Valeu!
Não manjo muito ainda... Onde eu acho?
Valeu!
Junior Lima- Mensagens : 9
Data de inscrição : 26/10/2013
Re: Comunicacao USB
Ah tá... entendeu... Mas Tiago,
Eu estou falando dos eventos da USB mesmo... por exemplo:
OnSpecifiedDeviceArrived
OnSpecifiedDeviceRemoved
OnDeviceArrived
OnDeviceRemoved
OnDataRecieved
Eu queria saber como faço para descobrir todos os métodos que eu posso usar... Ou são apenas esses mesmo?
Aonde eu vejo isso?
Eu estou falando dos eventos da USB mesmo... por exemplo:
OnSpecifiedDeviceArrived
OnSpecifiedDeviceRemoved
OnDeviceArrived
OnDeviceRemoved
OnDataRecieved
Eu queria saber como faço para descobrir todos os métodos que eu posso usar... Ou são apenas esses mesmo?
Aonde eu vejo isso?
Junior Lima- Mensagens : 9
Data de inscrição : 26/10/2013
Re: Comunicacao USB
Thiago, teria como me ajudar???
Fiz o código mas o programa não dá nenhum sinal.
Não tem erro nenhum...
olha como ficou:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UsbLibrary;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
UsbHidPort usbETEC = new UsbHidPort();
byte[] BufferEscritaUSB = new byte[65];
byte[] BufferAuxLeitura = new byte[65];
public Form1()
{
InitializeComponent();
try
{
usbETEC.ProductId = 1234;
usbETEC.VendorId = 1234;
usbETEC.CheckDevicePresent();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
#region Código obrigatório
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
usbETEC.RegisterHandle(Handle);
}
protected override void WndProc(ref Message m)
{
usbETEC.ParseMessages(ref m);
base.WndProc(ref m); // pass message on to base form
}
#endregion
//********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for CONECTADO
void UsbOnDeviceArrived(object sender, EventArgs e)
{
lblPIC.Text = "Alguem Conectou";
}
//********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for DESCONECTADO
void UsbOnDeviceRemoved(object sender, EventArgs e)
{
lblPIC.Text = "Saiu Alguem";
}
//********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for CONECTADO
void UsbOnSpecifiedDeviceArrived(object sender, EventArgs e)
{
lblPIC.Text = "Conectou";
}
//********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for DESCONECTADO
void UsbOnSpecifiedDeviceRemoved(object sender, EventArgs e)
{
lblPIC.Text = "Desconectou";
}
//******** FUNÇÃO RESPONSÁVEL PELO RECEBIMENTO DOS DADOS DA USB (PRECISA SER TRATADA... RODA EM OUTRA THREAD)
/*
void UsbOnDataRecieved(object sender, DataRecievedEventArgs args)
{
/*** Talvez use esse for para adequar os Indices da Matriz do PIC como do C#
for (int i = 0; i < args.data.Length; i++)
{
BufferAuxLeitura[i] = args.data[i + 1];
}
******
}*/
}
}
Fiz o código mas o programa não dá nenhum sinal.
Não tem erro nenhum...
olha como ficou:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UsbLibrary;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
UsbHidPort usbETEC = new UsbHidPort();
byte[] BufferEscritaUSB = new byte[65];
byte[] BufferAuxLeitura = new byte[65];
public Form1()
{
InitializeComponent();
try
{
usbETEC.ProductId = 1234;
usbETEC.VendorId = 1234;
usbETEC.CheckDevicePresent();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
#region Código obrigatório
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
usbETEC.RegisterHandle(Handle);
}
protected override void WndProc(ref Message m)
{
usbETEC.ParseMessages(ref m);
base.WndProc(ref m); // pass message on to base form
}
#endregion
//********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for CONECTADO
void UsbOnDeviceArrived(object sender, EventArgs e)
{
lblPIC.Text = "Alguem Conectou";
}
//********* Função Retorna Verdadeiro se QUALQUER dispositivo USB for DESCONECTADO
void UsbOnDeviceRemoved(object sender, EventArgs e)
{
lblPIC.Text = "Saiu Alguem";
}
//********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for CONECTADO
void UsbOnSpecifiedDeviceArrived(object sender, EventArgs e)
{
lblPIC.Text = "Conectou";
}
//********* Função Retorna Verdadeiro se o dispositivo ESPCÍFICO USB for DESCONECTADO
void UsbOnSpecifiedDeviceRemoved(object sender, EventArgs e)
{
lblPIC.Text = "Desconectou";
}
//******** FUNÇÃO RESPONSÁVEL PELO RECEBIMENTO DOS DADOS DA USB (PRECISA SER TRATADA... RODA EM OUTRA THREAD)
/*
void UsbOnDataRecieved(object sender, DataRecievedEventArgs args)
{
/*** Talvez use esse for para adequar os Indices da Matriz do PIC como do C#
for (int i = 0; i < args.data.Length; i++)
{
BufferAuxLeitura[i] = args.data[i + 1];
}
******
}*/
}
}
Junior Lima- Mensagens : 9
Data de inscrição : 26/10/2013
Re: Comunicacao USB
Olá!
Voce não adicionou os eventos ao usbETEC.
usbETEC.OnDeviceRemoved += UsbOnDeviceRemoved;
Faça o mesmo para os outros...
Voce não adicionou os eventos ao usbETEC.
usbETEC.OnDeviceRemoved += UsbOnDeviceRemoved;
Faça o mesmo para os outros...
Re: Comunicacao USB
Onde eu acrescento esses Eventos? Em qual lugar do meu código?
Obrigado pela ajuda.
Obrigado pela ajuda.
Junior Lima- Mensagens : 9
Data de inscrição : 26/10/2013
Re: Comunicacao USB
Deu Ceeertooo!!!!
Só uma observação: Quando eu coloco o sinal de += o próprio C# já cria a instância e a função.
Basta dar dois TAB.
Ficou assim então:
usbETEC.OnDataRecieved += new DataRecievedEventHandler(usbETEC_OnDataRecieved);
usbETEC.OnDataSend += new EventHandler(usbETEC_OnDataSend);
usbETEC.OnDeviceRemoved += new EventHandler(usbETEC_OnDeviceRemoved);
usbETEC.OnSpecifiedDeviceArrived += new EventHandler(usbETEC_OnSpecifiedDeviceArrived);
usbETEC.OnSpecifiedDeviceRemoved += new EventHandler(usbETEC_OnSpecifiedDeviceRemoved);
usbETEC.OnDeviceArrived += new EventHandler(usbETEC_OnDeviceArrived);
Valeu Thiago mais uma vez.
Só uma observação: Quando eu coloco o sinal de += o próprio C# já cria a instância e a função.
Basta dar dois TAB.
Ficou assim então:
usbETEC.OnDataRecieved += new DataRecievedEventHandler(usbETEC_OnDataRecieved);
usbETEC.OnDataSend += new EventHandler(usbETEC_OnDataSend);
usbETEC.OnDeviceRemoved += new EventHandler(usbETEC_OnDeviceRemoved);
usbETEC.OnSpecifiedDeviceArrived += new EventHandler(usbETEC_OnSpecifiedDeviceArrived);
usbETEC.OnSpecifiedDeviceRemoved += new EventHandler(usbETEC_OnSpecifiedDeviceRemoved);
usbETEC.OnDeviceArrived += new EventHandler(usbETEC_OnDeviceArrived);
Valeu Thiago mais uma vez.
Junior Lima- Mensagens : 9
Data de inscrição : 26/10/2013
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos