0-1 konumlu butonu tek pinle kullanmak.

Başlatan DELİMSİ, 15 Eylül 2019, 23:17:14

DELİMSİ

merhaba arkadaşlar elimde ki 0-1 konumlu butonu tek pinle kontrol etmek istiyorum.
0 konumu manuel
1 konumu otomatik olarak.
fakat tek konumda sürekli bası kaldığı için başka işlem yaptıramıyorum. bunun için nasıl bir algoritma izlemeliyim. yardımlarınız için teşekkürler.

if(input(pin_d6)==1) x=0;
   if (x==0)
   {otomatik();
   if(input(pin_a0))stop();
      }
   while(input(pin_d6)==1);x=1;
   
   if(x==1)
   {manuel();
   if(input(pin_a0))stop();
   }
   while(input(pin_d6)==0);x==0;

ziyaretci

#1
Merhaba.

Bu 1-0 switch'e birden fazla fonksiyon atamak istiyorsunuz sanırım. Hatta iki fonksiyonunuz hazır "elle, otomatik". Diyorsunuz ki bunlar bana yetmez, benim ayarım "elle" de kalsın ama aynı zamanda ben bu switch ile bir ledi açıp kapatayım.

"Elle" ve "Otomatik" ayarını temel ayar olarak baz alırsak, örneğin ilgili konum değişikliğinden itibaren 5 saniye kalırsa "Elle" veya "Otomatik" ayarı kabul edilsin. İlgili konum değişikliğinden itibaren 3saniye sonra eski konumuna geliyorsa a işlemini gerçekleştirsin.

Yani tek bir girişiniz varsa zamana bağlı fonksiyon ataması yapmalısınız.

Nasıl olabilir?
Temel ayar sınırını 10 saniye yaparsanız üsteki örneğe göre band genişliğiniz iki kat artacak.

-İlgili girişin sürekli konum değişikliğini kontrol edin.
-Konum değişikliğini algıladığınızda bir sayacı başlatın(timer ile).
-Mesela sayaç 3. saniyeye ulaştığında hala değiştiği konumda mı diye bir kontrol sağlayın.
-Eğer hala değiştiği konumdaysa demekki 4, 5, 6...,9. saniye fonksiyonlarını bekliyor olabilir.
-3. saniyedeki kontrolde eski konumuna geri geldiyse 3. saniye fonksiyonuna dallanın.
-Dallanma bittiğinda sayacı sıfırlayın.
-Eğer 10 saniye boyunca konum değişikliği yeni konumundaysa temel ayarımız "elle" ise "otomatik", "otomatik" ise "elle" olacak.

Umarım fikir vermiştir, anlamadığınız yer olduğunda tekrar yazarsınız.

Not: Ara zaman aralıklarını insan gözüyle algılmak zor olur diye vermedim(2.1sn, 3.7...sn gibi). 1 saniye bile mükemmeliyetçi bir yaklaşım olur ama örneği öyle dallandırdım.

Ek;
"while(input(pin_d6)==0);x==0;"

Bu kullanım hatalı. Doğrusu;
while(input(pin_d6)); // ilgili giriş lojik 1 olduğu sürece.
while(!input(pin_d6)); // ilgili giriş lojik 0 olduğu sürece.
x=0; // x değişkenine 0 değerini yükle. Ata.

Çift eşittir(==) operantı koşul sorgulamada kullanılır(Anlamı: Eşitse). Atama operatörü tek eşittirdir. IDE'ler buna göre tasarlanmıştır.