Joystick ile LCD Ekrana Yazı Yazma
Joystick modülünün X ve Y eksenlerini kullanarak 16x02 LCD ekranda imleci hareket ettirmeyi ve harf yazmayı öğreneceğiz.
Joystick modülünün X eksenindeki hareket özelliğini kullanarak LCD ekran üzerinde imleci sağa sola hareket ettireceğiz. Y eksenindeki hareket ile de oluşturduğumuz dizi içerisindeki harfleri LCD ekrana yazdıracağız. Bu sayede adınızdan tutun da birçok kelimeyi LCD ekrana kolaylıkla yazabileceksiniz.
Bu uygulamada joystick’in X ekseni ile LCD imleci hareket ettirilir. Y ekseni ile harf seçimi yapılır. Joystick butonuna basıldığında küçük harf / büyük harf modu değiştirilebilir.
LCD ekran 16 sütun ve 2 satır olduğu için imleç bir satırın sonuna geldiğinde diğer satıra geçecek şekilde ayarlanmıştır.
X ekseninden okunan değer yüksek olduğunda imleç sağa, düşük olduğunda sola hareket eder. İmleç satır sonuna veya başına geldiğinde diğer satıra geçer.
Y ekseninden okunan değer ile harf dizisindeki sıra artırılır veya azaltılır. Seçilen harf LCD ekrana yazılır ve imleç aynı konuma geri alınır.
Joystick butonuna basıldığında büyük harf modu açılır veya kapanır.
Verdiğin koddaki #include ; satırı eksik ve kodun son kısmı HTML içinde bozulmuş. Doğru kullanım #include <LiquidCrystal.h> şeklindedir.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
char Buyukveri[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'V', 'Y', 'Z'};
char veri[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', 'z'};
int elemanSayisi = sizeof(veri) / sizeof(veri[0]);
int xPin = A0;
int yPin = A1;
int Sw = 8;
int cr = 0;
int str = 0;
int alfabeSira = 0;
bool butonDurum = false;
void setup() {
pinMode(xPin, INPUT);
pinMode(yPin, INPUT);
pinMode(Sw, INPUT_PULLUP);
Serial.begin(9600);
lcd.begin(16, 2);
lcd.cursor();
lcd.setCursor(cr, str);
}
void loop() {
int x = analogRead(xPin);
int y = analogRead(yPin);
int S = digitalRead(Sw);
if (S == LOW) {
butonDurum = !butonDurum;
delay(300);
}
if (x > 900) {
sagaGit();
alfabeSira = 0;
delay(250);
}
if (x < 100) {
solaGit();
alfabeSira = 0;
delay(250);
}
if (y < 100) {
harfYaz();
alfabeSira++;
if (alfabeSira >= elemanSayisi) {
alfabeSira = 0;
}
delay(250);
}
if (y > 900) {
alfabeSira--;
if (alfabeSira < 0) {
alfabeSira = elemanSayisi - 1;
}
harfYaz();
delay(250);
}
}
void sagaGit() {
if (cr == 15 && str == 1) {
cr = 0;
str = 0;
} else if (cr == 15) {
cr = 0;
str++;
} else {
cr++;
}
lcd.setCursor(cr, str);
}
void solaGit() {
if (cr == 0 && str == 0) {
cr = 15;
str = 1;
} else if (cr == 0 && str == 1) {
cr = 15;
str--;
} else {
cr--;
}
lcd.setCursor(cr, str);
}
void harfYaz() {
if (butonDurum == false) {
lcd.write(veri[alfabeSira]);
} else {
lcd.write(Buyukveri[alfabeSira]);
}
lcd.setCursor(cr, str);
}
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int xPin = A0;
const int yPin = A1;
const int swPin = 8;
const char kucukHarfler[] = "abcdefghijklmnoprstuvyz";
const char buyukHarfler[] = "ABCDEFGHIJKLMNOPRSTUVYZ";
const int harfSayisi = sizeof(kucukHarfler) - 1;
int sutun = 0;
int satir = 0;
int harfIndex = 0;
bool buyukHarfModu = false;
bool oncekiButon = HIGH;
void setup() {
pinMode(swPin, INPUT_PULLUP);
lcd.begin(16, 2);
lcd.cursor();
lcd.setCursor(sutun, satir);
Serial.begin(9600);
}
void loop() {
int xDeger = analogRead(xPin);
int yDeger = analogRead(yPin);
bool buton = digitalRead(swPin);
if (oncekiButon == HIGH && buton == LOW) {
buyukHarfModu = !buyukHarfModu;
delay(250);
}
oncekiButon = buton;
if (xDeger > 900) {
imleciSagaAl();
harfIndex = 0;
delay(220);
} else if (xDeger < 100) {
imleciSolaAl();
harfIndex = 0;
delay(220);
}
if (yDeger < 100) {
harfIndex++;
if (harfIndex >= harfSayisi) {
harfIndex = 0;
}
mevcutHarfiYaz();
delay(220);
} else if (yDeger > 900) {
harfIndex--;
if (harfIndex < 0) {
harfIndex = harfSayisi - 1;
}
mevcutHarfiYaz();
delay(220);
}
}
void imleciSagaAl() {
sutun++;
if (sutun > 15) {
sutun = 0;
satir++;
}
if (satir > 1) {
satir = 0;
}
lcd.setCursor(sutun, satir);
}
void imleciSolaAl() {
sutun--;
if (sutun < 0) {
sutun = 15;
satir--;
}
if (satir < 0) {
satir = 1;
}
lcd.setCursor(sutun, satir);
}
void mevcutHarfiYaz() {
char harf = buyukHarfModu ? buyukHarfler[harfIndex] : kucukHarfler[harfIndex];
lcd.write(harf);
lcd.setCursor(sutun, satir);
}
Bu sürümde imleç hareketi, harf yazma ve buton kontrolü ayrı fonksiyonlarla daha okunabilir hale getirildi.