menü ekleyemiyorum

Başlatan exsenim, 23 Eylül 2017, 18:26:44

exsenim

bu araya baska bi menü koymak istiyorum kalibrasyon yapabilir miyim bu devreyi

AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=9 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=8
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 theN
GOSUB BIP
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      "
LCDOUT $FE,$94,"                    "     
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"SICAKLIK DENGELEYiCi"
LCDOUT $FE,$94,"     FAN AYARI      "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF
CASE 7
lcdout $fe,$c0,"    MENUDEN CIKIS   "
LCDOUT $FE,$94,"                    "   
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN

MANUEL:
GOSUB TEMIZLE
MANU:
lcdout $fe,$80,"MOTORU CALISTIRMAK "
LCDOUT $FE,$C0,"iCiN YUKLARIYA     "
LCDOUT $FE,$94,"BASINIZ...          "
       IF MENU=1 then
      GOTO AYAR_MENUSU 
       ENDIF         
       
        IF YUKARI=1 THEN
         lcdout $fe,$D4,"MOTOR CALISIYOR  "
        HIGH ROLE3
        ELSE
        lcdout $fe,$D4,"MOTOR KAPALI    "
        LOW ROLE3
        ENDIF
       
GOTO MANU

GUNAYARI:
       WHILE MENU=1:WEND
       GOSUB TEMIZLE
       READ $07,GN
GUNA:     
     LCDOUT $FE,$80,"GUNU AYARLA" 
     lcdout $FE,$C0,"GUN:",DEC2 GN
     IF MENU=1 THEN
      WRITE $07,GN:PAUSE 2
      GOTO AYAR_MENUSU
      ENDIF
     
        IF YUKARI=1 THEN
        GN=GN+1
        IF GN=31 THEN GN=1
        WHILE YUKARI=1:WEND
        ENDIF
       
        IF ASAGI=1 THEN
        GN=GN-1
        IF GN=0 THEN GN=30
        WHILE ASAGI=1:WEND
        ENDIF
             
     GOTO GUNA
     
FANKONTROL:
GOSUB TEMIZLE:
FANKONT:
       lcdout $fe,$80,"FAN DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
       IF MENU=1 THEN
           WRITE $13,AYR:PAUSE 2
           GOTO AYAR_MENUSU
       ENDIF
           IF YUKARI=1 THEN AYR=1
           IF ASAGI=1 THEN AYR=0
           
           SELECT CASE AYR
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
       END SELECT   
GOTO FANKONT
     
             
''''''''''''''''''''''''''''''''''''''''         
MOT_AYAR:
        WHILE MENU=1:WEND
        GOSUB TEMIZLE
        READ $06,UPC
MOTOR_AYAR:
       lcdout $fe,$80,"MOTOR DURUMUNU"
       LCDOUT $FE,$C0,"SECINIZ..."
       lcdout $FE,$94,"  ACIK"
       LCDOUT $FE,$D4,"  KAPALI"
           IF MENU=1 THEN
           WRITE $06,UPC:PAUSE 2
           GOTO M_ZAMANI
           ENDIF
           IF YUKARI=1 THEN UPC=1
           IF ASAGI=1 THEN UPC=0
           
           SELECT CASE UPC
           CASE 0
           LCDOUT $FE,$D4,3
           CASE 1
           LCDOUT $FE,$94,3
           END SELECT         
        GOTO MOTOR_AYAR         
M_CALISMA:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $09,DUR
MOTO_CALISMA:
           IF MENU=1 THEN
           WRITE $09,DUR:PAUSE 2
           GOTO AYAR_MENUSU 
           ENDIF
       lcdout $fe,$C0,"MOTOR CALISMA SURESi "
       lcdout $FE,$94,"SURE :",DEC2 DUR," SANIYE"
       
           IF YUKARI=1 THEN
           DUR=DUR+1
           WHILE YUKARI=1:WEND
           ENDIF   
           IF DUR=60 THEN DUR=0
           IF ASAGI=1 THEN
           DUR=DUR-1
           WHILE ASAGI=1:WEND
           ENDIF
           IF DUR=255 THEN DUR=59
         GOTO MOTO_CALISMA                         
M_ZAMANI:
        GOSUB TEMIZLE
        WHILE MENU=1:WEND
        READ $10,ZAM
MOTO_ZAMANI:
        IF ZAM=255 THEN ZAM=1
        IF YUKARI=1 THEN
        ZAM=ZAM+1
        WHILE YUKARI=1:WEND
        ENDIF
        IF ZAM=5 THEN ZAM=4
        IF ASAGI=1 THEN
        ZAM=ZAM-1
        WHILE ASAGI=1:WEND
        ENDIF
        IF ZAM=0 THEN ZAM=1       
        IF MENU=1 THEN
        WRITE $10,ZAM:PAUSE 2
        GOTO M_CALISMA
        ENDIF

        lcdout $fe,$C0,"MOTORU ",DEC1 ZAM," SAATTE BiR"
        lcdout $FE,$94,"CEVRiLSiN.."
GOTO MOTO_ZAMANI
                                                                               
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   
AYARLANDI:
           IF MENU=1 then AYARLANDI
       lcdout $fe,1
       LCDOUT $FE,$C0,"AYARLAR KAYDEDiLDi.."
       GOSUB BIPBIP
       AYAR=1
       SYC=0
       PAUSE 800
       
        GOSUB TEMIZLE
        goto BASLANGIC       
TEMIZLE:
        lcdout $fe,1
RETURN       

ete

Koca programı koymuşsun buraya ve "bu araya başka bir menü koymak istiyorum" demişsin o ara dediğin yer neresi?
Kalibrasyondan neyi kast ediyorsun. Söylediklerinden bir anlam çıkartamadım maalesef.
Ete

exsenim

#2
Hocam şimdi bende bilgi sıfır oldğu için anlatım güçlüğü çekiyorum artık biraz baş ağrıtacağım :D
neyse konuya geleyim şimdi burda 0dan 7 ye kadar case var ve ben case 7 den önce bi menü daha oluşturmak istiyorum
orda yazanların aynısını yaptım ama derleyici hata verdi
koyduğum menü kalibraasyon menüsü olsun istiyorum bu kuluçka kontrol devresi bundaki ısı degerlerini menü üzerinden kalibre edebilir miyiz

ete

Bu sistemde akıllıca olan başa değil sonuncu sıraya bir ek yapmaktır.
Önce Case 7 ve altındakileri CASE 8 olarak değiştir. Sonra Case 7 olarak ilave menüyü ekle.
Kalibrasyon menüsünde neyi kalibre edeceksen edebilirsin bu şekilde.
Kalibrasyondan neyi kast ediyorsun onuda anlamadım gerçi.

Ete

exsenim

hocam case 8 yaptım olmadı simdi kalibrasyon yaparken başka bi termometre ile bundaki sensörü aynı yere koyup sıcaklığı karşılaştıracağım sonra da aradaki farkı bundaki menüye girerek ayarlayacağım ve ikisi aynı dereceyi gösterecek youtube de kuluçka makinesi kalibrasyon örneklerindeki gibi.

AYAR_MENUSU:
GOSUB BIP
WHILE MENU=1:WEND
GOSUB TEMIZLE
SYC=0
AYARLAR:
IF YUKARI=1 THEN
GOSUB BIP
WHILE YUKARI=1:WEND
SYC=SYC+1
  IF SYC=9 THEN SYC=0
ENDIF

IF ASAGI=1 THEN
GOSUB BIP
WHILE ASAGI=1:WEND
SYC=SYC-1
  IF SYC=255 THEN SYC=8
ENDIF
GOSUB DURUM
GOTO AYARLAR

DURUM:
SELECT CASE SYC
CASE 0
lcdout $fe,$c0,"  ISITICI AYARLARI  "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO TERM_KONTROL
ENDIF
CASE 1
lcdout $fe,$c0,"    NEM AYALARI     "
LCDOUT $FE,$94,"                    "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO NEM_KONTROL
ENDIF
CASE 2
lcdout $fe,$c0,"   CEViRiCi MOTOR   "
LCDOUT $FE,$94,"       AYARI       "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO MOT_AYAR
ENDIF
CASE 3
lcdout $fe,$c0,"   SAAT-TARiH-GUN   "
LCDOUT $FE,$94,"        AYARI       "   
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO ZAMANAYARI
ENDIF
CASE 4
lcdout $fe,$C0,"   MANUEL OLARAK    "
lcdout $fe,$94,"   MOTORU CEVIRME   "
IF MENU=1 theN
GOSUB BIP
WHILE MENU=1:WEND
GOTO MANUEL
ENDIF
CASE 5
lcdout $fe,$c0,"     GUN AYARI      "
LCDOUT $FE,$94,"                    "     
IF MENU=1 then
GOSUB BIP
WHILE MENU=1:WEND
GOTO GUNAYARI
ENDIF
CASE 6
lcdout $fe,$c0,"SICAKLIK DENGELEYiCi"
LCDOUT $FE,$94,"     FAN AYARI      "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF
CASE 7
lcdout $fe,$c0,"KALIBRASYON"
LCDOUT $FE,$94,"     AYAR MENUSU      "
IF MENU=1 then
WHILE MENU=1:WEND
GOSUB BIP
GOTO FANKONTROL
ENDIF

CASE 8
lcdout $fe,$c0,"    MENUDEN CIKIS   "
LCDOUT $FE,$94,"                    "   
IF MENU=1 THEN AYARLANDI
END SELECT
RETURN

ete

Neresi olmamış anlamadım. Anlamadım derken yaptığın değişikliğe baktım bana mantıklı geldi.
Sadece kalibrasyon için Fankontrol isimli etikete yollamışsın öyle bir etiket varmı yokmu bilemiyorum.
Ancak, programda sevmediğim bir mantık hatası var. Hata şöyle;
Menü seçeneklerini belirleyen SYC değişkenini YUKARI ve ASAGI isimli butonlarla ayarladıktan sonra ilgili menü seçeneğinin ekrana gelmesi için programı GOSUB DURUM komutu ile Select Case seçeneklerinin olduğu DURUM etiketine yolluyorsun.
Burada ilgili (SYC değerine bağlı olarak) menü ekrana geliyor ve şayet MENU tusşuna basarsan program o seçeneğe ait etikete GOTO ile gidiyor. Bu noktaya dikkat etmek gerek. GOSUB ile gidilen bir yerden GOTO ile çıkıyorsun. Peki dedim belki gidilen yerden RETURN ile dönülüyordur. Örnek olarak FANKONTROL kısmına baktım ki orada iş bittikten sonra GOTO AYAR_MENUSU ile yeniden ayar menüsüne goto iile dönülmekte. Bu program açısından ölümcül bir hata. Zira bir kaç gidiş gelişten sonra stack taşması meyadana gelecek ve program sonunda kitlenecektir. Bu kısımda algoritma değişikliği gerekir.
Temel kriter şudur. GOSUB ile gidilen bir yerden Mutlaka RETURN ile dönülmelidir. GOSUB ile gittiğin yerden Goto ile başka bir etikete geçebilirsin. Ancak oradan geriye mutlaka RETURN ile dönmen gerekir. Bu husus çok önemlidir dikkat etmek gerekir aksi taktirde burada olduğu gibi ipin ucunu kaçırırsın.

Kalibrasyon gerekli bir şeymidir bilemiyorum. Zira sensör bozuk ise zaten değiştirilmesi gerekir.  Değil ise doğru ölçüm yapması gerekir. Bazı durumlarda okunan sensör değerinin normal termometre sıcaklığına oranla 3-5 derece fazla gösterdiği söyleniyor. Bunun başlıca sebebi çok sık okuma yaptırılarak sensörün ısınmasına sebep vermektir. Genelde okuma sayısı düşürülerek sensör kendi sıcaklığı stabil hale getirilebilir ve böylece okuma hataları giderilebilir. İllaki bir kalbrasyon gerekiyor ise farklar tesbit edilerek menüdeki kalibrasyon seçeneğinde bu farklar okunan sıcaklıktan çıkartılır veya okumada eksiklikler var ise eklenir. Tabiiki kalibrasyon değerleri kalibrasyon seçeneğinde belirlenip bir kalbre değişkenine verilmelidir. Bunun eklenip eklenmeyeceğine ikinci bir bit değişkeni ile karar verilmeli buna ISARET denilebilir ve ISARET=0 ise çıkarma yapılacağı, ISARET=1 ise ekleme yapılacağı anlaşılmalıdır. Ekleme yada çıkartılmalar ana program bölümünde sıcaklık okumasından hemen sonra yapılmalıdır.
Orada ISI şeklinde bir değişkene okunduğunu var sayarsak;
IF ISARET=0 then
   ISI=ISI-KALIBRE
ELSE
   ISI=ISI+KALIBRE
ENDIF şeklinde bir uygulama ile kalibrasyon yapılabilir.

Ete

exsenim

Hocam o zaman ben bunu sıfırdan yapıyorum adım adım gidelim madem hem benim anlamam kolay olur

Powered by EzPortal