C# SERIAL COMMUNICATION WITH ARDUINO
If you have problems on Serial communication with Arduino in C#, this post is perfect for you!!!
These days, I'm learning serial port communication and want to write a simple demo on my LattePanda. LattePanda is a Win10 single board computer, it integrated Arduino Compatible Processor, so I can run this demo just on one LattePanda board! This post is mainly about serial communication from the Arduino to the PC and communicate from PC to Arduino in C#.
If you don't have a LattePanda, you can connect the Arduino to your PC instead! Hope this tutorial useful for you.
Feel free to ask me if you have any problems while running this demo!
What you need:
Arduino IDE
Visual Studio 2017
1.Communicate from the Arduino to the LattePanda CPU
I found an easiest way to do this.
Arduino sketch:
Code: Select all
void setup() { Serial.begin(9600); } void loop() { Serial.print('1'); delay(200); } C# Code
Code: Select all
using System; using System.IO.Ports; using System.Threading; namespace ConsoleApp1 { class Program { static SerialPort _serialPort; public static void Main() { _serialPort = new SerialPort(); _serialPort.PortName = "COM4";//Set your board COM _serialPort.BaudRate = 9600; _serialPort.DtrEnable = true; // <<< For Leonardo _serialPort.RtsEnable = true; // <<< For Leonardo _serialPort.Open(); while (true) { string a = _serialPort.ReadExisting(); Console.WriteLine(a); Thread.Sleep(200); } } } } Press Start, and you will see the result like this:
We received the data from Arduino successfully.
2. Communicate from the LattePanda CPU to the Arduino
C# Code:
Code: Select all
using System; using System.Windows.Forms; using System.IO.Ports; namespace 控制灯 { 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); } } } And here's the surface:
Arduino sketch:
Code: Select all
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); } If you click the button 'ON', you will see the light(pin13) turns on.
So far so good?
These are the simplest way to communicate between arduino and your PC.
Most of the projects need Arduino to send data to computer and use computer to analize data or do other thing. So communicate is necessary and very important. Hope it's helpful for you. If you have any questions please let me know.