Projenin sonun geldim ama tıkandım

Mertbk28

Üye
Katılım
24 Ara 2021
Mesajlar
2
Puanları
1
Yaş
26
Bu kodu uzun uğraşlar sonucu yardım da alarak yazdım. Up ve down butonları kullanarak motorun dakikadaki çalışma sayısını denetlemeyi hedefledim. Lakin butonlar görevini görmüyor. Ufak ama kritik bir hata var kodda.Yardımcı olablir misiniz?

#include <LiquidCrystal_I2C_AvrI2C.h>
const int A1A=3;
const int A1B=2;
const int up=4;
const int down=5;
int sayi=60;
int bekle = 0;
LiquidCrystal_I2C_AvrI2C Lcd(0x27,16,2);
void setup() {
// put your setup code here, to run once:
lcd.begin();
lcd.backlight();
pinMode(A1A, OUTPUT);
pinMode(A1B, OUTPUT);
pinMode(up,INPUT);
pinMode(down,INPUT);
}
void loop()
{
lcd.setCursor(1,0);
lcd.print("BPM DEGERI:");
lcd.setCursor(12,0);
lcd.print(sayi);
if(digitalRead(up)){
if(sayi < 240){
sayi = sayi + 30;
}
}
if(digitalRead(down)){
if(sayi > 60){
sayi = sayi-30;
}
}
calistir(sayi);
}
void calistir(int sayi){
bekle = ((60/sayi)*1000)/2;
digitalWrite(A1A,LOW);
digitalWrite(A1B,HIGH);
delay(bekle);

digitalWrite(A1A,HIGH);
digitalWrite(A1B,LOW);
delay(bekle);

}
 
Öncelikle butonların bağlı olduğu pinleri 10k bir dirençle gnd ye bağlaman gerekiyor ki butonlar bırakıldığında buton pini lojik 0 olabilsin. İkincisi butona basılsa veya basılmasa bile motor sayi değişkenine bağlı olarak ileri geri hareket edecek ve bu hareket bitene kadar butonlar hiçbir şekilde çalışmayacaktır. Yani sayi 240 olduğunda toplam 480ms lik bir çalışma süresi olacak ve bu sırada çalışmayacaktır ve loop başa dönüp sana birkaç ns butona basma süresi verecek ve tekrar motoru çalıştıracaktır. Muhtemelen senin sorunun budur.
 
Öncelikle butonların bağlı olduğu pinleri 10k bir dirençle gnd ye bağlaman gerekiyor ki butonlar bırakıldığında buton pini lojik 0 olabilsin. İkincisi butona basılsa veya basılmasa bile motor sayi değişkenine bağlı olarak ileri geri hareket edecek ve bu hareket bitene kadar butonlar hiçbir şekilde çalışmayacaktır. Yani sayi 240 olduğunda toplam 480ms lik bir çalışma süresi olacak ve bu sırada çalışmayacaktır ve loop başa dönüp sana birkaç ns butona basma süresi verecek ve tekrar motoru çalıştıracaktır. Muhtemelen senin sorunun budur
Öncelikle butonların bağlı olduğu pinleri 10k bir dirençle gnd ye bağlaman gerekiyor ki butonlar bırakıldığında buton pini lojik 0 olabilsin. İkincisi butona basılsa veya basılmasa bile motor sayi değişkenine bağlı olarak ileri geri hareket edecek ve bu hareket bitene kadar butonlar hiçbir şekilde çalışmayacaktır. Yani sayi 240 olduğunda toplam 480ms lik bir çalışma süresi olacak ve bu sırada çalışmayacaktır ve loop başa dönüp sana birkaç ns butona basma süresi verecek ve tekrar motoru çalıştıracaktır. Muhtemelen senin sorunun budur.
cevapladığınız için teşekkür ederim. butonları 10 k direnç ile gnd ye bağladım .ardından ilgili buton pinlerine input işlemini gerçekleştirdim. fakat hala butonlarla hiçbir şekilde değişkene müdahale edemiyorum
 
Kardeş mesajın devamında diyorum ki butonları birkaç ns kontrol ettikten sonra hemen motor çalıştırma işlemi başlıyor ve bitene kadar butonlar çalışmayacaktır. Elini butona basılı tutarsan çalıştığını göreceksin. Bunu çözmenin en kolay yolu harici kesme kullanarak buton kullanmaktır bu sayede motor çalışırken bile butonları okuyabilirsin. Diğer yolu ise delay yerine millis kullanarak her ms hem motorları hem butonları kontrol edersin. Yani anlatmak istediğim motor ve buton işlemlerinin paralel olarak yürümesi gerektiğidir.
 

Forum istatistikleri

Konular
129,835
Mesajlar
930,600
Kullanıcılar
452,663
Son üye
Yılmaz Çetiner

Yeni konular

Çevrimiçi üyeler

Şu anda çevrimiçi üye yok.
Geri
Üst