Seri Port ile İletişim
Seri Port ile İletişim Portu Açmak için: if (SeriPortum.IsOpen == false) { SeriPortum.Open(); } Portu Kapamak için: SeriPortum.Close(); string veri = SeriPortum.ReadLine(); //Seri porttan veri okur. SeriPortum.WriteLine(veri); //Seri porta veri yazar.
Seri Port Kontrol Özellikleri serialPort.BaudRate: SerialPort sınıfının BaudRate isimli özelliği bilgisayardan kontrol edeceğiniz sistem ile haberleşme esnasında ki veri iletişimi hızı. Bu özellik sistemden sisteme değişiklik göstermektedir. BaudRate için şunu söyleyebiliriz saniye gönderilen bit sayısı, eğer sisteminizle iletişim hızınız 9600 ise bilgisayarın seri portundan saniyede 9600 bit veri gönderip alabilirsiniz demektir. Bu yüzden eğer sisteminiz 19200 ise ve siz bilgisayar programından bu özelliği set etmez iseniz verileri sağlıklı bir şekilde gönderip alamayacaksınız çünkü bu özelliğin default değeri 9600.
serialPort.IsOpen: SerialPort sınıfının IsOpen isimli özelliği seri portun açık olup olmadığını bool türünden söyleyen bir özellik. Portu kullanmadan önce mutlaka açık olup olmadığını kontrol etmenizde fayda var eğer portu kullandıktan sonra kapatmadan tekrar açmaya çalışırsanız programınız hata verecektir.
serialPort.PortName: SerialPort sınıfının PortName isimli özelliği seri portunuzun ismini isteyecektir. Eğer bir çevirici kullanmadan direk seri porta bağladıysanız ‘COM1’, bir çevirici aracılığıyla ismini değişti ise ‘COM5’, ‘COM6’ vb. string türünden port isminizi girebilirsiniz.
serialPort.ReadTimeout: SerialPort sınıfının ReadTimeout isimli özelliği seri portun cihazdan kaç saniye boyunca cevap beklemesini istiyorsanız onu int türünden mili saniye cinsinden girmeniz gerekiyor. Eğer istediğiniz cihazdan 3 saniye boyunca cevap gelmez ise hata vermesi ise buraya serialPort.ReadTimeout = 3000 demeniz gerekiyor.
serialPort.WriteTimeout: SerialPort sınıfının WriteTimeout isimli özelliği ise seri portunuzun yazma işlemini kaç saniye boyunca sürdürmesini istiyorsanız yine int türünden mili saniye cinsinden bu özelliği set etmeniz gerekmektedir.
ComboBox’ın içini Port isimleri ile Doldurmak for (int i = 0; i < 30; i++) { serialport.PortName = "COM" + i.ToString(); serialport.Open(); comNo_cb.Items.Add(serialport.PortName); serialport.Close(); } Veya comNo_cb.Items.Add(SerialPort.GetPortNames());
Seri Port Fonksiyonları serialPort.Open(): SerialPort sınıfının Open isimli fonksiyonu seri portunuzu açmanıza yarar. Hemen şunu söylemekte fayda var bu işlemi yapmadan önce bir hata almak istemiyorsanız port adını, baudRate’inizi belirtmeyi unutmayın. Eğer port adını belirtmez iseniz veya yanlış yazarsanız hata alacaksınız.
serialPort.Read(byte[] buffer, int offset, int count): SerialPort sınıfının Read isimli fonksiyonu seri portunuzdan veri okumanızı sağlayan bir fonksiyondur. İlk parametresi byte türünden bir dizi, ikinci parametre dizinin kaçıncı indisinden itibaren veri yerleştireceğini, son parametresine ise kaç byte veri okuyacağınızı söylemeniz gerekiyor. İlk parametre char türünden bir dizide olabilir. Fonksiyonun geri dönüş değeri ise kaç byte okunduysa onu size int türünden söyler.
serialPort.ReadByte(): SerialPort sınıfının ReadByte isimli fonksiyonu seri portdan sadece bir byte okumanızı sağlayan fonksiyon. İsmi ReadByte olmasına rağmen geri dönüş değeri int türüdür ve size okunan değeri söyler.
serialPort.ReadExisting(): SerialPort sınıfının ReadExisting isimli fonksiyonu çağrıldığı zaman seri portdan okunabilen tüm veriyi size string türünden geri döndürür.
serialPort.ReadLine(): SerialPort sınıfının ReadLine isimli fonksiyonu seri portdan NewLine karakteri gelene kadar tanımladığınız ReadTimeout süresince bekler. Gelen veriyi size string türünden geri döndürür.
serialPort.Write(): SerialPort sınıfının Write isimli fonksiyonunun 3 tipi var bunlardan biri cihaza göndermek istediğiniz veriyi string türünden göndermenizi sağlıyor; serialPort.Write("Bu veriyi cihaza yaz"); İkinci yöntem ise veriyi byte dizisi türünden göndermenizi sağlıyor. byte[] gidecekVeri = new byte[] {0x30, 0x31, 0x32, 0x33, 0x34}; serialPort.Write(gidecekVeri, 0, gidecekVeri.Length); Tahmin edeceğiniz gibi ilk parametre byte türünden bir dizi, ikinci parametre ise bu dizinin kaçıncı indisinden itibaren üçüncü parametredeki değer kadar seri portdan veri göndermenizi istiyor. Birde byte dizisinin yerine char dizisi ile gönderebileceğiniz üçüncü bir tipi bulunuyor.
serialPort.WriteLine(): SerialPort sınıfının Write isimli fonksiyonu göndermek istediğiniz veriyi string türünden parametre geçerek gönderebilirsiniz. Write fonksiyonundan tek farkı göndermek istediğiniz verinin sonuna ‘\n’ karakterini ekliyor olması.
Cümlenin parçlara Ayrılması private void DisplayText(object sender, EventArgs e) { textBox1.AppendText(RxString); textBox1.AppendText("\r\n"); string[] an0 = sensorData[0].Split(':'); textBox2.Text = an0[1]; string[] an1 = sensorData[1].Split(':'); textBox3.Text = an1[1]; } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { RxString = serialPort1.ReadLine(); sensorData = RxString.Split(','); this.Invoke(new EventHandler(DisplayText)); }
Seri Porttan Okumak Yazmak
C# Seri Port (Okuma Yazma) private void button1_Click(object sender, EventArgs e) { if (!serialPort1.IsOpen) { serialPort1.Open(); //seripport aç. } serialPort1.Write("ABC"); //porta yaz private void button2_Click(object sender, EventArgs e) { String oku = serialPort1.ReadLine()); serialPort1.Close(); private void Form1_Load(object sender, EventArgs e) { namespace seriport1 { public partial class Form1 : Form public Form1() InitializeComponent(); serialPort1.PortName = "COM1"; serialPort1.BaudRate = 9600; serialPort1.DataBits = 8; serialPort1.Parity = Parity.None; serialPort1.StopBits = StopBits.One; }
Arduino Seri Port Karakter Okuma char Data[80]; byte index = 0; void loop() { if(Serial.available() > 0) { //if(serialAvailable()) kullanılabilir while(Serial.available() > 0) { char aChar = Serial.read(); if(aChar == '\n') { lcd.print(Data); index = 0; Data[index] = NULL; } else { Data[index] = aChar; index++; Data[index] = '\0'; // Kelime sonu } } }
Arduino Seri Port Sayı Okuma void loop() { while (Serial.available() == 0); int val = Serial.parseInt(); //parseFloat Serial.println(val); if (Serial.available()>0) \\ portta veri varsa { int x = Serial.parseInt(); Serial.println(x); }
void setup() { Serial.begin(9600); } void loop() { char buffer[] = {' ',' ',' ',' ',' ',' ',' '}; // 7 bytes kadar alır while (!Serial.available()); // portta karakter bekler Serial.readBytesUntil(‘\n', buffer, 7); int incomingValue = atoi(buffer); Serial.println(incomingValue);
void setup() { Serial.begin(9600); } unsigned int integerValue=0; // Max value is 65535 char incomingByte; void loop() { if (Serial.available() > 0) { // portu bekle integerValue = 0; while(1) { // ‘\n' gelene kadar dongu incomingByte = Serial.read(); if (incomingByte == '\n') break; // ‘\n’ geldi donguden cık if (incomingByte == -1) continue; // buffer boş integerValue *= 10; // desimal olarak sola 1 kaydır // sayıyı basamağına gore hesapla integerValue = ((incomingByte - 48) + integerValue); Serial.println(integerValue); // yazdır
void loop() { //Get Command if (Serial. available() > 0) { Serial void loop() { //Get Command if (Serial.available() > 0) { Serial.readBytes(in, 10); //10 karakter oku delay(5000); Serial.print(«Okunan: "); Serial.print(in); }
Strings C# char[] t = new char[5] { 'h', 'e', 'l', 'l', 'o' }; string a = new string(5); string b = "hello"; string a = "bike"; string b = "bit"; if (a.CompareTo(b) < 0) ... if (a.Equals(b)) if (a == b) if (a != b) string a = "holly"; string b = "wood"; string c = a + b; int l = c.Length;
Strings Arduino String stringOne = "Hello String"; sensorValue = analogRead(A0); String stringOne = "Sensor value: "; String stringTwo = stringOne + sensorValue; Serial.println(stringTwo); if (stringOne ==stringTwo)
Arduino Data Diziye İşleme String serialDataIn; String data[3]; int counter; int inbyte; void setup(){ Serial.begin(9600); counter = 0; serialDataIn = String(""); } void loop() { if(serial.available){ inbyte = Serial.read(); if(inbyte >= '0' & inbyte <= '9') serialDataIn += inbyte; if (inbyte == ',') { // virgül ayıracı data[counter] = String(serialDataIn); serialDataIn = String(""); counter = counter + 1; } if(inbyte == '\n'){ //enter karakteri Serial.print(serialDataln);
Arduinoda String Parçalara Ayırma int commaIndex = myString.indexOf(','); int secondCommaIndex = myString.indexOf(',', commaIndex+1); String firstValue = myString.substring(0, commaIndex); //ilk String secondValue = myString.substring(commaIndex+1, secondCommaIndex); //ikinci String thirdValue = myString.substring(secondCommaIndex+1); //ucuncu, sonuna kadar
Arduino Karakter Katarları void setup() { char str[] = "This is my string"; char out_str[40]; int num; Serial.begin(9600); Serial.println(str); //yaz num = strlen(str); //boyu Serial.print("Kelime boyu: "); Serial.println(num); num = sizeof(str); //boyu-null dahil Serial.print("Size of the array: "); strcpy(out_str, str); //kopyala Serial.println(out_str); strcat(out_str, " sketch."); //birleştir num = strlen(out_str); Serial.print("String length is: "); num = sizeof(out_str); Serial.print("Size of the array out_str[]: "); } void loop() { void setup() { String my_str = "This is my string."; Serial.begin(9600); Serial.println(my_str); // büyük harf cevir my_str.toUpperCase(); // ustune yaz my_str = "My new string."; // yer değiştir my_str.replace("string", "Arduino sketch"); // boyunu al Serial.print("String length is: "); Serial.println(my_str.length()); }
Led Yaktır C# kodu Arduino Kodu namespace seriport1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) private void Form1_Load(object sender, EventArgs e) { if (serialPort1.IsOpen == false) serialPort1.Open(); private void button1_Click(object sender, EventArgs e) { button1.BackColor = Color.Green; button2.BackColor = Color.Gray; button3.BackColor = Color.Gray; serialPort1.WriteLine("1"); } private void button2_Click(object sender, EventArgs e) { button2.BackColor = Color.Green; button1.BackColor = Color.Gray; serialPort1.WriteLine("2"); } private void button3_Click(object sender, EventArgs e) { button3.BackColor = Color.Green; serialPort1.WriteLine("3"); } void setup() { Serial.begin(9600); pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); digitalWrite(11, LOW); digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(10, LOW); } int led = 1; void loop() { if(Serial.available()) { led=Serial.read(); switch(led) { case 49: // veya case ‘1’ digitalWrite(12, HIGH); break; case 50: // veya case ‘2’ digitalWrite(10, HIGH); case 51: // veya case ‘3’ digitalWrite(13, HIGH); Led Yaktır C# kodu Arduino Kodu
Potansiyometre oku C# Kodu Arduino Kodu namespace seripotans { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) textBox1.Text = serialPort1.ReadExisting(); private void Form1_Load(object sender, EventArgs e) if (serialPort1.IsOpen == false) serialPort1.Open(); Potansiyometre oku int val=0; void setup() { Serial.begin(9600); } void loop() val = analogRead(A0); Serial.println(val); Serial.write(val); C# Kodu Arduino Kodu
Bluetooth İle İletişim #include <SoftwareSerial.h> #define rxPin 10 #define txPin 11 SoftwareSerial BTSerial(rxPin,txPin); // rx | tx void setup() { Serial.begin(9600); BTSerial.begin(115200); //BTSerial.begin(38400); pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, OUTPUT); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); } int led = 1; void loop() { if(BTSerial.available()) { Serial.println("test2"); led=BTSerial.read(); switch(led) { case 'F': digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); Serial.println("pin 12"); break; case 'B': digitalWrite(7, LOW); digitalWrite(6, HIGH); Serial.println("pin 10"); case 'L': digitalWrite(5, HIGH); Serial.println("pin 13"); case '4': } } }
SerialPort port = new SerialPort("COM12"); //other properties are set by default and are what I need port.Open(); port.Write(sendMsgBuff,0,sendMsgBuff.Length); Thread.Sleep(2000); port.Read(rcvMsgBuff,0,rcvMsgBuff.Length);
public SerialPort sp; string dataReceived = string public SerialPort sp; string dataReceived = string.Empty; private delegate void SetTextDeleg(string text); private void FormLoad() { sp = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); this.sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); sp.Open(); } void sp_DataReceived(object sender, SerialDataReceivedEventArgs e) try { Thread.Sleep(500); string x = sp.ReadLine(); // enter okuyacak this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { x }); } catch { } private void si_DataReceived(string data) dataReceived = data.Trim();