Seçilmiş

Atolye

Teknoloji

Ev & Dekorasyon

Mutfak

Oyun

Outdoor

Sanat

Arduino LCD ile Progressbar Yapımı

Tanıtım: Nedir Bu Progressbar?

Progressbar, çoğunuzun bildiği üzere yapılan bir işlemin aşamasını veya bir değeri kullanıcılara göstermek için kullanılır. Türkçesiyle ilerleme çubuğu da diyebiliriz.

Peki Neden Yaptık?

İnternette yabancı ve Türkçe kaynaklara bakmama rağmen, kolay uygulanabilir, az yer kaplayan bir proje bulamadım. Bulabildiğim tek örnek her bir hücreyi de sutunlara bölerek ayrıntılı bir şekilde çalışıyordu.

Nedense karışık konularda kendi yazmadığım kodu anlamakta zorluk çekerim. Her yiğidin bir yoğurt yiyişi vardır. Ben de kendime göre bir ilerleme çubuğu yaptım. Umarım beğenirsiniz.

1. Adım: Bağlantılar

İlerleme çubuğumuzu test edebilmek için bir de mesafe sensörü kullandım.

2. Adım: Yazılım

#include <LiquidCrystal.h>

// Belirli pinlere bağlı lcd yi tanımla
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int islemcubugu;
byte dolu[8] = {//dolu progressbar hücresi
  B11111,
  B00000,
  B11111,
  B11111,
  B11111,
  B00000,
  B11111,
};
byte bos[8] = {//boş progressbar hücresi
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
};
#define trigPin 8//bu ikisi mesafe sensörünün pinleri. 
#define echoPin 9//mesafe sensörünün kodlarını hazır kullandım, Allah affetsin
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  lcd.createChar(0, dolu);
  lcd.createChar(1, bos);
  lcd.begin(20, 4);
  //burdan sonrası olmasa da olur, bunlar progressbarda referans olsun diye var
  lcd.setCursor(0,2);
  lcd.print("0");
  lcd.setCursor(9,2);
  lcd.print("25");
  lcd.setCursor(18,2);
  lcd.print("50");
  lcd.setCursor(20-12,3);
  lcd.print("neyaptik.com");

}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance>50){distance=50;}//50 cm den büyükse 50 ye sabitle
  //mesafe kodu burda bitti
  islemcubugu = map(distance, 0, 50, 0, 18); //0 ila 50 cm arasını 0 ila 18 arası int değere çevir. 
  //islemcubugu = map(analogRead(0), 0, 1023, 0, 18); //Eğer analog değer okumak istiyorsanız bunu kullanın.
  lcd.setCursor(0,0);
  lcd.print("mesafe:");
  lcd.setCursor(0,1);
  lcd.print("|");//baş ve son karakterler bunlardan
  for(int i=0;i<islemcubugu;i++)
  {
  //ilk hücrede başlangıç karakteri var. Onu atla sonra değer kadar dolu karakteri at
  lcd.setCursor(i+1,1);
  lcd.write(byte(0));
  }
  
  for(int i=0;i<(18-islemcubugu);i++)
  {
  //lcd'de silmediğiniz karakter olduğu yerde kalır. dolayısıyla boş yerleri boş hücresiyle doldur
  lcd.setCursor(islemcubugu+i+1,1);
  lcd.write(byte(1));
  }
  
  lcd.setCursor(19,1);
  lcd.print("|");//son karakter
  delay(100);
}


3. Adım: Test

Yaptığım testlerin sonucunda çok başarılı olduğunu gördüm.

4. Adım: 16x2 Versiyonu

Çoğunuzda büyük LCD olmadığını biliyorum :) Dolayısıyla bir de 16x2 versiyonu yaptım. Elimde 16x2 LCD yok, eğer test edebilme fırsatına erişebilen bir arkadaş olursa yorumda paylaşsın. Sağlıcakla kalın.


#include <LiquidCrystal.h>

// Belirli pinlere bağlı lcd yi tanımla
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int islemcubugu;
byte dolu[8] = {//dolu progressbar hücresi
  B11111,
  B00000,
  B11111,
  B11111,
  B11111,
  B00000,
  B11111,
};
byte bos[8] = {//boş progressbar hücresi
  B11111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
};
#define trigPin 8//bu ikisi mesafe sensörünün pinleri. 
#define echoPin 9//mesafe sensörünün kodlarını hazır kullandım, Allah affetsin
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  lcd.createChar(0, dolu);
  lcd.createChar(1, bos);
  lcd.begin(16, 2);
}

void loop() {
  long duration, distance;
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance>50){distance=50;}//50 cm den büyükse 50 ye sabitle
  
  //mesafe kodu burda bitti
  islemcubugu = map(distance, 0, 50, 0, 14); //0 ila 50 cm arasını 0 ila 18 arası int değere çevir. 
  //islemcubugu = map(analogRead(0), 0, 1023, 0, 18); //Eğer analog değer okumak istiyorsanız bunu kullanın.
  lcd.setCursor(0,0);
  lcd.print("mesafe:");
  lcd.setCursor(0,1);
  lcd.print("|");//baş ve son karakterler bunlardan
  for(int i=0;i<islemcubugu;i++)
  {
  //ilk hücrede başlangıç karakteri var. Onu atla sonra değer kadar dolu karakteri at
  lcd.setCursor(i+1,1);
  lcd.write(byte(0));
  }
  
  for(int i=0;i<(14-islemcubugu);i++)
  {
  //lcd'de silmediğiniz karakter olduğu yerde kalır. dolayısıyla boş yerleri boş hücresiyle doldur
  lcd.setCursor(islemcubugu+i+1,1);
  lcd.write(byte(1));
  }
  
  lcd.setCursor(15,1);
  lcd.print("|");//son karakter
  delay(100);
}


Yorumlar.

406 Görüntülenme

1 Favoriler


coco

Trakya Üniversitesinde İngilizce Öğretmenliği okuyorum. Hobi olarak yazılım ve elektronikle ilgileniyorum. Bu siteyi deneyimlerimi paylaşmak için kullanıyorum. Üye olup sizler de paylaşabilirsiniz.


Bir Söz

“İtiraf ederim ki, düşmanlarımız çok çalışıyor. Biz de onlardan daha çok çalışmaya mecburuz. Çalışmak demek, boşuna yorulmak, terlemek değildir. Zamanın gereklerine göre bilim ve teknik ve her türlü medeni buluşlardan azami derecede yararlanmak zorunluluğudur.”

Tagler

KENDİN YAP MÜHENDİSLİK PROJELERİ PROJE PAYLAŞIN ELEKTRİK ELEKTRONİK MÜHENDİS EVDE YAP PROJE YAP ARDUİNO YAZILIM PCB HAZIRLAMA NE YAPTIK DIY DIY YAPIMI NASIL YAPILIR DEKORASYON DIY FİKİRLERİ

Sosyal Medya

Facebook Instagram