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.
(http://www.sercanca.com/wp-content/uploads/2017/07/modlu_cakar_devre.png)
(http://www.sercanca.com/wp-content/uploads/2017/07/Devremiz.png)
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/