Arduino yöntem sorunu

Başlatan Sozuak, 24 Ekim 2019, 22:04:33

Sozuak

Arduino da yapılmak istenen  aşağıdaki şekilde bir durum var. 3 adet sıralı anahtarımız var.

Lo   1. switch
mid  2. switch
Hi   3. switch

Bunlar 1 yada 0 olabiliyor. Başlangıçta hepsi herhangi bir konumda olsun.

LLL-HLL-HHL ve HHH durumlarında sorun yok ama istenen HHH den HLL ye tersine çalışırken farklı bir iş yaptırmak.

Yani bir pini 3 adet giriş konumlarına göre

              LLL iken H
              HLL iken H
              HHL iken H
              HHH iken L

yaptıktan sonra tersine işletirken HHH den HHL boyunca ve HLL olana kadar L yapmak istiyorum.

Bunu nasıl yaparım?





gogge

#1
Eğer bahsettiğiniz durumlar sabitse, herhangi bir algoritmaya bile gerek kalmadan çıkışları direk high - low yaparak yapabilirsiniz. Anahtar dediğiniz pinlerin çıkış olduğunu varsayarak, basitçe aşağıdaki gibi bir kod işinizi görür. 

digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 0);

delay(1000);

digitalWrite(4, 0);
digitalWrite(5, 0);
digitalWrite(6, 1);

delay(1000);

digitalWrite(4, 0);
digitalWrite(5, 1);
digitalWrite(6, 1);

Sozuak

#2
Teşekkürler, anahtarlar giriş olarak sıralı çalışıyor yani LHL olamaz diye söyleyeyim. Çıkış olarak 3 anahtarın  durumuna göre 2 çıkışı değiştirmek gerekiyor ama ileri yöndeki sıralı değişim ile geri yöndeki sıralı değişime  göre her iki yön farklı çıkış olacak

Yani bir su örneği ile anlatayım.  Depomuz var. Altta ortada ve üstte 3 seviye switchi var.
en üste kadar çıkış H olsun vana açılsın, su dolsun. En üste gelene kadar çıkış H, 3. sw ye gelince çıkış L olsun ama boşalırken ortadaki sw L olunca dolmaya başlasın.


Su dolarken sorun yok ama su boşalınca sürekli  orta anahtara gelmeden doluyor duruyor bu şekilde çıkış olmasın. Su  ortadaki anahtara kadar boşalsın. Yani histerezis vermek gerekiyor.

Murat Mert

S.A.
Sn. @Sozuak şimdi girişlerim 3 ad. bunları binary giriş gibi düşün yani 0-7 toplam 8 ayrı seçeneğin var

char swch=0;
sbit at sw1 GPIOA_IDR.B0;//giriş
sbit at sw2 GPIOA_IDR.B1;//giriş
sbit at sw3 GPIOA_IDR.B3;//giriş
sbit at led GPIOA_ODR.B4;//çıkış



main()
{
..........
..........
	while(1)
	{
		swch.B0=sw1;
		swch.B1=sw2;
		swch.B2=sw3;
		
		switch(swch)
		{
			case 0:.....
			case 1:.....
			case 2:.....
			case 3:.....
			case 4:.....
			case 5:.....
			case 6:.....
			case 7:.....
		
		}
	
	
	}


}
mert07

RaMu

Butonların önceki durumuda bir değişkende tutulmalı.
Switch case in HHL ve HLL durumlarında
önceki durumuda kontrol etmek lazım,
case HHL işlenirken eğer önceki durum HHH ise çıkış LOW da tutulacak,
case HLL işlenirken eğer önceki durum HHL ise çıkış LOW da tutulacak.

Daha optimize şekildede yazılır muhtemelen ama en basit yöntem bu olur.

Önlem olarak:
Ayrıca geçersiz önceki ve veya sonraki durumlar şeklinde kontrollerde eklenebilir
mesela HHH den direk LLL ye geçmiş, bu olamaz niye böyle oldu denebilir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mehmet

sec = (digitalRead(sw3) * 4) + (digitalRead(sw2) * 2) + (digitalRead(sw1) * 1);
switch(sec):
{
   case 0:
       ....
}
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Sozuak

Teşekkür ederim bu şekilde bir yapı oluşturup denemelere başlıyorum.