Paylaşımcıların Buluşma Noktası!
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.
#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); }
Ç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); }
“İ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.”
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İ