Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Diğer => Konuyu başlatan: Sozuak - 25 Ekim 2019, 01:04:33

Başlık: Arduino yöntem sorunu
Gönderen: Sozuak - 25 Ekim 2019, 01:04:33
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?




Başlık: Ynt: Arduino yöntem sorunu
Gönderen: gogge - 25 Ekim 2019, 01:20:27
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);
Başlık: Ynt: Arduino yöntem sorunu
Gönderen: Sozuak - 25 Ekim 2019, 01:35:19
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.
Başlık: Ynt: Arduino yöntem sorunu
Gönderen: Murat Mert - 25 Ekim 2019, 13:16:39
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:.....
	
	

	
	
}
	

	

	
}


}
Başlık: Ynt: Arduino yöntem sorunu
Gönderen: RaMu - 25 Ekim 2019, 14:28:53
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.
Başlık: Ynt: Arduino yöntem sorunu
Gönderen: mehmet - 25 Ekim 2019, 18:51:20
sec = (digitalRead(sw3) * 4) + (digitalRead(sw2) * 2) + (digitalRead(sw1) * 1);
switch(
sec):
{
   case 
0:
       ....
}
Başlık: Ynt: Arduino yöntem sorunu
Gönderen: Sozuak - 25 Ekim 2019, 21:57:43
Teşekkür ederim bu şekilde bir yapı oluşturup denemelere başlıyorum.