Last active
October 28, 2019 07:18
-
-
Save RobolinkAkademi/23b83387f6d32b6b489d2678c0bcb60c to your computer and use it in GitHub Desktop.
tum_yil_icin_arduino_mufredati_31.2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*Tur zamanlarını kaydedebilen kronometre devresinin arduino programıdır. | |
* Mekanik bir buton yardımıyla kronometre başlatılır durdurulur ve resetlenir.*/ | |
#include <LiquidCrystal_I2C.h> | |
LiquidCrystal_I2C lcd(0x27,16,2); | |
int butonPin=7;//Butonun bağlanacağı pin numarası | |
long tBaslangic=0;//Kronometre ilk başlatıldığında millis() | |
//sayacı bu değişkene kaydedilir.Program süresince | |
//bu değer referans alınarak süreler hesaplanır. | |
int durum=0;/*Kronometrenin başlangıç konumunda mı, ilerliyor mu yoksa durdurulmuş | |
mu olduğunu ifade eden durum numarası bu değişkende tutulur. Durum 0 ise | |
kronometre başlangıç için 00:00:00 konumdadır ve başlamaya hazırdır. | |
Durum 1 ise kronometre başlatılmış ve ilerliyordur, bu aşamada tur | |
zamanları kayıt edilebilir ve bir daha butona basıldığında kronometre duracaktır. | |
Durum 2'de ise butona basılmış süre durdurulmuştur, bu durumda | |
kaydedilen tur süreleri incelenebilir, kronometre butna basıldığı takdirde sıfırlanacaktır.*/ | |
int secmebutonu=0;//Bounce etkisi giderildikte sonra butonun durumunun tutulduğu değişken | |
int secmebutondurumu=0;//Butona basıldığında bir önceki anda butonun hangi durumda olduğunu gösteren değişken | |
long anlikSure=0;//İstenilen andaki sürenin kaydedildiği değişken | |
int sonOlculenSure=0;//Tur zamanı kaydedilirken kullanılacak olan bir değişken | |
void setup() { | |
pinMode(butonPin,INPUT); | |
lcd.begin(); | |
lcd.print("Butona Basiniz"); | |
while(!digitalRead(butonPin)); | |
lcd.clear(); | |
} | |
void loop() { | |
//Bounce etkisinin giderildiği kısım | |
if(digitalRead(butonPin)==HIGH){ | |
if(durum==0){ //durum 0 olduğu takdirde başlangıç süresi referans olarak tBaslangic'a kaydedilir. | |
tBaslangic=millis();} | |
delay(30); | |
if(digitalRead(butonPin)==HIGH){secmebutonu=1;} | |
} | |
else{secmebutonu=0;} | |
//"durum" değişkeninin içeriğine göre yapılacak işlemler switch/case yapısı ile belirlenir. | |
switch(durum){ | |
//0 durumunda yapılacak işlemler buradadır. | |
case 0: | |
if(secmebutondurumu==0 && secmebutonu==1){//Daha önce basılmıyor iken şuanda butona basılmışsa yapılacak işlemler bu if fonksiyonun altındadır. | |
anlikSure=millis()-tBaslangic;//Anlık süre millis() program süre sayacının, başlangıç süresinden çıkarılması ile bulunur. | |
SureGoster(anlikSure,0,0);//Anlık süre süre gösterme fonksiyonuna kursör koordinatlarıyla birlikte girilir ve lcd'ye yazdırılır. | |
durum=1;//durum 1 yapılarak bir sonraki duruma geçilir. | |
secmebutondurumu=1; | |
} | |
if((secmebutondurumu==1 && secmebutonu==0)||(secmebutondurumu==0 && secmebutonu==0)){ | |
//Bu koşullar altında kronometre başlangıç koşulunda saklanır. | |
secmebutondurumu=0; | |
break; | |
//1 durumunda yapılacak işlemler buradadır. | |
case 1: | |
if(secmebutondurumu==0 && secmebutonu==1){//Daha önce basılmıyor iken şuanda butona | |
//basılmışsa yapılacak işlemler bu if fonksiyonun altındadır. | |
anlikSure=millis()-tBaslangic; | |
SureGoster(anlikSure,0,0);//Basılan andaki süre son kez lcd'ye yazılır ve süre duruyor ilen bu hep kalır. | |
secmebutondurumu=1; | |
durum=2;//durum 2 yapılarak bir sonraki duruma geçilir. | |
} | |
if((secmebutondurumu==1 && secmebutonu==0)||(secmebutondurumu==0 && secmebutonu==0)){ | |
secmebutondurumu=0; | |
anlikSure=millis()-tBaslangic; | |
SureGoster(anlikSure,0,0);}//Süre ilerliyor iken butona basılmadığı takdirde | |
//program sürekli buradan geçerek yeni süreyi gösterir | |
break; | |
//2 durumunda yapılacak işlemler buradadır. | |
case 2: | |
if(secmebutondurumu==0 && secmebutonu==1){//Süre durmuş iken butona bir daha basıldığında | |
//yapılacak işlemler bu if fonksiyonun altındadır. | |
lcd.clear();//LCD ekranı temizlenir. | |
lcd.setCursor(0,0); | |
lcd.print("Kronometre icin"); | |
lcd.setCursor(0,1); | |
lcd.print("butona basiniz"); | |
while(digitalRead(butonPin)); | |
durum=0;//Durum 0'lanır | |
secmebutondurumu=1; | |
sonOlculenSure=0; | |
} | |
if((secmebutondurumu==1 && secmebutonu==0)||(secmebutondurumu==0 && secmebutonu==0)){ | |
//Süre durmuş iken ve butona basılmıyor iken bu kısım gerçekleştirilir. | |
secmebutondurumu=0; | |
} | |
break; | |
} | |
lcd.clear(); | |
} | |
} | |
/*Bu fonksiyon program boyunca milisaniye olarak kaydedilen değeri uygun bir şekilde kronometre | |
(Dk:Sn:Sl) formatına dönüştürür, girilen kursör satır ve sütun | |
bilgisine göre istenilen yere yazdırır.Süre ilk olarak 10'a bölünerek saliseye çevirilir. | |
Salise olarak kaydedilmiş toplam sürenin mod 100'ünü alırsak gereken | |
salise hanesini elde ederiz. Mod 6000'nini alıp 100'e bölersek sayının 0'dan sonraki kısmı | |
tabana yuvarlanacağı için saniye hanesini, aynı şekilde toplam | |
süreyi 6000'e bölersek de dakika hanesini bulmuş oluruz. Her haneyi 10'a böldüğümzde onlar | |
basamağını, her hanenin mod 10'unu alırsak da birler basamağını | |
buluruz. Bu şekilde her karakteri tek tek lcd'ye kolayca yazdırabiliriz.*/ | |
void SureGoster(long sure,int kursorSutun,int kursorSatir){ | |
sure=sure/10; | |
int salise=sure%100, saliseOnlar=salise/10, saliseBirler=salise%10; | |
int saniye=(sure%6000)/100, saniyeOnlar=saniye/10, saniyeBirler=saniye%10; | |
int dakika=sure/6000, dakikaOnlar=dakika/10, dakikaBirler=dakika%10; | |
lcd.setCursor(kursorSutun,kursorSatir);lcd.print(dakikaOnlar); | |
lcd.setCursor(kursorSutun+1,kursorSatir);lcd.print(dakikaBirler); | |
lcd.setCursor(kursorSutun+2,kursorSatir);lcd.print(":"); | |
lcd.setCursor(kursorSutun+3,kursorSatir);lcd.print(saniyeOnlar); | |
lcd.setCursor(kursorSutun+4,kursorSatir);lcd.print(saniyeBirler); | |
lcd.setCursor(kursorSutun+5,kursorSatir);lcd.print(":"); | |
lcd.setCursor(kursorSutun+6,kursorSatir);lcd.print(saliseOnlar); | |
lcd.setCursor(kursorSutun+7,kursorSatir);lcd.print(saliseBirler); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment