~~ 記錄自己點點滴滴的學習歷程 ~~





使用 C# 來操作 Arduino

C# 與 Arduino 相互溝通

上半部是 C# 程式,下半部 Arduino 程式
整個概念就是依靠 Serial Port 來溝通,讓電腦端可以控制 Arduino 的 LED 燈
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
namespace App1
{
public partial class Form1 : Form
{
private SerialPort serialPort1 = new SerialPort();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.BaudRate = 9600;
serialPort1.Parity = Parity.None;
serialPort1.DataBits = 8;
serialPort1.StopBits = StopBits.One;
btnDisconnect.Enabled = false;
btnLedOpen.Enabled = false;
btnLedClose.Enabled = false;
cbPortNumber.Items.AddRange(SerialPort.GetPortNames());
label1.Text = "PC狀態:尚未連線";
}
private void cbPortNumber_SelectedIndexChanged(object sender, EventArgs e)
{
serialPort1.PortName = cbPortNumber.Text;
}
private void btnConnect_Click(object sender, EventArgs e)
{
serialPort1.Open();
btnConnect.Enabled = false;
btnDisconnect.Enabled = true;
btnLedOpen.Enabled = true;
btnLedClose.Enabled = true;
label1.Text = "PC狀態:連線中";
}
private void btnDisconnect_Click(object sender, EventArgs e)
{
serialPort1.Write("0");
serialPort1.Close();
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
btnLedOpen.Enabled = false;
btnLedClose.Enabled = false;
label1.Text = "PC狀態:斷線中";
label2.Text = "Arduino回傳:";
}
private void btnLedOpen_Click(object sender, EventArgs e)
{
serialPort1.Write("1");
btnLedClose.Enabled = true;
btnLedOpen.Enabled = false;
label1.Text = "送出指令:LED ON";
label2.Text = "Arduino回傳:" + serialPort1.ReadLine();
}
private void btnLedClose_Click(object sender, EventArgs e)
{
serialPort1.Write("0");
btnLedOpen.Enabled = true;
btnLedClose.Enabled = false;
label1.Text = "送出指令:LED OFF";
label2.Text = "Arduino回傳:" + serialPort1.ReadLine();
}
}
}
view raw pc.cs hosted with ❤ by GitHub
void setup() {
Serial.begin(9600); // 開啟 Serial port, 通訊速率為 9600 bps
// 初始化 LED 接腳
pinMode(13, OUTPUT);
}
void loop() {
// 檢查是否有資料可供讀取
if (Serial.available() > 0) {
// 讀取進來的 byte
char inByte = Serial.read();
// 根據收到的字元決定要打開或關掉 LED
switch (inByte) {
case '0':
digitalWrite(13, LOW);
delay(1);
Serial.println("LED OFF");
break;
case '1':
digitalWrite(13, HIGH);
delay(1);
Serial.println("LED ON");
break;
default:
// 關掉所有的 LED
digitalWrite(13, LOW);
}
}
}
view raw uno.ino hosted with ❤ by GitHub

留言

這個網誌中的熱門文章

Python:用 PyAutoGUI 來操控滑鼠及鍵盤

Arduino:SG90伺服馬達實作

MOD 接分享器:IPTV設定 (使用 Asus RT-AC51U)