case komutu

Başlatan scorpions_64, 08 Mart 2016, 13:41:26

scorpions_64

Arkadaşlar bir konuda yardımınıza ihtiyacım var, basit bir devre var, tek buton ve case komutu ile animasyonları değiştiriyorum buraya kadar güzel, lakin 1 adet bir buton koyup değiştirdiğim animasyonları yeni koyacağım butona basınca nasıl çalıştırırım? yani devrede 2 adet buton olucak 1. buton anismasyon değiştirme 2. buton ise hangi animasyonda ise 2. butona bastığımızda  çalışması.   mesela 2. butonu buton1 ile gpio.2 bitine koydum.

Dim buton1 As GPIO.2
Dim BUTON As GPIO.3
Dim SAY As Byte         

Dim led As GPIO.4
Dim led2As GPIO.5

SAY=0
BASLA:

If BUTON=1 Then
BUTONTEST:
If BUTON=1 Then GoTo BUTONTEST
SAY=SAY+1
EndIf

Select SAY
Case 1

High led
DelayMS 50
Low led
DelayMS 50

High led
DelayMS 50
Low led
DelayMS 50

High led1
DelayMS 50
Low led1
DelayMS 50

Case 2

High led1
DelayMS 50
Low led1
DelayMS 50

High led
DelayMS 100
Low led
DelayMS 100

SAY=0
EndSelect
GoTo BASLA
End


ete

Bu çalışma için bir mantık kurmak gerekir ise, BASLA etiketi ile birde GOTO BASLA komutu yaratmamız gerekecek.
Bu ikisi arasına yazacağımız kodlardan birisi Buton1'e basılmışmı onu kontrol edecek ve animasyonu değiştiren SAY değişken değerini artıracak. Maksimuma gelince yeniden en başa alacak.
İkincisi ise animasyonu başlatacak olan buton kontrolünü yani Buton2 ye basılmışmı ona bakacak.
Programı söz ile yazacak olursak ki buna senaryo deniyor şöyle olmalı;
BASLA:
- Buton1'e basıldımı
  Basıldı ise SAY değerini bir artır.
  Maksimum değer aşılmış ise SAY değerini sıfırla
- Buton2 ye basıldımı
  basıldı ise bırakılıncaya kadar bekle
  Sonra program Select Case komutuna atlasın.
- Goto BASLA
Şimdi bunu program koduna dönüştürelim.
IF BUTON1=0 THEN
  SAY=SAY+1
  IF SAY=3 then SAY=0
ENDIF

IF BUTON2=0 THEN
  WHILE BUTON2=0:WEND
  PAUSE 50
  GOTO ANIMASYON
ENDIF

GOTO BASLA

ANIMASYON:

Animasyon etiketi altında SELECT CASE SAY komutu yer almalıdır.
Sen yazdığın kod da animasyon seçme kısmı sonunda SAY=0 yazmışsın bu yanlış bence. Onu oradan çıkart.
SAY=0 ise ki program bu değer ile açılacak program hiç bir animasyon çalıştırmayacaktır. SAY değeri orada sıfırlanmamalı değeri ne ise o değerde beklemeli ben çalıştır butonuna bastığım zaman da seçili değere göre ilgili animasyonu çalıştırmalıdır.

Ete

scorpions_64

#2
Hocam öncelikle çok teşekkür ederim. sizin dediğiniz gibi bir mantık oluşturdum kafamda lakin bunu koda dökmek zordu. yani kendim için...

Dim buton1 As GPIO.2
Dim BUTON As GPIO.3
Dim SAY As Byte         

Dim led As GPIO.4
Dim led2As GPIO.5

BASLA:
IF BUTON=0 THEN
  SAY=SAY+1
  IF SAY=3 then SAY=0
ENDIF

IF buton1=0 THEN
  WHILE buton1=0:WEND
  PAUSE 50
  GOTO ANIMASYON
ENDIF

GOTO BASLA

ANIMASYON:

Select case SAY

Case 1

High led
DelayMS 50
Low led
DelayMS 50

High led
DelayMS 50
Low led
DelayMS 50

High led1
DelayMS 50
Low led1
DelayMS 50

Case 2

High led1
DelayMS 50
Low led1
DelayMS 50

High led
DelayMS 100
Low led
DelayMS 100

EndSelect
GoTo BASLA
End



yanlışım varmı hocam?

ete

Yanlış yokda eksikler var. Programın başında Buton pinleri giriş olarak ayarlanmalı diğerleri çıkış olmalı. Varsa komparatör iptal edilmeli. Varsa analog pinler digital yapılmalı. Sigorta ayarları ilave edilmeli.

Ayrıca BUTON basıldığında hızlı saymasın diye bırakılmasıda kontrol altına alınsa iyi olur. Şöyle;
IF BUTON=0 THEN
  SAY=SAY+1
  IF SAY=3 then SAY=0
  while BUTON=0:WEND
  PAUSE 50
ENDIF


Ete

scorpions_64

hocam sigorta ayarları falan mevcut, zaten devrem çalışıyor. kodu kopyalarken kalabalık olmasın diye sigorta ayarlarını falan kopyalamadım, sadece takıldığım nokta 2. buton idi onuda sayenizde çözmüş olduk. çok  teşekkürler

Powered by EzPortal