Jalv2 ile F1 Çakar Devresi 13 Modlu

Başlatan ByTEK, 23 Temmuz 2017, 23:05:24

ByTEK

Merhaba Arkadaşlar,

Jalv2 ile kodlarını yazdığım 12F629 kullandığım bu uygulama LED stop lambaları için bir modüldür. özellikle arkadan gelen sürücülerin dikkatini çekmek için bence gerekli olan bir uygulamadır. 12 tane farklı mod ve 1 tane özel modu vardır. özel moda alındığında her frene basılınca farklı animasyon çalışır.





Kodlar

-- ------------------------------------------------------
-- Modlu Stop Çakar Projesi (LED)
-- 23.07.2017 - Tekirdağ
-- Compiler : jal jalv24q6 (compiled Oct 25 2016)
-- Sercan TEK - www.sercanca.com
-- ------------------------------------------------------
include islemci_ayarlar

led = off                        -- Led Pini Kapalı

var byte mode                    -- hafızada kayıtlı animasyon değişkeni
var byte aktif_mod               -- oynatılacak animasyon
var bit temp_mode = false        -- Animasyon Değişim Bayrağı
var byte ikaz = 2                -- ikaz efekti için
var byte x                       -- animasyon temp değişken

const mode_adet = 13             -- Toplam Animasyon Adeti
const mod13_start = 12           -- mod13 başlangıç
-- ------------------------------------------------------
--  12f629 Dahili Eepromdan byte Okur
-- ------------------------------------------------------
function Data_oku(byte in hucre) return byte is
   EEADR = hucre
   EECON1_RD = TRUE
   return EEDATA
end function
-- ------------------------------------------------------
--  12f629 Dahili Eeproma Byte Yazar
-- ------------------------------------------------------
procedure Data_yaz(byte in hucre,byte in bilgi) is
   var bit temp
   EEADR = hucre
   EEDATA = bilgi
   EECON1_WREN = TRUE
   temp = INTCON_GIE
   INTCON_GIE = FALSE
   EECON2    = 0x55
   EECON2    = 0xAA
   EECON1_WR = TRUE
   INTCON_GIE = temp
   EECON1_WREN = FALSE
end procedure
-- ------------------------------------------------------
--  Mod butonu kontrol eder
-- ------------------------------------------------------
procedure buton_kontrol is
if buton == true then     -- butona basıldı ise
  led = off
   _usec_delay(1000_000)
  mode = ((mode % mode_adet) + 1)
  data_yaz(0,mode)
     if mode == 13 then   -- mode 13 seçilirse
      ikaz = 1            -- 1 kere yanıp söner ikaz verir
      aktif_mod = mod13_start
      data_yaz(1,aktif_mod)
     else
       aktif_mod = mode
     end if
    if mode == 1 then     -- mode 1 e geri döndü ise
      ikaz = 6            -- 6 kere yanıp söner ikaz verir
     end if
   for ikaz loop          -- normalde 2 kere yanıp söner ve ikaz verir.
    led = on   _usec_Delay(50_000)
    led = off  _usec_Delay(50_000)
   end loop
    if ikaz != 2 then
      ikaz = 2
    end if
  _usec_Delay(750_000)
  temp_mode = true
end if
end procedure
-- ------------------------------------------------------
-- Bekleme Alt Programı
-- ikinci parametre true verilirse Süre = deger x 1000ms
-- ikinci parametre false verilirse Süre = deger x 10us
-- ------------------------------------------------------
procedure bekle(word in deger,bit in ms) is
 if deger > 0 then
  for deger loop
   if ms then
    _usec_delay(1000)
   else
    _usec_Delay(10)
   end if
   buton_kontrol
  end loop
 end if
end procedure

-- ------------------------------------------------------
--  Animasyon Alt Programı, x1,x2,adet değişkenleri ile
--  Farklı animasyonlar elde edilebilir.
-- ------------------------------------------------------
procedure animasyon(word in x1,word in x2,byte in adet) is
  for adet loop

   if temp_mode then
    exit loop
   end if

   if x1 > 0 then led = on  bekle(x1,true) end if
   if x2 > 0 then led = off bekle(x2,true) end if
   
   buton_kontrol
  end loop
end procedure
-- ------------------------------------------------------
-- hSıradaki anmiasyonu oynatır
-- ------------------------------------------------------
procedure animasyon_oynat is
case aktif_mod of
-- ------------------------------------------------------
-- Mod 1
-- hızlı yanıp sönmeye başlar yavaşlar ve 20sn yanık kalır
-- ------------------------------------------------------
1 : block
    x = 0
      for 5 loop
        x = x + 15
        animasyon(x,x,2)
         if temp_mode then
          exit loop
         end if
       end loop
      animasyon(1000,0,20)
    end block
-- ------------------------------------------------------
--  Mod 2
--  Hızlı Hızlı Yanıp Söner
-- ------------------------------------------------------
2 : block
     animasyon(180,190,1)
    end block
-- ------------------------------------------------------
--  Mod 3
--  4 Kez Yanıp Söner ve 1 sn Yanık Kalıp Başa DÖner
-- ------------------------------------------------------
3 : block
     animasyon(100,100,4)
     animasyon(1000,0,1)
    end block
-- ------------------------------------------------------
--  Mod 4
--  3 Kez Yanıp Söner ve 1sn Sönük Kalıp Başa Döner
-- ------------------------------------------------------
4 : block
     animasyon(150,150,3)
     animasyon(0,1000,1)
    end block
-- ------------------------------------------------------
--  Mod 5
--  Düz yanar ve kısılarak söner
-- ------------------------------------------------------
5 : block
      for 255 using x loop
       led = on
       bekle(255-x,false)
       led = off
       bekle(x,false)
        if temp_mode then
          exit loop
        end if
      end loop
     bekle(100,true)
    end block
-- ------------------------------------------------------
-- Mod 6
-- Hızlanarak yanıp Söner
-- ------------------------------------------------------
6 : block
    x = 160
      for 8 loop
       x = x - 20
       animasyon(x,x,1)
         if temp_mode then
           exit loop
         end if
      end loop
     animasyon(0,500,1)
    end block
-- ------------------------------------------------------
--  Mod 7
--  5 kere yanıp söner ve 30 sn sabit yanar
-- ------------------------------------------------------
7 : block
     animasyon(120,120,5)
     animasyon(1000,0,30)
    end block
-- ------------------------------------------------------
-- Mod 8
-- 2 Farklı hızda yanıp söner
-- ------------------------------------------------------
8 : block
     for 2 loop
      animasyon(200,200,2)
      animasyon(50,50,2)
       if temp_mode then
         exit loop
       end if
     end loop
    end block
-- ------------------------------------------------------
-- Mod 9
-- 2 kez yanıp söner 2 kez söner
-- ------------------------------------------------------
9 : block
     animasyon(200,200,2)
     animasyon(0,200,2)
    end block
-- ------------------------------------------------------
-- Mod 10
-- 3 kez yanıp söner ve 5 sn sabit yanar
-- ------------------------------------------------------
10: block
     animasyon(100,100,3)
     animasyon(300,300,3)
     animasyon(500,500,3)
     animasyon(1000,0,5)
    end block
-- ------------------------------------------------------
-- Mod 11
-- 4 kez yanıp söner ve 6 sn sabit yanar
-- ------------------------------------------------------
11: block
     animasyon(130,130,4)
     animasyon(1000,0,6)
    end block
-- ------------------------------------------------------
--  Mod 12
--  Sürekli Yanık Kal
-- ------------------------------------------------------
12: block
     led = on
    end block

-- ------------------------------------------------------
--  Mod 13
--  her enerji verildiğinde sırasıyla tüm modları gezer
-- ------------------------------------------------------

end case

  if temp_mode then        -- mod değişimini algılar.
   temp_mode = false
  end if

end procedure

-- ------------------------------------------------------
-- mode 13 seçildi ise hepsini sırasıyla gezer
-- ------------------------------------------------------
mode = Data_oku(0)         -- Hafızadaki animasyon modunu oku
aktif_mod = Data_oku(1)    -- Hafızadaki animasyon sırası

if mode == 13 then         -- sıralı mod seçildi ise
 if aktif_mod == 0 then    -- ilk oynatma
   data_yaz(1,mod13_start) -- aktif mod 11 olsun.
   aktif_mod = mod13_start
  else                     -- ilk oynatma değilse sıradakine geç
    aktif_mod = ((aktif_mod % 12) + 1)
    data_yaz(1,aktif_mod)  -- hafızaya yaz
  end if
else                       -- normal mod devam eder
 aktif_mod = mode
end if

-- ------------------------------------------------------
--   Ana Döngü
-- ------------------------------------------------------
forever loop
 buton_kontrol
 animasyon_oynat
end loop


https://www.youtube.com/watch?v=pOXFY0saIXQ

Kaynak : http://www.sercanca.com/f1-led-stop-cakar-devresi-yapimi/