[Prog-Dispo] Eteindre un PC sous Windows avec L'arduino et VStudio

edit: Programme au 2éme message=>

Bonjour tous le monde :slight_smile:

Je continue dans l'amélioration de mon "Projet TCM" et je souhaite maintenant trouver une solution pour éteindre windows par l'arduino avec ou sans logiciel.

J'ai effectué un programme pour le faire démarrer avec un relais, jusque là tous va bien.

Mais j'ai essayé de créer un programme VS studio avec une connexion automatique comme expliqué ICI sans succès :frowning:
Le Programme:

Imports System.IO.Ports


Public Class Form1

    Dim ArduinoConnected As Boolean


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TimerConnect.Enabled = False
        ArduinoConnected = False
        Autoconnect()
    End Sub

    Private Sub BtnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
        If ArduinoConnected Then
            SerialPort1.Close()
            btnConnect.Text = "Connect"
        Else
            Autoconnect()
        End If
    End Sub

    Private Sub Autoconnect()
        For Each sp As String In My.Computer.Ports.SerialPortNames
            Try
                SerialPort1.PortName = sp
                SerialPort1.BaudRate = 9600
                SerialPort1.DataBits = 8
                SerialPort1.Parity = Parity.None
                SerialPort1.StopBits = StopBits.One
                SerialPort1.Handshake = Handshake.None
                SerialPort1.Encoding = System.Text.Encoding.Default
                SerialPort1.Open()
                SerialPort1.Write("3/")
                TimerConnect.Interval = 500
                TimerConnect.Start()
                While TimerConnect.Enabled And ArduinoConnected = False
                    Application.DoEvents()
                End While
                If ArduinoConnected Then
                    btnConnect.Text = "Disconnect"
                    Exit For
                End If
                SerialPort1.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        Next
        If ArduinoConnected = False Then
            MsgBox("Arduino failed to connect. Please check that it is plugged in.")
        End If
    End Sub


    Public Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs)
        Dim str As String = SerialPort1.ReadExisting()
        If str.Contains("Arduino") Then
            ArduinoConnected = True
            RichTextBox1.Text = ("Arduino Connected")

        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Shell("shutdown -s -t 100")

    End Sub

End Class

Le "Shell("shutdown -s -t 100")" pour le test avec un buton (fonctionnel).

Par contre le programme me mets COM3 accès refusé ou n'existe pas.

Merci d'avance pour vos aides :slight_smile:

J'ai donc trouvé une solution pour éteindre le Windows avec l'arduino, je post les programme si ça peut intéressé du monde :wink:

Programme Arduino:

boolean conect = false;

void setup()
{
  Serial.begin(9600);
}

void loop() {
  if (conect == false) {
    while (Serial.available() > 0) {
      int inByte = Serial.read(); // lire un premier caractère

      // filtrer : il doit etre une lettre majuscule
      if (inByte >= 'A') {
        int valeur = Serial.parseInt();
        Serial.read();

        // traitement
        switch (inByte) {
          case 'C'://Données commencant par "R" = RPM
            if (valeur == 1) {
              Serial.print("C1");
              conect = true;
            }
            break;
        }
      }
    }
  }
  if (conect == true) {
    Serial.print("turnoff");
  }
}// End Loop

Ainsi que le Programme VStudio:

Imports System.IO.Ports


Public Class Form1

    Dim ArduinoConnected As Boolean
    Delegate Sub SetTextCallback(ByVal [text] As String) 'Added to prevent threading errors during receiveing of data'

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        TimerConnect.Enabled = False
        ArduinoConnected = False
        Autoconnect()
    End Sub

    Private Sub Autoconnect()
        For Each sp As String In My.Computer.Ports.SerialPortNames
            Try
                SerialPort1 = New SerialPort(sp, 9600, Parity.None, 8, StopBits.One)
                SerialPort1.ReadTimeout = 700
                SerialPort1.WriteTimeout = 700
                SerialPort1.Open()
                SerialPort1.Write("C1")
                ArduinoConnected = True
                btnConnect.Text = "Disconnect"
            Catch ex As TimeoutException
            End Try
        Next

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Shell("shutdown -s -t 100")

    End Sub

    Private Sub SerialPort1_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        ReceivedText(SerialPort1.ReadExisting())
    End Sub

    Private Sub ReceivedText(ByVal [text] As String) 'input from ReadExisting'
        If Me.RichTextBox2.InvokeRequired Then
            Dim x As New SetTextCallback(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})
            If (text) = "turnoff" Then
                Shell("shutdown -s -t 100")
            End If
        Else
            Me.RichTextBox2.Text &= [text] 'append text'
        End If
    End Sub

    Private Sub btnConnect_Click(sender As Object, e As EventArgs) Handles btnConnect.Click
        If btnConnect.Text = "Disconnect" Then
            SerialPort1.Close()
            ArduinoConnected = False
            btnConnect.Text = "Connect"
        End If

    End Sub
End Class