C/C++ ve Arduino Seri Port Haberleşmesi Nasıl Yapılır ?

C/C++ ve Arduino Seri Port Haberleşmesi Nasıl Yapılır ?

29 Ocak 2022 0 Yazar: admin

 Bu yazımızda Arduino seri port haberleşmesine değinmeye karar verdim. Seri port haberleşme mantığını kullanarak. C/C++ derleyicisi( IDE) üzerinden nasıl LED yakılır ? Bunu inceleyeceğiz. Sizler de seri port haberleşmesi nasıl yapılır ? Bu sorulara cevap bulacaksınız.

Seri haberleşme, dijital bilgilerin yani 1 ve 0’ların tek bir hat üzerinden gelmesini ifade eder. Arduino üzerinde UART/USART isminde seri iletişim birimi bulunur. Arduino’yu bilgisayara bağlayıp, kodları gönderdiğimizde bilgisayarın herhangi bir portu üzerinden bu işlemi yapmış oluyoruz. Arduino’da , “Serial Monitor” ismindeki seri port işlemlerini, izlediğimiz, veri gönderdiğimiz kısımda bu iletişimin bir parçası olmuş oluyor. Bu işlemi DevC ya da herhangi bir C/C++ derleyicisi. üzerinden yaptığımızda, bu komutlara DevC üzerinden ulaşmış oluyoruz. Bilgisayarda hangi portta çalışıyor olmamız, bu bağlantıda son derece önemli bir olay. Hangi portu kullandığımızı Arduino derleyicisi üzerindeki “Seri Port” ya da bilgisayarımızdaki “Aygıt Yöneticisi” işleminden hangi portu kullandığınızı görebilirsiniz. (COM5, COM6 gibi)

Hangi portta çalıştığımızı tespit ettikten sonra, önce kolarımızı arduino derleyicisi üzerinden yazalım,

Seri Port Üzerinden Led Yakıp Söndürme

Öncelikle, aşağıdaki kodları arduino derleyicimize yazıyoruz, ve kodları arduinomuza atıyoruz.

Arduino Kodları:

int LedPin= 13; //13. portu LedPin olarak tanımladık.
char deger; //deger isminde bir karakter tanımlıyoruz.
void setup (){
Serial.begin(9600); // Seri haberleşmeyi kullanacağımızı bildirdik
pinMode(LedPin, OUTPUT); //LedPini çıkış olarak tanımlıyoruz.
}
void loop (){
if(Serial.available()>0) // Seri port iletişiminde veri bulunursa,
deger=Serial.read(); // Seri port okuma komutunu deger karakterine atıyoruz.
if(gelen== 'A')
digitalWrite (LedPin, HIGH); //A harfi ile ledi yakma komutunu veriyoruz
if(gelen== 'B') 
digitalWrite (LedPin, LOW); //A harfi ile ledi söndürme komutunu veriyoruz. 
}

Kodlarımıza göre, A komutunu verdiğimizde ledimiz yanacak, B komutunu verdiğimizde ise sönecek. Bu iletişimi bilgisayar üzerinden sağlamak için DevC üzerinde şu kodları yazıyoruz.

Not: Aşağıdaki kodlar C dili ile yazılmıştır. Kütüphaneyi <iostream>’ e <string.h>’ı <string> ifadesine ve ‘printf’ komutunu ‘cout’ komutuna dönüştürerek C++ diline çevirebilirsiniz.

Bilgisayarda COM7 portu ile çalıştığımızı varsayarsak,

C Kodları:

#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>

using namespace std;
int x;
char deger;

int main() {

 HANDLE hComm;

 hComm = CreateFile( "COM7", 
 GENERIC_READ | GENERIC_WRITE, 
 0, 
 0, 
 OPEN_EXISTING,
 FILE_ATTRIBUTE_NORMAL,
 0);
 
 if (hComm == INVALID_HANDLE_VALUE) {
 if (GetLastError() == ERROR_FILE_NOT_FOUND) {
 printf("COM7'e erisim yok") ;
 }
 }

 DCB dcbSerialParams = {0};

 dcbSerialParams.DCBlength = sizeof(dcbSerialParams);

 if (!GetCommState(hComm, &dcbSerialParams)) {
 printf("Baglanti hatasi"); 
 _getch();
 return EXIT_FAILURE;
 }

 dcbSerialParams.BaudRate = CBR_9600; //9600 Baud 
 dcbSerialParams.ByteSize = 8; //8 data bits 
 dcbSerialParams.Parity = NOPARITY; //no parity 
 dcbSerialParams.StopBits = ONESTOPBIT; //1 stop 


 if (!SetCommState(hComm, &dcbSerialParams)) {
 printf("Baglantı hatası");
 _getch();
 return EXIT_FAILURE;
 }
 
 DWORD bytesSend;
 
 while (true) {
 
 printf("Bir deger giriniz: "); scanf("%c",°er);
 if(deger=='A')
 {
 BOOL retVal = WriteFile(hComm, "A", sizeof(x), &bytesSend, NULL);
 if (!retVal) {
 printf("Error Writing File");
 } else {
 printf("A yazdım\n");
 }
 } 
 else if(deger=='B')
 {
 
 BOOL retVal = WriteFile(hComm, "B", sizeof(x), &bytesSend, NULL);
 if (!retVal) {
 printf("Error Writing File");
 } else {
 printf("B yazdım\n");
 }
 }
 }
 CloseHandle(hComm); //close the handle 
 _getch();
 return 0;


}



Kodlarını, DevC de yazdıktan sonra, derleyip çalıştırdığımızda artık seri porta erişmiş oluyoruz. While döngüsü üzerinden gerçekleştirdiğimiz işleme göre klavyeden ‘A’ girdiğimizde ledimiz yanacak, ‘B’ girdiğimizde ise ledimiz sönecektir.

Bu şekilde basit bir led yakıp söndürme işlemini, seri port üzerinden gerçekleştirmiş olduk. İlerleyen yazılarımızda, seri port üzerinden motor sürme, araba sürme olaylarından bahsedeceğiz.

Her türlü sorularınızı, yorum olarak belirtebilirsiniz.

İyi çalışmalar 🙂