/*Neopixel Keypad ile Kullanımı: Arduino’ ya bağlı 8’ li Neopixel ve keypad
bulunmaktadır. Keypad ile parlaklığı LED seçimi ve seçilen LED’ in parlaklığı
belirlenen algoritmaya göre yapılabilmelidir.
Neopixel Seri Port ile Kullanımı: Arduino’ ya bağlı 8’ li neopixel bulunmaktadır.
Seri porttan gelen komutlara göre LED’ in animasyonu değiştirilebilmelidir.*/
#include <Adafruit_NeoPixel.h>
int ledPin = 3;
int ledSayisi = 8;
int ledParlaklik = 3;
const int pinSatir[4] = {13, 12, 11, 10};
const int pinSutun[4] = {7, 6, 5, 4};
unsigned long lastDebounce = 0;
int debounce = 200; // biraz daha uzun tut
int currentLed = 0;
char keys[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
Adafruit_NeoPixel halka(ledSayisi, ledPin, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(9600);
halka.begin();
halka.show();
for (int i = 0; i < 4; i++) {
pinMode(pinSatir[i], INPUT_PULLUP);
pinMode(pinSutun[i], OUTPUT);
digitalWrite(pinSutun[i], HIGH);
}
}
void loop() {
for (int a = 0; a < 3; a++) {
digitalWrite(pinSutun[a], LOW);
for (int b = 0; b < 4; b++) {
if (digitalRead(pinSatir[b]) == LOW && (millis() - lastDebounce) > debounce) {
char key = keys[b][a];
Serial.print("Tuş basıldı: ");
Serial.println(key);
// LED Seçimi
if (key == '1') currentLed = 0;
else if (key == '2') currentLed = 1;
else if (key == '3') currentLed = 2;
else if (key == '4') currentLed = 3;
else if (key == '5') currentLed = 4;
else if (key == '6') currentLed = 5;
else if (key == '7') currentLed = 6;
else if (key == '8') currentLed = 7;
// Parlaklık ayarı
if (key == '*') {
ledParlaklik++;
if (ledParlaklik > 4) ledParlaklik = 4;
}
if (key == '#') {
ledParlaklik--;
if (ledParlaklik < 0) ledParlaklik = 0;
}
updateLeds();
lastDebounce = millis();
while (digitalRead(pinSatir[b]) == LOW);
}
}
digitalWrite(pinSutun[a], HIGH);
}
}
void updateLeds() {
int b = 50;
if (ledParlaklik == 1) b = 100;
else if (ledParlaklik == 2) b = 150;
else if (ledParlaklik == 3) b = 200;
else if (ledParlaklik == 4) b = 255;
for (int i = 0; i < ledSayisi; i++) {
halka.setPixelColor(i, 0); // tüm LED'leri kapat
}
halka.setPixelColor(currentLed, halka.Color(b, b, b));//seçilen led ve parlaklığı uygulanır
halka.show();
}
/* 8'li led yerine 16'lı ring neopixel kullandım. İlk 8 ledinin keypadin 1'den 8'e
kadar olan tuşlarla seçimini sağladım. * tuşu ile seçili ledin parlaklığını arttı-
rırken # tuşu ile parlaklığı azalttım.
A,B,C,D tuşlarını kullanmadığım için bu tuşların bulunduğu sütunun kontrolünü koda
eklemedim.Bu nedenle sütunların taramasının yapıldığı döngüde olan a değişkenini <3
olacak şekilde oluşturdum.
Led parlaklığını başlangıcı 50 olmak üzere 50,100,150,200 ve 255 olmak üzere 4 seviye-
den oluşturdum.(Neopixel led PWM pinine bağlıve bu pinen 0-255 arası değerler alır.*/