collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Comunicação Arduino C# (Library)  (Lida 13366 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Comunicação Arduino C# (Library)
« em: 22 de Fevereiro de 2010, 16:46 »
Boas,

Este fim de semana precisei de comunicar com a Arduino utilizando C# e como não encontrei nenhuma biblioteca disponivel que tratasse disto resolvi criar uma.

(Com certeza que não devo de ter pesquisado o suficiente ;) ).

Aqui esta o diagrama da classe que de momento tem apenas 3 metodos e um evento (não vi necessidade de mais nada).



Coloquei o codigo inicial no meu blog se quiserem testar. http://blog.skundu.net/?p=117

Assim que tiver mais finalizado e testado coloco aqui um rar com a solução.

Se tiverem algumas sugestões para funcionalidades ou questões de como usar coloquem aqui que eu respondo.

Espero que dê jeito a alguem.
« Última modificação: 13 de Janeiro de 2012, 18:27 por Psycop »
Dronetech BlogThe Scientist and the Geek

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Comunicação Arduino C# (Library)
« Responder #1 em: 22 de Fevereiro de 2010, 17:50 »
Muito bom... Tenho que ver se invento tempo para agarrar o C#!

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Comunicação Arduino C# (Library)
« Responder #2 em: 22 de Fevereiro de 2010, 19:24 »
Parece giro, que ferramentas usam para brincar com c?
Visual c# (por causa da referencia ao .net)  ???
Avr fanboy

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re: Comunicação Arduino C# (Library)
« Responder #3 em: 22 de Fevereiro de 2010, 21:38 »
Será que podias explicar um pouco melhor a utilidade desta biblioteca?
O Visual Studio já trás um componente SerialPort, com vários métodos, etc referentes a comunicação serial. O que mais será preciso para comunicar com o Arduino?


Edit: senso, querias dizer "que ferramentas usam para brincar com c#"? Googla por Visual C# Express edition. Download gratuito!
« Última modificação: 22 de Fevereiro de 2010, 21:42 por msr »

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Re: Comunicação Arduino C# (Library)
« Responder #4 em: 23 de Fevereiro de 2010, 00:33 »
Boas.

Muito bom... Tenho que ver se invento tempo para agarrar o C#!

Obrigado! :D  Se precisares de ajuda o C# é o meu "ganha pão" por isso se tiveres duvidas em que te possa ajudar avisa.

Parece giro, que ferramentas usam para brincar com c?
Visual c# (por causa da referencia ao .net)  ???

O IDE que utilizo é o Visual Studio 2008 (tenho acesso ao completo devido ao meu trabalho e univ) mas podes utilizar a versão gratuita (express como o msr disse), tambem ha ferramentas para linux mas na minha opinião não faz muito sentido...

Será que podias explicar um pouco melhor a utilidade desta biblioteca?
O Visual Studio já trás um componente SerialPort, com vários métodos, etc referentes a comunicação serial. O que mais será preciso para comunicar com o Arduino?


Edit: senso, querias dizer "que ferramentas usam para brincar com c#"? Googla por Visual C# Express edition. Download gratuito!

Claro que explico. Eu como digo no post utilizo o SerialPort mas ao ter uma biblioteca deste genero no construtor coloco logo as coisas necessarias para comunicar com a arduino, neste caso especifico DtrEnable = true que vim a perceber que era necessario para comunicar com a Arduino.

Desta forma tenho aqui um interface simples que poupa algumas linhas de codigo ao programa principal. Outra coisa é, isto ainda esta a ser desenvolvido, estou a planear em ter estruturas nesta classe para controlar servos, motores, sensores como se fosse uma api.

Dessa forma em vez de quando quiser fazer andar um servo na arduino apenas tenho de indicar o angulo e a biblioteca trata do envio e recepção de informação para saber se correu tudo bem. Do lado da arduino vou criar tambem uma biblioteca para falar com esta... esta ser feita para o projecto que ando a fazer. 

Mas isso ainda é work in progress e por isso digo para darem sugestões de coisas interessantes para adicionar a biblioteca.

Assim que tiver um pouco de tempo coloco aqui um exemplo concreto de como usar a "API".

Dronetech BlogThe Scientist and the Geek

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re: Comunicação Arduino C# (Library)
« Responder #5 em: 23 de Fevereiro de 2010, 01:50 »
Agora que percebi melhor, fiquei a gostar da ideia!
De certo modo é uma camada de abstração das comunicações serial certo? Torna-se assim mais explícito "o que se quer comunicar" com o Arduino.

Se ainda não conheceres, dá uma olhadela no FEZ da NXP, que usa o Visual Studio + C# como IDE "oficial" e pelo que vi eles fazem algo identico ao que pretendes fazer para o Arduino. http://ics.nxp.com/support/tools/fez/

Em relação ao pôr o DtrEnable a true, é curioso, pois nunca precisei de o fazer em comunicações com o Arduino. Em que situação é que chegaste a essa conclusão? Sempre defini apenas a "port" e "baudrate".

E já agora, se não for chato, podias-me explicar o que fazem estas linhas de código?
Código: [Seleccione]
DataReceivedArgs dr = new DataReceivedArgs();
dr.Message = sp.ReadLine();
onDataReceived.Invoke(sp, dr);


Obrigado pela explicação e força com isso ;)

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Re: Comunicação Arduino C# (Library)
« Responder #6 em: 23 de Fevereiro de 2010, 08:51 »
Agora que percebi melhor, fiquei a gostar da ideia!
De certo modo é uma camada de abstração das comunicações serial certo? Torna-se assim mais explícito "o que se quer comunicar" com o Arduino.

Se ainda não conheceres, dá uma olhadela no FEZ da NXP, que usa o Visual Studio + C# como IDE "oficial" e pelo que vi eles fazem algo identico ao que pretendes fazer para o Arduino. http://ics.nxp.com/support/tools/fez/

Em relação ao pôr o DtrEnable a true, é curioso, pois nunca precisei de o fazer em comunicações com o Arduino. Em que situação é que chegaste a essa conclusão? Sempre defini apenas a "port" e "baudrate".

E já agora, se não for chato, podias-me explicar o que fazem estas linhas de código?
Código: [Seleccione]
DataReceivedArgs dr = new DataReceivedArgs();
dr.Message = sp.ReadLine();
onDataReceived.Invoke(sp, dr);


Obrigado pela explicação e força com isso ;)

Exactamente, uma camada de abstração, faltava-me essa expressão. Assim que possa vou ver o FEZ.

O DTREnable ou "data terminal ready" é para melhorar o processo de handshaking na comunicação serie. Eu inicialmente tive problemas a ligar-me a arduino, enviava a comunicação e ela não retornava nada de volta, nem la chegava alias. Pesquisei por esse problema e descobri que em certas situações é necessario fazer enable ao dtr, experimentei e funciona perfeitamente. Pode ser problemas com o meu windows 7, mas mal não faz

Em relação ao codigo:

Código: [Seleccione]
DataReceivedArgs dr = new DataReceivedArgs();
dr.Message = sp.ReadLine();
onDataReceived.Invoke(sp, dr);

Visto que faço um delegate do evento do SerialPort (para poder receber um evento quando a arduino me envia algo) criei uma Classe de argumentos "mastigada" desta forma no evento de datareceived recebo logo a string de mensagem que a arduino me enviou. De futuro isto vai-me enviar dados especificos da arduino (posição do servo, echo do sensor, etc).
Dronetech BlogThe Scientist and the Geek

Offline msr

  • Mini Robot
  • *
  • Mensagens: 798
Re: Comunicação Arduino C# (Library)
« Responder #7 em: 23 de Fevereiro de 2010, 12:47 »
Agora que falaste em "handshaking", no codigo que envio para o Arduino depois de receber um caracter costumo fazer um delay de 5ms (+/-) precisamente para esperar que chegue lá outro caracter e assim poder analisar uma string. Fazer delays não é a melhor solução porque atrasa a comunicação, muito provavelmente tambem era o DtrEnable a true que me estava a faltar!

Obrigado uma vez mais pela explicação!

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Re: Comunicação Arduino C# (Library)
« Responder #8 em: 23 de Fevereiro de 2010, 16:16 »
Durante a tarde fui avançando um pouco mais com o projecto e já tenho aqui um novo diagrama.



Ja criei uma nova classe abstracta que vai ser um modelo para os componentes (sensores e servos de momento) com algumas propriedades. Desta forma vai ser mais facil de enviar comandos para os componentes e saber o estado deles de uma forma mais abstracta e controlada do lado do servidor.

Assim retira-se algumas linhas de codigo ao sketch na arduino, coisa que é sempre importante.

A ideia é a biblioteca que vai estar na arduino no setup enviar pela porta de serie tudo o que esta "ligado" diferenciado por tipo de objecto.

Vão dando sugestões de funções que são importantes de abstrair  e de componentes interessantes de definir.
Dronetech BlogThe Scientist and the Geek

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Comunicação Arduino C# (Library)
« Responder #9 em: 23 de Fevereiro de 2010, 16:46 »
Creio que estás a querer fazer com C# uma ideia semelhante à que tinha descrito aqui:

http://lusorobotica.com/index.php/topic,259.0.html

Dá uma vista de olhos e diz o que pensas pois pode ser que tenha ideias interessantes. C# tem muito mais potencial e poderíamos pensar em fundir as ideias. Creio que há aqui tanto potencial que a maioria dos mortais nem a consegue imaginar.

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Re: Comunicação Arduino C# (Library)
« Responder #10 em: 23 de Fevereiro de 2010, 17:36 »
Acabei de ler o post e acho a ideia bastante interessante. O problema do C# é mesmo o de ter de estar agarrado ao windows, logo a uma maquina com caracteristicas "pesadas" para um robot comum. Tanto é esse o caso que eu estava a pensar assim que acabasse a implementação destas classes em C# meter-me a passar isto para Java para poder ser mais portavel.

Portanto claro que podemos fundir ideias. A parte boa do UML é que se pode modelar sem estar dependente de uma linguagem, a implementação em java ou C# é simples basta "stick to the plan". 



Dronetech BlogThe Scientist and the Geek

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Comunicação Arduino C# (Library)
« Responder #11 em: 23 de Fevereiro de 2010, 18:19 »
Subscrevo todo o que disse excepto em relação ao C#.

C# compila para CLR e o Mono está cada vez mais veloz e cresce a passos largos para superar a .Net Framework. C# ainda permite migrar código para Micro .Net framework que foi agora libertada para opensource.

.Net ainda tem a vantagem de ter vários mecanismos novos de comunicação entre programas com Streams de alto nível que permitem portar fácilmente blocos de instruções entre aplicações sobre qualquer interface, desde na mesma máquina a máquinas remotas.

Continue a avançar com a modelação em C# que assim que tiver mais disponibilidade agarro-me ao projecto consigo. Podemos depois falar por MSN sobre o assunto para fazermos um mini brainstorming.