Communication VB.net avec CARTE ARDUINO

Signaler
-
 chrifialaoui -
Bonjour

j'ai un projet consiste une communication entre arduino et VB.net
la carte arduino connecté à plusieurs bouton poussoir, quand je clique sur l'un des BP l'arduino envoie une chaine de caractére vers l'interface VB.net
coté VB.net (il teste l'orsqu'il recoit la chaine de caractére il va déclencher un compteur)
donc comment programmer coté arduino et coté vb

9 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Salut

"envoie une chaine de caractére vers l'interface VB.net"
Quelle est le type de connexion avec ton module arduino ? une liaison série ou une connexion IP ?

On n'a aucune idée de ce que tu as déjà testé et du code actuel.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)

Merci
la communication entre arduino et VB (Série RS232)
coté arduino (J'ai 5 bouton poussoir ), quand je clique sur une Bp une chaine de caractére va étre envoyé vers VB.net aprés va déclencher un compteur et quand je vais cliquer sur le Bp d'arret le compteur s'arrete et va enregister le temp s'écoule
coté arduino

void setup() {
Serial.begin(9600); // initialise la communication série
// vérifier que le débit utiliser est le même dans le Terminal Série

pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);

j'ai déclarer les entrées mais j'arrive plus a faire le test (if else)
je vais faire un teste si BP=1 envoie la chaine X(par exemple) sinn

cotés VB
j'arrive pas a le programme
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Le langage utilisé par Arduino n'est pas du VB.
Difficile donc de te répondre ici.
Par contre, il existe des tas de tutos sur les pages dédiées à cette platine, et tu pourras y apprendre comment lire l'état d'un BP d'un manière sécurisée et gérer des tempos ...
Messages postés
14672
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 juin 2020
143
Bonjour,

Si tu cherches comment communiquer en RS232 avec VB.NET, regardes la classe System.IO.Ports.SerialPort

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---

Bonjour Nhenri,
mais déjà il nous met du code en C
Ça commence mal...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique

Bonjour,
Alors j'ai eu un signe de vie de chrifialaoui, qui a opté finalement pour le VB.Net
chrifialaoui: tes questions et tes codes tu les postes ici, pour que tout le monde puisse suivre.

Son message:
Bonjour,
je vais communiquer le VB avec arduino,coté VB (quand je recoie une chaine ex(12)je déclenche un compteur ) voici le programme que j'ai fait s'il veut vous pouvez m'aider


Son code:
Private Sub Form8_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

        duration = New System.TimeSpan(0, 0, 0, 1) 
        answer = New System.TimeSpan(0, 0, 0, 0) 
        s.PortName = "COM1" 
        s.BaudRate = 9600 
        s.DataBits = 8 
        s.Parity = Parity.None 
        s.StopBits = StopBits.One 
        s.Handshake = Handshake.None 
        s.Encoding = System.Text.Encoding.Default 
        Timer1.Start() 



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

        s.Close() 
        Try 
            s.Open() 
            value = s.ReadLine() 
            If value = 12 Then      ' start 
                etat = 1 
            ElseIf value = 13 Then  ' pause 
                etat = 0 
            ElseIf value = 14 Then  ' reset 
                etat = 2 
            End If 
            s.Close() 
        Catch ex As Exception 
            Timer1.Stop() 
            MsgBox("Erreur!..." & Chr(13) & ex.Message, 48, "Erreur") 
            s.Close() 
        End Try 


        If etat = 1 Then 
            answer = answer.Add(duration) 
        ElseIf etat = 2 Then 
            answer = New System.TimeSpan(0, 0, 0, 0) 
        End If 
        TextBox1.Text = answer.ToString + " S" 


Et moi j'ai (a peu-près) rectifié ton code:
Option Explicit On
Option Strict On
Imports System.IO.Ports

Public Class Form1
    Dim duration As TimeSpan
    Dim answer As TimeSpan
    Dim value As Integer
    Dim etat As Integer

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        S.Close()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        duration = New System.TimeSpan(0, 0, 0, 1)
        answer = New System.TimeSpan(0, 0, 0, 0)
        S.PortName = "COM1"
        S.BaudRate = 9600
        S.DataBits = 8
        S.Parity = Parity.None
        S.StopBits = StopBits.One
        S.Handshake = Handshake.None
        S.Encoding = System.Text.Encoding.Default
        S.Open()
        Timer1.Interval = 1000
        Timer1.Enabled = False
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Enabled = False
        Try
            value = CInt(S.ReadExisting)
            If value = 12 Then      ' start 
                etat = 1
            ElseIf value = 13 Then  ' pause 
                etat = 0
            ElseIf value = 14 Then  ' reset 
                etat = 2
            End If
            S.Close()
        Catch ex As Exception
            Timer1.Stop()
            MsgBox("Erreur!..." & Chr(13) & ex.Message, CType(48, MsgBoxStyle), "Erreur")
            S.Close()
        End Try

        If etat = 1 Then
            answer = answer.Add(duration)
        ElseIf etat = 2 Then
            answer = New System.TimeSpan(0, 0, 0, 0)
        End If
        TextBox1.Text = answer.ToString + " S"
    End Sub

    Private Sub S_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles S.DataReceived
        Timer1.Enabled = True
    End Sub
End Class



Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
67
Le début de code montré plus haut est le langage utilisé par l'interface de programmation Arduino et, notamment, l'affectation des entrées/sorties de la carte.
Un peu court comme début.

Quant au codeVB.Net :
- Gérer la lecture d'un port COM avec un Timer : risque d'erreur
Mieux vaudrait utiliser les évènements gérés par l'objet
- "ReadExisting" ne va t-il lire qu'un mot (Integer) ?
Bizarre.

moi je vais envoyer des chiffre(12,13.....) EST CE QUE CA VA MARCHER

Voici le code arduino




//// déclaration de 5 boutons poussoirs
const int APPUI=LOW; // constante pour tester état BP
const int BP1=2;
const int BP2=3;
const int BP3=4;
const int BP4=5;
const int BP5=6;
const int BP6=7;
const int BP7=8;
const int BP8=9;
const int BP9=10;

void setup() {
Serial.begin(9600); // initialise la communication série
// vérifier que le débit utiliser est le même dans le Terminal Série

pinMode(BP1, INPUT); // déclaration dee BP1 comme entrée
pinMode(BP2, INPUT); //déclaration de BP2 comme entée
pinMode(BP3,INPUT); //déclaration de BP3 comme entrée
pinMode(BP4, INPUT);
pinMode(BP5, INPUT);
pinMode(BP6, INPUT);
pinMode(BP7, INPUT);
pinMode(BP8, INPUT);
pinMode(BP9, INPUT);

digitalWrite (BP1,HIGH);
digitalWrite (BP2,HIGH);
digitalWrite (BP3,HIGH);
digitalWrite (BP4,HIGH);
digitalWrite (BP5,HIGH);
digitalWrite (BP6,HIGH);
digitalWrite (BP7,HIGH);
digitalWrite (BP8,HIGH);
digitalWrite (BP9,HIGH);
}

void loop() {
if (digitalRead(BP1)==APPUI) { // si appui sur le BP_____marche
Serial.println(12); // envoie la valeur 12 à vers Processing
}

else if (digitalRead(BP5)==APPUI) { // si appui sur le BP______arret
Serial.println(13);
}

else if (digitalRead(BP2)==APPUI) { // si appui sur le BP_____marche
Serial.println(14);
}
else if (digitalRead(BP6)==APPUI) { // si appui sur le BP______arret
Serial.println(15);
}
else if (digitalRead(BP3)==APPUI) { // si appui sur le BP_______marche
Serial.println(16);
}
else if (digitalRead(BP4)==APPUI) { // si appui sur le BP__________arret
Serial.println(17);
}
else if (digitalRead(BP7)==APPUI) { // si appui sur le BP_________marche LAD
Serial.println(18);
}

else if (digitalRead(BP8)==APPUI) { // si appui sur le BP___________arret LAD
Serial.println(19);
}
else (digitalRead(BP9)==APPUI); { // si appui sur le BP______________nombre de faisceau
Serial.println(20);
}
}