Ответ 1
Я уверен, вы знаете, что у Arduino есть несколько образцов, которые вы можете использовать с С#
Здравствуйте, я новичок в управлении оборудованием с помощью USB-соединения. У меня есть микроконтроллер Arduino UNO и я искал ресурсы, чтобы начать меня. Я программирую на С# (Visual Studio 2010) и задавался вопросом, были ли некоторые основы, которые я мог бы использовать для настройки/тестирования моего соединения. Я ищу что-то такое же простое, как флажок в моем WinForm, который переключает вывод цифрового ввода-вывода на Arduino между высоким и низким. Не удалось найти много для начала.
Спасибо заранее.
Я уверен, вы знаете, что у Arduino есть несколько образцов, которые вы можете использовать с С#
Существует множество способов отправить команду с компьютера на arduino. Sandeep Bansil является хорошим примером подключения и чтения последовательного порта.
Ниже приведен рабочий пример того, как писать последовательный порт на основе состояния флажка в форме окна amd, как обрабатывать запрос с компьютера на arduino.
Это подробный пример, есть более чистые решения, но это яснее.
В этом примере ардуино ждет либо "a", либо "b" из pc. ПК отправляет "a", когда флажок установлен и отправляет "b", когда флажок снят. Пример предполагает цифровой вывод 4 на ардуине.
Код 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 С#
Этот код будет находиться в вашей форме .cs файла. В этом примере предполагается, что вы добавили события формы для OnOpenForm, OnCloseForm и события OnClick в этот флажок. Из каждого из событий вы можете вызвать соответствующие методы ниже....
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");
}
}
}
Совет:
Если вы хотите прочитать сообщение от arduino, добавьте таймер в свою форму с интервалом 50
или 100
миллисекунды.
В событии OnTick
таймера вы должны проверить данные, используя следующий код:
//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();
Результатом readLine()
будет то, что myVar
содержит Hello World
.
Поскольку вы используете Visual Studio, вам может быть интересен этот классный плагин Visual Studio для разработки Arduino. http://www.visualmicro.com
Я работал над библиотекой С#, чтобы взаимодействовать с Arduinos, там есть много хороших примеров кода, и там должно быть достаточно хорошо прокомментировано, чтобы помочь чему-то понять, надеюсь, что это поможет!
github repo: https://github.com/qwertykeith/ArduinoLibrary
Основной способ связи между ПК и Arduino - создать 2 кнопки на ПК и включить/выключить свет на Arduino. Используйте portwrite();
Вот простейшая демонстрация: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ Это абсолютно то, что вы хотите!
Код С#:
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);
}
}
}
Эскиз 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);
}