Raspberry Pi Pico eğitim kartı için pin tanımlamaları ve yapılandırmaları Ayrıntılar...
#include <stdio.h>#include <math.h>#include <string.h>#include <limits.h>#include "hardware/gpio.h"#include "pico/multicore.h"#include "pico/stdlib.h"#include "hardware/pwm.h"#include "hardware/adc.h"#include "hardware/i2c.h"

Bu dosyanın kaynak koduna git.
Makrolar | |
| #define | KEYPAD 28 |
| #define | POT_1 27 |
| #define | LDR_1 26 |
| #define | BUTTON_UP 5 |
| #define | BUTTON_OK 6 |
| #define | BUTTON_DOWN 7 |
| #define | LED_RED 4 |
| #define | LED_YELLOW 3 |
| #define | LED_GREEN 2 |
| #define | RGB_R 16 |
| #define | RGB_G 17 |
| #define | RGB_B 18 |
| #define | BUZZER_PIN 10 |
| #define | STEP_MOTOR_A1 11 |
| #define | STEP_MOTOR_A2 12 |
| #define | STEP_MOTOR_B1 13 |
| #define | STEP_MOTOR_B2 14 |
| #define | STEP_DELAY_MIN 1000 |
| #define | STEP_DELAY_MAX 10000 |
| #define | STEPS_PER_REV 2048 |
| #define | ULTRA_SONIC_TR 8 |
| #define | ULTRA_SONIC_EC 9 |
| #define | BLT_TX 0 |
| #define | BLT_RX 1 |
| #define | PIR_DETECTOR 19 |
| #define | I2C_SDA 20 |
| #define | I2C_SCL 21 |
| #define | LCD_ADDR 0x27 |
| #define | I2C_PORT i2c0 |
| #define | LCD_ROWS 2 |
| #define | LCD_COLS 16 |
| #define | LCD_CHARACTER 1 |
| #define | LCD_COMMAND 0 |
| #define | LCD_CLEARDISPLAY 0x01 |
| #define | LCD_RETURNHOME 0x02 |
| #define | LCD_ENTRYMODESET 0x04 |
| #define | LCD_DISPLAYCONTROL 0x08 |
| #define | LCD_CURSORSHIFT 0x10 |
| #define | LCD_FUNCTIONSET 0x20 |
| #define | LCD_SETCGRAMADDR 0x40 |
| #define | LCD_SETDDRAMADDR 0x80 |
| #define | LCD_ENTRYSHIFTINCREMENT 0x01 |
| #define | LCD_ENTRYLEFT 0x02 |
| #define | LCD_BLINKON 0x01 |
| #define | LCD_CURSORON 0x02 |
| #define | LCD_DISPLAYON 0x04 |
| #define | LCD_MOVERIGHT 0x04 |
| #define | LCD_DISPLAYMOVE 0x08 |
| #define | LCD_5x10DOTS 0x04 |
| #define | LCD_2LINE 0x08 |
| #define | LCD_8BITMODE 0x10 |
| #define | LCD_BACKLIGHT 0x08 |
| #define | LCD_ENABLE_BIT 0x04 |
| #define | HIGH 1 |
| #define | LOW 0 |
| #define | PWM_FREQ 1000 |
| #define | PWM_DUTY_MAX 4095 |
| #define | BUZZER_CLOCK 125000000 |
| #define | BUZZER_WRAP 4095 |
| #define | BUZZER_DUTY_50 2048 |
| #define | NOTE_C4 261.63 |
| #define | NOTE_CS4 277.18 |
| #define | NOTE_D4 293.66 |
| #define | NOTE_DS4 311.13 |
| #define | NOTE_E4 329.63 |
| #define | NOTE_F4 349.23 |
| #define | NOTE_FS4 369.99 |
| #define | NOTE_G4 392.00 |
| #define | NOTE_GS4 415.30 |
| #define | NOTE_A4 440.00 |
| #define | NOTE_AS4 466.16 |
| #define | NOTE_B4 493.88 |
Enümerasyonlar | |
| enum | motor_state_t { MOTOR_STOPPED = 0 , MOTOR_RUNNING = 1 , MOTOR_ERROR = 2 } |
| Motor durumu numaralandırması Ayrıntılar... | |
| enum | motor_direction_t { CW , CCW } |
| Motor yönü numaralandırması Ayrıntılar... | |
| enum | ButtonEvent { BUTTON_PRESSED , BUTTON_RELEASED , BUTTON_HELD } |
Fonksiyonlar | |
| bool | is_motor_running (void) |
| Motorun çalışıp çalışmadığını kontrol eder. | |
| motor_state_t | get_motor_state (void) |
| Motorun mevcut durumunu döndürür. | |
| void | step_turn (motor_direction_t direction, uint speed, float revolutions) |
| Belirtilen yön, hız ve devir sayısı ile step motor dönüşünü kontrol eder. | |
| void | step_stop (void) |
| Step motor için acil durdurma fonksiyonu. | |
| void | init_step_motor (void) |
| Step motor GPIO pinlerini başlatır. | |
| void | send_motor_parameters (motor_direction_t direction, uint speed, float revolutions) |
| Step motor parametrelerini Core1'e gönderir (yön, hız, devir) | |
| char | keypadOku (void) |
| Analog tuş takımını okur ve basılan tuşu döndürür. | |
| bool | analog_button_pressed (uint gpio) |
| Analog giriş kullanarak bir düğmeye basılıp basılmadığını kontrol eder. | |
| bool | button_pressed (uint gpio) |
| Debounce korumalı temel buton basma kontrolü | |
| bool | check_button_event (uint gpio, ButtonEvent event) |
| Çeşitli zamanlama kontrolleriyle buton basma kontrolü | |
| uint32_t | get_button_hold_duration (uint gpio) |
| Bir butonun ne kadar süre al. | |
| uint | wait_for_button_press (uint32_t timeout_ms) |
| Herhangi bir buton basılmasını bekle. | |
| uint | init_pwm_pin (uint gpio, float frequency, uint16_t duty) |
| Belirli bir GPIO pini için PWM'i başlatır. | |
| void | init_buzzer_pwm (void) |
| Buzzer için özel olarak PWM'i başlatır. | |
| void | init_rgb_pwm (void) |
| RGB LED pinleri için PWM'i başlatır Tüm üç RGB LED kanalını PWM ile yapılandırır. | |
| void | init_led_pwm (void) |
| Standart LED çıkışları için PWM'i başlatır Kırmızı, Sarı ve Yeşil LED'ler için PWM'i yapılandırır. | |
| void | init_board (void) |
| Tüm kart bileşenlerini başlatır. | |
| void | init_adc (void) |
| Analog girişler için ADC'yi başlatır. | |
| void | init_pwm (void) |
| Buzzer ve LED çıkışları için PWM'i başlatır. | |
| void | init_lcd (void) |
| I2C LCD ekranını başlatır. | |
| void | init_buttons (void) |
| Tüm buton GPIO pinlerini başlat. | |
| uint16_t | read_analog (uint8_t pin) |
| Analog değeri okur. | |
| void | set_led_pwm (uint gpio, uint16_t duty) |
| Bir LED için PWM görev döngüsünü ayarlar. | |
| void | set_pwm_frequency (uint slice_num, float frequency) |
| Belirtilen dilim için PWM frekansını ayarlar. | |
| double | get_frequency (const char *note, int octave) |
| Adı ve oktavı verilen bir müzikal notanın frekansını hesaplar. | |
| void | play_note (float frequency, int duration_ms) |
| Belirtilen frekans ve sürede buzzer'da bir nota çalar. | |
| void | play_notes (const char *notes[][2], int num_notes, int duration) |
| Bir dizi müzikal notanın çalınmasını sağlar. | |
| void | lcd_init (void) |
| LCD ekranını başlatır. | |
| void | lcd_send_byte (uint8_t val, int mode) |
| LCD'ye bir byte veri gönderir. | |
| void | lcd_clear (void) |
| LCD ekranını temizler. | |
| void | lcd_set_cursor (int line, int position) |
| LCD imlecini belirtilen konuma ayarlar. | |
| void | lcd_string (const char *s) |
| LCD'ye bir metin dizisi gönderir. | |
| void | init_ultrasonic (void) |
| Ultrasonik sensör pinlerini başlatır. | |
| void | init_pir (void) |
| PIR hareket sensörünü başlatır. | |
| float | measure_distance (void) |
| Ultrasonik sensör kullanarak mesafe ölçer. | |
| bool | detect_motion (void) |
| PIR sensörü tarafından hareket algılanıp algılanmadığını kontrol eder. | |
| bool | wait_for_motion (uint32_t timeout_ms) |
| Zaman aşımı ile hareket algılamayı bekler. | |
| float | get_average_distance (uint8_t num_samples, uint32_t delay_ms) |
| Birden fazla ölçümden ortalama mesafeyi alır. | |
Raspberry Pi Pico eğitim kartı için pin tanımlamaları ve yapılandırmaları
Bu başlık dosyası, butonlar, LED'ler, LCD, motorlar ve sensörler dahil olmak üzere çeşitli bileşenler için yapılandırmalar ve fonksiyon prototipleri sağlar.
| #define BLT_RX 1 |
Bluetooth RX pini
| #define BLT_TX 0 |
Bluetooth TX pini
| #define BUZZER_CLOCK 125000000 |
Buzzer saat frekansı (125 MHz)
| #define BUZZER_DUTY_50 2048 |
Buzzer %50 görev döngüsü
| #define BUZZER_PIN 10 |
Buzzer kontrol pini Buzzer çıkışı (PWM)
| #define BUZZER_WRAP 4095 |
Buzzer sarma değeri
| #define HIGH 1 |
Yüksek seviye
| #define I2C_PORT i2c0 |
I2C portu
| #define I2C_SCL 21 |
I2C saat pini
| #define I2C_SDA 20 |
I2C veri pini
| #define LCD_2LINE 0x08 |
LCD 2 satır
| #define LCD_5x10DOTS 0x04 |
LCD 5x10 nokta
| #define LCD_8BITMODE 0x10 |
LCD 8 bit modu
| #define LCD_ADDR 0x27 |
LCD I2C adresi
| #define LCD_BACKLIGHT 0x08 |
LCD arka ışık
| #define LCD_BLINKON 0x01 |
LCD yanıp sönme açık
| #define LCD_CHARACTER 1 |
LCD karakter modu
| #define LCD_CLEARDISPLAY 0x01 |
LCD ekranı temizle
| #define LCD_COLS 16 |
LCD sütun sayısı
| #define LCD_COMMAND 0 |
LCD komut modu
| #define LCD_CURSORON 0x02 |
LCD imleç açık
| #define LCD_CURSORSHIFT 0x10 |
LCD imleç kaydırma
| #define LCD_DISPLAYCONTROL 0x08 |
LCD ekran kontrolü
| #define LCD_DISPLAYMOVE 0x08 |
LCD ekran hareketi
| #define LCD_DISPLAYON 0x04 |
LCD ekran açık
| #define LCD_ENABLE_BIT 0x04 |
LCD etkinleştirme biti
| #define LCD_ENTRYLEFT 0x02 |
LCD giriş sola
| #define LCD_ENTRYMODESET 0x04 |
LCD giriş modu ayarla
| #define LCD_ENTRYSHIFTINCREMENT 0x01 |
LCD giriş kaydırma artışı
| #define LCD_FUNCTIONSET 0x20 |
LCD fonksiyon ayarı
| #define LCD_MOVERIGHT 0x04 |
LCD sağa kaydır
| #define LCD_RETURNHOME 0x02 |
LCD başlangıç konumuna dön
| #define LCD_ROWS 2 |
LCD satır sayısı
| #define LCD_SETCGRAMADDR 0x40 |
LCD CGRAM adres ayarı
| #define LCD_SETDDRAMADDR 0x80 |
LCD DDRAM adres ayarı
| #define LOW 0 |
Düşük seviye
| #define NOTE_A4 440.00 |
La notası frekansı
| #define NOTE_AS4 466.16 |
La diyez notası frekansı
| #define NOTE_B4 493.88 |
Si notası frekansı
| #define NOTE_C4 261.63 |
Do notası frekansı
| #define NOTE_CS4 277.18 |
Do diyez notası frekansı
| #define NOTE_D4 293.66 |
Re notası frekansı
| #define NOTE_DS4 311.13 |
Re diyez notası frekansı
| #define NOTE_E4 329.63 |
Mi notası frekansı
| #define NOTE_F4 349.23 |
Fa notası frekansı
| #define NOTE_FS4 369.99 |
Fa diyez notası frekansı
| #define NOTE_G4 392.00 |
Sol notası frekansı
| #define NOTE_GS4 415.30 |
Sol diyez notası frekansı
| #define PIR_DETECTOR 19 |
PIR hareket sensörü pini
| #define PWM_DUTY_MAX 4095 |
PWM maksimum görev döngüsü
| #define PWM_FREQ 1000 |
PWM frekansı
| #define ULTRA_SONIC_EC 9 |
Yankı pini
| #define ULTRA_SONIC_TR 8 |
Tetikleme pini
| enum ButtonEvent |
| enum motor_direction_t |
| enum motor_state_t |
| bool analog_button_pressed | ( | uint | gpio | ) |
Analog giriş kullanarak bir düğmeye basılıp basılmadığını kontrol eder.
Bu fonksiyon, bir analog girişi okur ve ADC değerine göre bir düğmeye basılıp basılmadığını belirler ve debounce koruması içerir.
| gpio | Okunacak GPIO pin numarası |
| bool button_pressed | ( | uint | gpio | ) |
Debounce korumalı temel buton basma kontrolü
| gpio | Kontrol edilecek GPIO pini |
Buton sıçramalarından kaynaklanan yanlış tetiklenmeleri önlemek için 100ms debounce süresi uygular. Sadece debounce süresi geçtikten sonra basma işlemini kaydeder.

| bool check_button_event | ( | uint | gpio, |
| ButtonEvent | event | ||
| ) |
Çeşitli zamanlama kontrolleriyle buton basma kontrolü
| gpio | Kontrol edilecek GPIO pini |
| event | Kontrol edilecek buton olayı türü (BUTTON_PRESSED, BUTTON_RELEASED veya BUTTON_HELD) |
Farklı buton olay türlerini işler:

| bool detect_motion | ( | void | ) |
PIR sensörü tarafından hareket algılanıp algılanmadığını kontrol eder.

| float get_average_distance | ( | uint8_t | num_samples, |
| uint32_t | delay_ms | ||
| ) |
Birden fazla ölçümden ortalama mesafeyi alır.
| num_samples | Ortalama alınacak örnek sayısı |
| delay_ms | Örnekler arasındaki gecikme süresi (milisaniye) |

| uint32_t get_button_hold_duration | ( | uint | gpio | ) |
Bir butonun ne kadar süre al.
| gpio | Kontrol edilecek GPIO pini |
Butonun sürekli olarak ne kadar süre basılı tutulduğunu döndürür. Buton şu anda basılı değilse veya GPIO pini geçersizse 0 döndürür.

| double get_frequency | ( | const char * | note, |
| int | octave | ||
| ) |
Adı ve oktavı verilen bir müzikal notanın frekansını hesaplar.
Bu fonksiyon, önceden tanımlanmış nota frekansları listesinden temel frekansını bularak ve belirtilen oktava göre ayarlayarak, belirtilen müzikal notanın frekansını belirler.
| note | Müzikal notayı temsil eden dize (örn. "A", "C#", "G") |
| octave | Oktav numarasını temsil eden tamsayı |

| motor_state_t get_motor_state | ( | void | ) |
Motorun mevcut durumunu döndürür.
| void init_adc | ( | void | ) |
Analog girişler için ADC'yi başlatır.
Aşağıdakiler için ADC'yi yapılandırır ve GPIO pinlerini başlatır:

| void init_board | ( | void | ) |
Tüm kart bileşenlerini başlatır.
Diğer tüm başlatma fonksiyonlarını çağıran ve butonlar ve LED'ler için GPIO pinlerini ayarlayan ana başlatma fonksiyonu


| void init_buttons | ( | void | ) |
Tüm buton GPIO pinlerini başlat.
YUKARI, TAMAM ve AŞAĞI butonlarını pull-down dirençli giriş pinleri olarak yapılandırır. Bu, butonlar basılı değilken bilinen bir durumda olmalarını sağlar.

| void init_buzzer_pwm | ( | void | ) |
Buzzer için özel olarak PWM'i başlatır.
Bu fonksiyon, buzzer'ın sessiz bir durumda başlamasını sağlamak için başlangıç frekansı ve sıfır görev döngüsü ile buzzer için PWM pinini ayarlar.


| void init_lcd | ( | void | ) |
I2C LCD ekranını başlatır.
I2C iletişimini yapılandırır ve LCD ekranını standart 16x2 yapılandırması ile başlatır


| void init_led_pwm | ( | void | ) |
Standart LED çıkışları için PWM'i başlatır Kırmızı, Sarı ve Yeşil LED'ler için PWM'i yapılandırır.


| void init_pir | ( | void | ) |
PIR hareket sensörünü başlatır.
PIR sensör pinini giriş olarak yapılandırır

| void init_pwm | ( | void | ) |
Buzzer ve LED çıkışları için PWM'i başlatır.
Aşağıdakiler için PWM kanallarını yapılandırır:


| uint init_pwm_pin | ( | uint | gpio, |
| float | frequency, | ||
| uint16_t | duty | ||
| ) |
Belirli bir GPIO pini için PWM'i başlatır.
| gpio | PWM için başlatılacak GPIO pin numarası |
| frequency | Başlangıç PWM frekansı Hz cinsinden (uygulanabilirse, varsayılan için 0) |
| duty | Başlangıç görev döngüsü (0-PWM_DUTY_MAX) |

| void init_rgb_pwm | ( | void | ) |
RGB LED pinleri için PWM'i başlatır Tüm üç RGB LED kanalını PWM ile yapılandırır.


| void init_step_motor | ( | void | ) |
Step motor GPIO pinlerini başlatır.
Bu fonksiyon, 4 fazlı bir step motorunu kontrol etmek için kullanılan GPIO pinlerini yapılandırır. Her pini başlatır ve motor bobinlerini sürmek için çıkış olarak ayarlar.

| void init_ultrasonic | ( | void | ) |
Ultrasonik sensör pinlerini başlatır.
Tetikleme pinini çıkış ve yankı pinini giriş olarak yapılandırır

| bool is_motor_running | ( | void | ) |
Motorun çalışıp çalışmadığını kontrol eder.
| char keypadOku | ( | void | ) |
Analog tuş takımını okur ve basılan tuşu döndürür.
Bu fonksiyon, KEYPAD pinine (GPIO28) bağlı tuş takımından analog değeri okur ve ADC değerini karşılık gelen tuş takımı karakterlerine eşleştirir. Tuş takımı düğmeleri aşağıdaki matris şeklinde düzenlenmiştir: | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 | | * | 0 | # |


| void lcd_clear | ( | void | ) |
LCD ekranını temizler.


| void lcd_init | ( | void | ) |
LCD ekranını başlatır.
LCD ekranını 4-bit mod, 2 satır ve 5x8 yazı tipi ile yapılandırır. Ayrıca ekranı temizler ve imleci başlangıç konumuna getirir.

| void lcd_send_byte | ( | uint8_t | val, |
| int | mode | ||
| ) |
LCD'ye bir byte veri gönderir.
| val | Gönderilecek byte |
| mode | Komutlar için LCD_COMMAND, karakter verisi için LCD_CHARACTER |


| void lcd_set_cursor | ( | int | line, |
| int | position | ||
| ) |
LCD imlecini belirtilen konuma ayarlar.
| line | Satır numarası (0 veya 1) |
| position | Karakter pozisyonu (0-15) |


| void lcd_string | ( | const char * | s | ) |
LCD'ye bir metin dizisi gönderir.
| s | Null ile sonlandırılmış gönderilecek metin |


| float measure_distance | ( | void | ) |
Ultrasonik sensör kullanarak mesafe ölçer.
init_ultrasonic() çağrılmış olmalıdır. 
| void play_note | ( | float | frequency, |
| int | duration_ms | ||
| ) |
Belirtilen frekans ve sürede buzzer'da bir nota çalar.
Bu fonksiyon, PWM kullanarak bir nota çalar ve nota çalma işlemi tamamlandıktan sonra uygun temizleme işlemlerini gerçekleştirir. Parametre doğrulaması içerir ve notalar arası temiz geçişleri sağlar.
| frequency | Çalınacak notanın Hertz cinsinden frekansı |
| duration_ms | Notanın çalınması gereken süre (milisaniye cinsinden) |


| void play_notes | ( | const char * | notes[][2], |
| int | num_notes, | ||
| int | duration | ||
| ) |
Bir dizi müzikal notanın çalınmasını sağlar.
Bu fonksiyon, bir dizi notanın üzerinden yineleyerek her bir nota için frekansı hesaplar ve belirtilen sürede çalar.
| notes | Her elemanı {nota, oktav} olan iki boyutlu dize dizisi. Örn. {"C","4"}, {"D#","4"} |
| num_notes | Dizideki nota sayısı |
| duration | Her bir notanın çalma süresi (ms) |


| uint16_t read_analog | ( | uint8_t | pin | ) |
Analog değeri okur.
| pin | Okunacak ADC pin numarası |

| void send_motor_parameters | ( | motor_direction_t | direction, |
| uint | speed, | ||
| float | revolutions | ||
| ) |
Step motor parametrelerini Core1'e gönderir (yön, hız, devir)
| direction | Motor yönü |
| speed | Adım/saniye |
| revolutions | Devir sayısı (float) |

| void set_led_pwm | ( | uint | gpio, |
| uint16_t | duty | ||
| ) |
Bir LED için PWM görev döngüsünü ayarlar.
| gpio | LED'in GPIO pin numarası |
| duty | Görev döngüsü değeri (0-PWM_DUTY_MAX) |

| void set_pwm_frequency | ( | uint | slice_num, |
| float | frequency | ||
| ) |
Belirtilen dilim için PWM frekansını ayarlar.
Bu fonksiyon, pico_training_board.h'den önceden tanımlanmış sabitleri kullanarak istenen frekans için PWM dilimini yapılandırır. İstenen frekansa ulaşmak için uygun bölücü değerlerini hesaplar.
| slice_num | Yapılandırılacak PWM dilim numarası |
| frequency | İstenen frekans (Hz cinsinden) |

| void step_stop | ( | void | ) |
Step motor için acil durdurma fonksiyonu.
Bu fonksiyon, step motorunu acil olarak durdurur:

| void step_turn | ( | motor_direction_t | direction, |
| uint | speed, | ||
| float | revolutions | ||
| ) |
Belirtilen yön, hız ve devir sayısı ile step motor dönüşünü kontrol eder.
| direction | Motor dönüş yönü (CW veya CCW) |
| speed | Motor hızı (adım/saniye) |
| revolutions | Yapılacak tam devir sayısı |
Bu fonksiyon, yarım adım modu (her devir için 8 adım) kullanarak bir step motoru kontrol eder. Motor durumu yönetimi, acil durdurma işlevselliği ve hassas zamanlama kontrolü sağlar. Motor zaten çalışıyorsa fonksiyon başlamaz.
Kullanılan global değişkenler:


| uint wait_for_button_press | ( | uint32_t | timeout_ms | ) |
Herhangi bir buton basılmasını bekle.
| timeout_ms | Maksimum bekleme süresi (milisaniye cinsinden, sonsuz için 0) |
Şu durumlardan biri gerçekleşene kadar program akışını bloklar:

| bool wait_for_motion | ( | uint32_t | timeout_ms | ) |
Zaman aşımı ile hareket algılamayı bekler.
| timeout_ms | Beklenecek maksimum süre (milisaniye), 0 ise zaman aşımı yok |
