C# ile Arduino Seri Port Haberleşmesi
Merhaba arkadaşlar bugün sizlere C# ile serial haberleşmenin nasıl olacağını ve küçük bir arduino haberleşme programını paylaşacağım. Kullandığım sensör DHT22, yazdığım arduino programında seri porttan temp değeri gelirse sıcaklığı, hum değeri gelirse nem değerini bize seri porttan gönderecek ve bizde C# ile bu değeri yakalayıp label’a yazacağız…
Sensör bağlantısı;
Arduino kodumuz;
#include <dht.h> dht DHT; #define DHT22_PIN 2 String inputString = ""; // a string to hold incoming data boolean stringComplete = false; void setup() { Serial.begin(9600); inputString.reserve(200); delay(5); } void loop() { if (stringComplete) { //Serial.print(inputString); triggertmp(); inputString = ""; stringComplete = false; } } void serialEvent() { while (Serial.available()) { char inChar = (char)Serial.read(); inputString += inChar; if (inChar == '\n') { stringComplete = true; } } } void triggertmp() { if(inputString=="temp\n"){ int chk = DHT.read22(DHT22_PIN); Serial.print(DHT.temperature, 1); Serial.print("\n"); } if(inputString=="hum\n"){ int chk = DHT.read22(DHT22_PIN); Serial.print(DHT.humidity, 1); Serial.print("\n"); } }
Arduino koduna bakacak olursak benim eklediğim triggertmp fonksiyonu ile seriporttan gelen değer temp ise sıcaklık bilgisini hum ise nem bilgisini arduino tarafından yolluyoruz. Zaten programın diğer kısımları hali hazırda arduino idesinde bulunuyor.(Serialevent)
C# kodumuz;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO.Ports; using System.Linq; using System.Text; using System.Windows.Forms; namespace www.emrebektas.com_2 { public partial class Form1 : Form { SerialPort serial = new SerialPort("COM13"); String arduinovalue = ""; public Form1() { InitializeComponent(); serial.Open(); } private void Form1_Load(object sender, EventArgs e) { } private void buttonSend_Click(object sender, EventArgs e) { String emre = null; emre = textBox1.Text; serial.WriteLine(emre); if (serial.BytesToRead > 0) { arduinovalue = serial.ReadLine(); label3.Text = arduinovalue; } } } }
C# tarafında
SerialPort serial = new SerialPort(“COM13”);
bu satırda com13 portuna ait bir serialport objesi oluşturuyoruz ismide serial.
serial.Open(); ile seri portumuzu açıyoruz.
Serial.WriteLine(“”); ise seri porta bilgi gönderiyoruz.
serial.BytesToRead ile seri porttan değer gelip gelmediğini kontrol ediyoruz. serial.BytesToRead > 0 ile eğer seri porttan değer geldiyse bu if döngüsü çalışacaktır. Aşağıdaki resime bakacak olursak arduino tarafına temp göndermişiz ve arduino bize 22.5 değerini göndermiş ve bir değer gönderdiği içinde if döngüsü çalıştı gelen değer label’a yazıldı.
C# programımızdan görüntüler;