sw-case yapısı çalışmıyor

Başlatan mustan79, 26 Şubat 2015, 02:05:45

mustan79

selam arkadaşlar,

devrede sw-case yapısıyla sensörden gelen verileri kontrol ederek farklı ledleri yakmak istiyorum ama bir türlü olmuyor.
//State Machine States
#define NO              0
#define start           1
#define mars1           2
#define mars2           3
#define hazir           4
#define guzel           5

 unsigned int st_count=0;
 unsigned char st_stu;
 
void main()
{
//   set_tris_d(0x00);
//   set_tris_b(0x00);
   output_high(pin_d0);
   adxl345_init();
   
   while(TRUE)
   {
      st_state();
   }
}
 
 void st_state(void)
{
  st_stu=NO;
  m:
  display_show();
  switch (st_stu)
  {
   case NO:
 //     if (y > 200 &&  x>117)
      if(220>y>200)
      { 
      output_high(pin_d3);
      st_stu = start ;
      goto m;
      }
      break;
   case start:
 //     if (y < 127 && x>65)
       if (25>y>12 )
       {
        output_low(pin_d3);
        output_high(pin_d1);
        st_stu = mars1;
        goto m;
       }
      break;  
   case mars1:
      if ( 65>y>50)
      {
       output_low(pin_d1);
       output_high(pin_b6);
       st_stu = mars2;
       goto m;
      }
     break;    
  case mars2:
      if ( 97>=y>=80)
      {
       output_low(pin_b6);
       output_high(pin_b5);
       st_stu = hazir;
       goto m;
      }
  case hazir:
      if ( y<=30)
      { 
       output_high(pin_b7);
       st_stu = guzel ;
       goto m;
      }
     break;
  case guzel:
      st_count++;
      st_stu = NO;
      i=1;
    break;  
  } 
}


acaba hata neresindedir.

mehmet

Kodların tamamı burada mı? "y" değişkeni nereden değer alıyor?
Fonksiyonların kullanıldığı "C"  içerisinde neden "goto" kullanma
ihtiyacı duyuyorsunuz?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

sadogan

if(220>y>200) bu kullanımı ccs c desteklemiyor olabilir
if((220>y)&&(y>200)) bu şekil daha doğru


Recep METE

Karman çorman olmuş sanki. Kodların tamamını ve isis şemasını yüklersen senin için uğraşırım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

ziyaretci

Ek olarak, alt programları void main() fonksiyonunun üstünde olması gerekir.

mustan79

öncelikle cevaplarınız için teşekkürler

kodların tamamı burası değil. kullandığım sensör ivmeölçer, "y" değeride display_show() ile ivmeölçerden elde ediyorum. goto kullanmadan çalışmamıştı. kurgu olarak şartlar sırasıyla kontrol edilip ona görede ledler yanması. bu amaçla goto kullanmıştım.

if komutunun içeriğini dediğiniz gibi deneyeceğim. çalışmamasının sebebi olarak haklı olabilirsiniz.

ivmeölçer devresi olduğu için isis çizimi yok hocam, direk devre üzerinde deniyorum.

fonksiyonları main komutunun üst tarafına alıp deneyeceğim.



mahmut_kmrs

4 farklı yerde if komutunun kullanımı hatalı böyle çalışmaz if komutunun kullanımna bak....if(x>=a && x<=b) gibi kullanılır.yoksa çalışmaz...kolay gelsin

mustan79

arkadaşlar dediğiniz gibi if komutunun içeriğini yanlış kullanıyormuşum. dediğinizi yapınca çalıştı. teşekkürler