dokunmatik dimmer yazılım sorunu

Başlatan bbs2006, 14 Nisan 2014, 16:25:48

bbs2006

Merhaba
ben 4 kademeli dokunmatik sensör kullanarak dimmer yapmak isttiyorum. 1. yüzeye dokundugum zaman 6 voltluk dc lambanın parlaklıgı %25 artacak 2. yüzeye dokundugum zman % 50, 3. yüzeye dokundugum zman %75 4. yüzeye dokundugum zaman %100 olacak. ayrıca geriye dogru elimi ilerlettigim zaman parlaklık kademeli düşecek. yazılımını yaptım artarken sorun yok ancak azalırken 3. butona dokundugum zaman azaltmıyor. 2. defa basmam gerekiyor. aynı durum  2. tuş ve 1. tuş içinde geçerli 2. sorunum 2. butona bastım parlaklık %50 arttı. 4. butona bastıktan sonra 3. butona bastıgım zaman parlaklık %50 olcak ama o şartı programda çalışmıyor.


#include<16f628a.h>
#fuses  intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)
//#use fast_io(a)
//#use fast_io(b)
#define tus_1 Pin_a0
#define tus_2 Pin_a1
#define tus_3 pin_a2
#define tus_4 pin_a3
#define yuzde_0 0              // doluluk oranı
#define yuzde_25  625
#define yuzde_50  1250
#define yuzde_75  1875
#define yuzde_100  2500
#byte porta=5
#byte portb=6

long int pwm_duty_deger;
int tus_1_kontrol=0;
int tus_2_kontrol=0;
int tus_3_kontrol=0;
int tus_4_kontrol=0;
void main(){
   
setup_CCP1(CCP_pwm);            // CCP1 birimi devre dışı
//set_tris_a(0xff);
//set_tris_b(0x00);
//setup_comparator(NC_NC_NC_NC);
setup_timer_2(T2_DIV_BY_16,624,1);
pwm_duty_deger=yuzde_0;
set_pwm1_duty(pwm_duty_deger);
while(TRUE)
{
if(input(tus_1))                    // tus 1 e basılsıysa
{
output_high(pin_b0);

if((pwm_duty_deger>=yuzde_0)&&(pwm_duty_deger<=yuzde_25)) // pwm %25 ve %0 arasında ise
{
delay_ms(10);                      // buton arkına karşılık azcık bekle

if((tus_1_kontrol==0)&&((tus_2_kontrol==0))) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basılmadıysa lamba ışığını artır
{
tus_1_kontrol=1;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
}
else                    // tuşa ikinci kez basıldıysa ve/veya daha önce tus 2 ye basıldıysa lamba ışığını düşür
{
tus_1_kontrol=0;
tus_2_kontrol=0;
output_low(pin_b0);
pwm_duty_deger=yuzde_0;
set_pwm1_duty(pwm_duty_deger);
}
while(input(tus_1));
}
}

//2. TUŞ UYGULAMASI

if(input(tus_2)) // tus 2 e basılsıysa
{
//pwm_duty_deger=625;
output_high(pin_b1);
if((pwm_duty_deger>=yuzde_25)&&(pwm_duty_deger<=yuzde_50))     // pwm %50 ve %25 arasında ise
{
delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_2_kontrol==0)&&(tus_3_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 3 ye basılmadıysa lamba ışığını artır
{
tus_2_kontrol=1;
tus_3_kontrol=0;
tus_1_kontrol=0;
pwm_duty_deger=yuzde_50;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(250);
output_low(pin_b6);
}
else if((tus_2_kontrol==0)&&(tus_3_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 3 ye basıldıysa lamba ışığını düşür
{
tus_2_kontrol=1;
tus_3_kontrol=0;
tus_1_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
//output_high(pin_b5);
}
else // tuşa üst üste basıldıysa
{
tus_3_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b1);                    //ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
output_low(pin_b5);
}
while(input(tus_2));
}
}
// 3. TUŞA BASILDIYSA

if(input(tus_3)) // tus 3 e basılsıysa
{
output_high(pin_b2);
if((pwm_duty_deger>=yuzde_50)&&(pwm_duty_deger<=yuzde_75)) // pwm %75 ve %50 arasında ise
{
delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_3_kontrol==0)&&(tus_4_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 4 ye basılmadıysa lamba ışığını artır
{
tus_3_kontrol=1;
tus_4_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_75;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b6);
}
else if((tus_3_kontrol==0)&&(tus_4_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 4 ye basıldıysa lamba ışığını düşür
{
tus_3_kontrol=1;
tus_4_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_50;
set_pwm1_duty(pwm_duty_deger);

}

else // tuşa üst üste basıldıysa
{
tus_3_kontrol=1;
tus_4_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b2);                    //ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
//output_low(pin_b5);
////ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
}
while(input(tus_3));
}
}

// 4. TUŞA BASILDIYSA

if(input(tus_4)) // tus 4 e basılsıysa
{
output_high(pin_b4);

delay_ms(10); // buton arkına karşılık azcık bekle
if(pwm_duty_deger>=yuzde_75) // pwm %100 ve %75 arasında ise
{
if(tus_4_kontrol==0) // tuşa ilkkez basıldıysa lamba ışığını artır
{
tus_4_kontrol=1;
tus_3_kontrol=0;
pwm_duty_deger=yuzde_100;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b6);

}
else // tuşa ikinci basıldıysa lamba ışığını düşür
{
tus_4_kontrol=0;
tus_3_kontrol=0;
pwm_duty_deger=yuzde_75;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b4);

}

while(input(tus_4));
}
}
}}


şu kısımlar çalışmıyor.

else if((tus_2_kontrol==0)&&(tus_3_kontrol==1)   şart gerçekleşmiyor.   2. tuş için

else if((tus_3_kontrol==0)&&(tus_4_kontrol==1))    3. tuş için    şart gerçekleşmiyor.




xoom

#1
 500'e yakın mesajınız var. Mesajınızı [c ode] [/c ode] tagleri arasına yazsaydınız keşke.

bbs2006

#2
kodları dediğiniz şeklinde yazdım ama istenilen şekilde çıkmadı.

mesaj birleştirme:: 14 Nisan 2014, 22:05:22

    #include<16f628a.h>
#fuses  intrc,nowdt,noprotect,nowdt,noprotect
#use delay(clock=4000000)
//#use fast_io(a)
//#use fast_io(b)
#define tus_1 Pin_a0
#define tus_2 Pin_a1
#define tus_3 pin_a2
#define tus_4 pin_a3
#define yuzde_0 0              // doluluk oranı
#define yuzde_25  625
#define yuzde_50  1250
#define yuzde_75  1875
#define yuzde_100  2500
#byte porta=5
#byte portb=6
 
long int pwm_duty_deger;
int tus_1_kontrol=0;
int tus_2_kontrol=0;
int tus_3_kontrol=0;
int tus_4_kontrol=0;
void main(){
   
setup_CCP1(CCP_pwm);            // CCP1 birimi devre dışı
//set_tris_a(0xff);
//set_tris_b(0x00);
//setup_comparator(NC_NC_NC_NC);
setup_timer_2(T2_DIV_BY_16,624,1);
pwm_duty_deger=yuzde_0;
set_pwm1_duty(pwm_duty_deger);
while(TRUE)
{
if(input(tus_1))                    // tus 1 e basılsıysa 
{
output_high(pin_b0);

if((pwm_duty_deger>=yuzde_0)&&(pwm_duty_deger<=yuzde_25)) // pwm %25 ve %0 arasında ise
{
delay_ms(10);                      // buton arkına karşılık azcık bekle

if((tus_1_kontrol==0)&&((tus_2_kontrol==0))) // tuşa ilkkez basıldıysa ve daha önce tus 2 ye basılmadıysa lamba ışığını artır
{
tus_1_kontrol=1;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
}
else                    // tuşa ikinci kez basıldıysa ve/veya daha önce tus 2 ye basıldıysa lamba ışığını düşür
{ 
tus_1_kontrol=0; 
tus_2_kontrol=0;
output_low(pin_b0);
pwm_duty_deger=yuzde_0;
set_pwm1_duty(pwm_duty_deger);
}
while(input(tus_1));
}
}

//2. TUŞ UYGULAMASI

if(input(tus_2)) // tus 2 e basılsıysa 
{
//pwm_duty_deger=625;
output_high(pin_b1);
if((pwm_duty_deger>=yuzde_25)&&(pwm_duty_deger<=yuzde_50))     // pwm %50 ve %25 arasında ise
{
delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_2_kontrol==0)&&(tus_3_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 3 ye basılmadıysa lamba ışığını artır
{
tus_2_kontrol=1;
tus_3_kontrol=0;
tus_1_kontrol=0;
pwm_duty_deger=yuzde_50;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(250);
output_low(pin_b6);
}
else if((tus_2_kontrol==0)&&(tus_3_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 3 ye basıldıysa lamba ışığını düşür
{ 
tus_2_kontrol=1; 
tus_3_kontrol=0;
tus_1_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
//output_high(pin_b5);
}
else // tuşa üst üste basıldıysa 
{
tus_3_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b1);                    //ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
output_low(pin_b5);
}
while(input(tus_2));
}
}
// 3. TUŞA BASILDIYSA

if(input(tus_3)) // tus 3 e basılsıysa
{
output_high(pin_b2);
if((pwm_duty_deger>=yuzde_50)&&(pwm_duty_deger<=yuzde_75)) // pwm %75 ve %50 arasında ise
{
delay_ms(10); // buton arkına karşılık azcık bekle
if((tus_3_kontrol==0)&&(tus_4_kontrol==0)) // tuşa ilkkez basıldıysa ve daha önce tus 4 ye basılmadıysa lamba ışığını artır
{
tus_3_kontrol=1;
tus_4_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_75; 
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b6);
}
else if((tus_3_kontrol==0)&&(tus_4_kontrol==1)) // tuşa ilkkez basıldıysa ve daha önce tus 4 ye basıldıysa lamba ışığını düşür
{ 
tus_3_kontrol=1; 
tus_4_kontrol=0;
tus_2_kontrol=0;
pwm_duty_deger=yuzde_50; 
set_pwm1_duty(pwm_duty_deger);

}

else // tuşa üst üste basıldıysa 
{
tus_3_kontrol=1;
tus_4_kontrol=0;
pwm_duty_deger=yuzde_25;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b2);                    //ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
//output_low(pin_b5);
////ne yapmasını istersen onu yaz değişkenleri vs. göz önünde bulundurarak.
}
while(input(tus_3));
}
}

// 4. TUŞA BASILDIYSA

if(input(tus_4)) // tus 4 e basılsıysa 
{
output_high(pin_b4);

delay_ms(10); // buton arkına karşılık azcık bekle
if(pwm_duty_deger>=yuzde_75) // pwm %100 ve %75 arasında ise
{
if(tus_4_kontrol==0) // tuşa ilkkez basıldıysa lamba ışığını artır
{
tus_4_kontrol=1;
tus_3_kontrol=0;
pwm_duty_deger=yuzde_100; 
set_pwm1_duty(pwm_duty_deger);
output_high(pin_b6);
delay_ms(200);
output_low(pin_b6);

}
else // tuşa ikinci basıldıysa lamba ışığını düşür
{ 
tus_4_kontrol=0; 
tus_3_kontrol=0;
pwm_duty_deger=yuzde_75;
set_pwm1_duty(pwm_duty_deger);
output_low(pin_b4);

}

while(input(tus_4));
}
}
}}