Bonjour, je suis nouveau dans le contrôle de matériel avec une connexion USB. J'ai un microcontrôleur Arduino UNO et je cherchais des ressources pour me lancer. Je programme en C # (Visual Studio 2010) et je me demandais s'il y avait des bases que je pourrais utiliser pour configurer/tester ma connexion. Je cherche quelque chose d'aussi simple qu'une case à cocher dans mon WinForm en basculant la broche d'E/S numérique sur l'Arduino entre haut et bas. Je n'ai pas pu trouver grand chose pour commencer.
Merci d'avance.
Je suis sûr que vous savez qu'Arduino a quelques exemples que vous pouvez utiliser avec C #
Il existe de nombreuses façons d’envoyer une commande du PC à un arduino. Sandeep Bansil fournit un bon exemple de connexion et de lecture d'un port série.
Vous trouverez ci-dessous un exemple concret d’écriture sur un port série en fonction de l’état d’une case à cocher sur un formulaire Windows de AMD et sur le traitement de la demande émanant du PC de l’arduino.
Ceci est un exemple détaillé, il existe des solutions plus propres, mais cela est plus clair.
Dans l'exemple, l'arduino attend un "a" ou un "b" du pc. le pc envoie un "a" quand une case à cocher est cochée et envoie un "b" quand une case à cocher est décochée. L'exemple suppose la broche numérique 4 sur l'arduino.
Code Arduino
#define DIGI_PIN_SOMETHING 4
unit8_t commandIn;
void setup()
{
//create a serial connection at 57500 baud
Serial.begin(57600);
}
void loop()
{
//if we have some incomming serial data then..
if (Serial.available() > 0)
{
//read 1 byte from the data sent by the pc
commandIn = serial.read();
//test if the pc sent an 'a' or 'b'
switch (commandIn)
{
case 'a':
{
//we got an 'a' from the pc so turn on the digital pin
digitalWrite(DIGI_PIN_SOMETHING,HIGH);
break;
}
case 'b':
{
//we got an 'b' from the pc so turn off the digital pin
digitalWrite(DIGI_PIN_SOMETHING,LOW);
break;
}
}
}
}
Windows C #
Ce code réside dans votre fichier .cs de formulaire. L'exemple suppose que vous avez associé des événements de formulaire pour OnOpenForm, OnCloseForm et l'événement OnClick à la case à cocher. De chacun des événements, vous pouvez appeler les méthodes respectives ci-dessous ....
using System;
using System.IO.Ports;
class fooForm and normal stuff
{
SerialPort port;
private myFormClose()
{
if (port != null)
port.close();
}
private myFormOpen()
{
port = new SerialPort("COM4", 57600);
try
{
//un-comment this line to cause the arduino to re-boot when the serial connects
//port.DtrEnabled = true;
port.Open();
}
catch (Exception ex)
{
//alert the user that we could not connect to the serial port
}
}
private void myCheckboxClicked()
{
if (myCheckbox.checked)
{
port.Write("a");
}
else
{
port.Write("b");
}
}
}
Pointe:
Si vous souhaitez lire un message de l'arduino, ajoutez à votre formulaire un temporisateur avec un intervalle de 50
ou 100
millisecondes.
Dans l'événement OnTick
du minuteur, vous devez vérifier les données à l'aide du code suivant:
//this test is used to see if the arduino has sent any data
if ( port.BytesToRead > 0 )
//On the arduino you can send data like this
Serial.println("Hellow World")
//Then in C# you can use
String myVar = port.ReadLine();
Le résultat de readLine()
sera que myVar
contient Hello World
.
Puisque vous utilisez Visual Studio, vous pouvez être intéressé par ce plugin Visual Studio pour le développement Arduino. http://www.visualmicro.com
je travaille sur une bibliothèque c # pour me connecter à Arduinos. Il y a beaucoup de bons exemples de code et il devrait être commenté suffisamment pour que les choses aient un sens, espérons que cela aide!
github repo: https://github.com/qwertykeith/ArduinoLibrary
Le moyen de base pour la communication entre PC et Arduino est de créer 2 boutons sur PC et d’allumer/éteindre la lumière sur Arduino. Utilisez portwrite();
Voici la démo la plus simple: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ C'est absolument ce que vous voulez!
Code C #:
using System;
using System.Windows.Forms;
using System.IO.Ports;
namespace ledcontrol
{
public partial class Form1 : Form
{
SerialPort port;
public Form1()
{
InitializeComponent();
this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
if (port==null)
{
port = new SerialPort("COM7", 9600);//Set your board COM
port.Open();
}
}
void Form1_FormClosed(object sender,FormClosedEventArgs e)
{
if(port !=null &&port.IsOpen)
{
port.Close();
}
}
private void button1_Click(object sender, EventArgs e)
{
PortWrite("1");
}
private void button2_Click(object sender, EventArgs e)
{
PortWrite("0");
}
private void PortWrite(string message)
{
port.Write(message);
}
}
}
Croquis Arduino:
const int LedPin = 13;
int ledState = 0;
void setup()
{
pinMode(LedPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
char receiveVal;
if(Serial.available() > 0)
{
receiveVal = Serial.read();
if(receiveVal == '1')
ledState = 1;
else
ledState = 0;
}
digitalWrite(LedPin, ledState);
delay(50);
}