Önceki yazılarımızda, sadece Arduino derleyicisi (IDE) kullanarak projeler yapıyorduk. Bu yazımızda Arduino seri port haberleşmesine değinmeye karar verdim. Seri port mantığını kullanarak, C/C++ derleyicisi( IDE) üzerinden nasıl led yakılır ?, nasıl motor sürülür ? Hatta nasıl araba yapılır ? Bu sorulara hep beraber cevap arayacağız. Bu yazımızda seri haberleşme olayını, DevC üzerinden nasıl gerçekleştireceğimizi detaylı bir şekilde anlatacağım. Kafanızda olayın daha net olması için, konu sonunda seri port üzerinden led yakıp söndüreceğiz.

Seri port, 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. Aslında arduinoyu 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 ü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",&deger);
 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 🙂