/mySerialCom

C++ UART Communication Library for AVR // AVR için C++ UART iletişim kütüphanesi (Türkçe/İngilizce)

Primary LanguageC++MIT LicenseMIT

MySerialCom - C++ UART Library for AVR (ATmega328, Interrupt RX)

MySerialCom - AVR UART İletişim Kütüphanesi

🇹🇷 Türkçe Açıklama

Neden Bu Proje?

AVR tabanlı projelerde seri iletişim sıkça ihtiyaç duyulan ama zaman zaman karmaşık hale gelen bir konudur. C++ diline uygun, sade ve anlaşılır bir kütüphane bulmakta zorlandım. Türkçe kaynak sayısı da oldukça az olduğu için bu projeyi geliştirip paylaşmak istedim. Böylece hem kendim için yeniden kullanılabilir bir altyapı oluşturmuş oldum, hem de az da olsa başkalarına fayda sağlamayı hedefledim.

Sorularınızı, önerilerinizi ve yorumlarınızı GitHub yorumları üzerinden paylaşabilirsiniz. Birlikte geliştirebiliriz.

Özellikler

  • Donanımsal UART (USART0) kullanımı
  • RX tarafı kesme (interrupt) destekli
  • TX tarafı bloklama (polling) yöntemiyle çalışır
  • 64 baytlık ring buffer
  • print, write, read, available, flush, clearBuffer fonksiyonları

Fonksiyon Açıklamaları

  • MySerialCom(unsigned long baud) → UART haberleşmesini başlatır, baud rate ayarı yapar.
  • void write(char data) → Tek karakter gönderir (TX).
  • void print(const char* str) → Null-terminatörlü C string'ini UART üzerinden gönderir.
  • void print(int num) → Sayısal değeri string'e çevirip UART üzerinden gönderir.
  • char read() → RX buffer'dan bir karakter okur. Veri yoksa 0 döner.
  • bool available() → RX buffer'da okunabilir veri olup olmadığını kontrol eder.
  • void flush() → TX buffer boşalana kadar bekler.
  • void clearBuffer() → RX buffer’ı temizler (head ve tail sıfırlanır).
  • void config(uint8_t dataBits, char parity, uint8_t stopBits) → UART çerçevesini yapılandırır. dataBits: 5–9 arası, parity: 'N' (None), 'E' (Even), 'O' (Odd); stopBits: 1 veya 2.

Örnek Kullanım

MySerialCom serial(9600); // Baud rate tanımı

serial.print("Merhaba");   // String gönder
serial.print(1234);         // Sayı gönder
serial.write('A');          // Tek karakter gönder

if (serial.available()) {
    char c = serial.read(); // Veri oku
}

serial.flush();             // TX buffer boşalana kadar bekle
serial.clearBuffer();       // RX buffer temizle
serial.config(7, 'E', 2);   // 7-bit data, Even parity, 2 stop bit ayarı

Gereksinimler

  • ATmega328P ya da benzeri AVR işlemciler
  • 16 MHz sistem frekansı (isteğe göre F_CPU güncellenebilir)
  • AVR-GCC veya Atmel Studio ortamı

🇬🇧 English Description

Why This Project?

Serial communication is a common necessity in AVR-based embedded projects, yet it can become unnecessarily complex. I couldn't find a simple, modern C++-compatible library that suited my needs, so I decided to create one from scratch.

My goal is to have a reusable, clean codebase for future use, and to share something helpful with the community.

Features

  • Hardware UART via USART0
  • Interrupt-based RX
  • Polling-based TX
  • 64-byte ring buffer for incoming data
  • Utility functions: print, write, read, available, flush, clearBuffer, config

Function Descriptions

  • MySerialCom(unsigned long baud) → Initializes UART communication and sets the baud rate.
  • void write(char data) → Sends a single character via TX.
  • void print(const char* str) → Sends a null-terminated string via UART.
  • void print(int num) → Converts integer to string and sends via UART.
  • char read() → Reads a character from RX buffer. Returns 0 if no data is available.
  • bool available() → Checks if RX buffer has available data.
  • void flush() → Waits until TX buffer is empty.
  • void clearBuffer() → Clears the RX buffer (resets head and tail).
  • void config(uint8_t dataBits, char parity, uint8_t stopBits) → Configures UART frame format. dataBits: 5–9, parity: 'N' (None), 'E' (Even), 'O' (Odd); stopBits: 1 or 2.

Example Usage

MySerialCom serial(9600); // Define baud rate

serial.print("Hello");   // Send string
serial.print(1234);       // Send number
serial.write('A');        // Send character

if (serial.available()) {
    char c = serial.read(); // Read received data
}

serial.flush();             // Wait for TX complete
serial.clearBuffer();       // Clear RX buffer
serial.config(7, 'E', 2);   // 7-bit data, Even parity, 2 stop bits

Requirements

  • ATmega328P or similar AVR microcontroller
  • 16 MHz system clock (adjust F_CPU if needed)
  • AVR-GCC or Atmel Studio compatible environment

License: MIT
Author: Mehmet Teker