par lereparateurdepc Lun 21 Avr 2014 - 7:00
re,
C'est tout con, utilise l'action port série de SZ
!!!!!
Le code proposé sur le site fonctionne super bien mais à une condition de n'envoyer d'un caractère !!!
Etape 1, il faut configurer la com .... Si tu peut envoyer des données, touche à rien, c'est bon
sinon : (MyPort est le port série comme SerialPort1)
- Code:
MyPort.BaudRate = 9600
MyPort.DataBits = 8
MyPort.Parity = Parity.None
MyPort.StopBits = StopBits.None
MyPort.Handshake = Handshake.None
MyPort.Encoding = Encoding.ASCII
Pour lire une donnée sous SZ qui se trouve sur le port série, utilise l'évènement DataReceived de celui-ci.
Pour mon programme Arduino_LED ça donne ( code de la partie lecture et traitement):
- Code:
#Region "Traitement data lu"
Private Sub MyPort_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles MyPort.DataReceived
Try
ReadVal = MyPort.ReadExisting.Trim
Me.Invoke(New ProgressRefresh(AddressOf ReadData))
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Private Delegate Sub ProgressRefresh()
Sub ReadData()
Try
Application.DoEvents()
VerifData(ValDir.Read)
If ReadVal.Trim <> "" Then
If ReadVal <> "9999" Then
If InfoBut = 1 Then
If ReadVal.EndsWith("0") = True Then
ButL1.Text = "Led1 ON"
InfoLed1.Text = "Info : OK LED1 OFF"
ElseIf ReadVal.EndsWith("1") = True Then
ButL1.Text = "Led1 OFF"
InfoLed1.Text = "Info : OK LED1 ON"
Else
ButL1.Text = "Led1 ??"
InfoLed1.Text = "Info : ERR : " & ReadVal
End If
ElseIf InfoBut = 2 Then
If ReadVal.EndsWith("0") = True Then
ButL2.Text = "Led2 ON"
InfoLed2.Text = "Info : OK LED2 OFF"
ElseIf ReadVal.EndsWith("1") = True Then
ButL2.Text = "Led2 OFF"
InfoLed2.Text = "Info : OK LED2 ON"
Else
ButL2.Text = "Led2 ??"
InfoLed2.Text = "Info : ERR : " & ReadVal
End If
ElseIf InfoBut = 3 Then
If ReadVal.EndsWith("0") = True Then
ButL3.Text = "Led3 ON"
InfoLed3.Text = "Info : OK LED3 OFF"
ElseIf ReadVal.EndsWith("1") = True Then
ButL3.Text = "Led3 OFF"
InfoLed3.Text = "Info : OK LED3 ON"
Else
ButL3.Text = "Led3 ??"
InfoLed3.Text = "Info : ERR : " & ReadVal
End If
ElseIf InfoBut = 4 Then
If ReadVal.EndsWith("0") = True Then
ButL4.Text = "Led4 ON"
InfoLed4.Text = "Info : OK LED4 OFF"
ElseIf ReadVal.EndsWith("1") = True Then
ButL4.Text = "Led4 OFF"
InfoLed4.Text = "Info : OK LED4 ON"
Else
ButL4.Text = "Led4 ??"
InfoLed4.Text = "Info : ERR : " & ReadVal
End If
ElseIf InfoBut = 5 Then
If ReadVal = NUDBL5Val.Value.ToString Then
DefIncrem = 0
InfoLed5.Text = "Info : OK LED5 : " & ReadVal & " soit : " & System.Math.Truncate((ReadVal * 100) / 255) & "%"
Else
DefIncrem += 1
If DefIncrem < 3 Then
But5_Click(Nothing, Nothing)
Else
DefIncrem = 0
InfoLed5.Text = "Info : ERR : " & ReadVal
End If
End If
ElseIf InfoBut = 6 Then
If ReadVal.EndsWith("0") = True Then
ButChen.Text = "Chenillard ON"
InfoChen.Text = "Info : OK chenillard OFF"
ButChen.Enabled = True
Panel1.Enabled = True
ElseIf ReadVal.EndsWith("1") = True Then
ButChen.Text = "Chenillard OFF"
InfoChen.Text = "Info : OK chenillard ON"
Panel1.Enabled = False
ButL1.Text = "Led1 ON"
InfoLed1.Text = "Info : OK LED1 OFF"
ButL2.Text = "Led2 ON"
InfoLed2.Text = "Info : OK LED2 OFF"
ButL3.Text = "Led3 ON"
InfoLed3.Text = "Info : OK LED3 OFF"
ButL4.Text = "Led4 ON"
InfoLed4.Text = "Info : OK LED4 OFF"
InfoLed5.Text = "Info : OK LED5 : " & 0
NUDBL5Val.Value = 0
ElseIf ReadVal.EndsWith("2") = True Then
ButChen.Enabled = False
ButChen.Text = "Chenillard OFF"
InfoChen.Text = "Info : OK attente fin chenillard"
Panel1.Enabled = False
Else
ButChen.Text = "Chenillard ??"
InfoChen.Text = "Info : ERR : " & ReadVal
End If
Else
MessageBox.Show("Impossible de dissocier le type de LED.", "Erreur de type", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End If
Else
MessageBox.Show("Le client signale une erreur de donnée." & Environment.NewLine & "Le code d'erreur est : " & ReadVal, "Erreur de donnée", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub VerifData(ByVal Dir1 As ValDir)
Dir = Dir1
If Dir1 = ValDir.Write Then
If BW1.IsBusy = True Then
BW1.CancelAsync()
BW1.RunWorkerAsync()
Else
BW1.RunWorkerAsync()
End If
End If
End Sub
Private Sub BW1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BW1.DoWork
Dim err As Boolean = False
Dim j As Integer = 0
While Dir <> ValDir.Read
Application.DoEvents()
j += 1
If j >= 10000 Then
MessageBox.Show("Le client n'a pas répondu." & Environment.NewLine & "Vérifiez la COM !", "Erreur de COM", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit While
End If
End While
If err = True Then
End If
End Sub
#End Region
En fait, dès que je clique sur un bouton, j'envoi une trame à la carte Arduino.
Elle lis et "décode" la trame et répond puis ensuite pilote les LED.
http://lereparateurdepc.olympe.in/ImgBox/Arduino/ArduinoLedSerialControl/Il y a des choses que tu ne pourra pas faire sous SZ comme ça mais c'est faisable
Cordialement,
Le réparateur de PC