asansör kodum çalışmıyor

Başlatan phantom, 20 Mayıs 2014, 00:50:14

phantom

iyi geceler herkese projem gereği asansör yapmam lazım bunun için pic kullanacağım fakat kodu  build tuşuna bastığımda bu kısımda

int calculate_direction(int to,int from)
{
    up_down = to-from;                           //   0 aşağı 1 yukarı
    if(up_down<=0)
       ak==0;
    else if(up_down>=0)
       ak==1;
}


47 1503 Result is not defined in function: 'calculate_direction' MyProject.c hatası alıyorum nerde yanlış yapıyor olabilirim

Kabil ATICI

Burada yazdığına göre calculate_direction fonksiyon olarak tanımlamışsın ama fonksiyondan çıkarken sonucu taşıyacak şekilde düzenlememişsin.
ambar7

mehmet

#2
int calculate_direction(int to,int from)
 {
    up_down = to-from;                           //   0 aşağı 1 yukarı
    if(up_down<=0)
       ak=0;
    else if(up_down>=0)
       ak=1;
   return ak;      /*bunu eklemeniz gerekli...*/
 }

Şart durumunda da bir mantıksızlık var. Bunu da gözden geçiriniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

Tagli

up_down == 0 ise ne dönecek? Ben olsam dönüş değerlerini -1, 0 ve 1 olarak düşünürdüm.

Bu arada, tabi ki "ak" değişkeninin fonksiyon içinde tanımlı olması gerekiyor.
Gökçe Tağlıoğlu

sadogan

int calculate_direction(int to,int from)
 {
    
    up_down = to-from;                           //   0 aşağı 1 yukarı
    if(up_down<=0)
       ak==0;     // ak)=0; olmalı
    else if(up_down>=0)
       ak==1;    // ak=1;   olmalı
 }

Salih

Bence parametre olarak yazılmış 'from' reserved kelimelerden olduğundan
derleyici hata veriyor.

phantom

arkadaşlar aşağıya tüm kodları yazdım asansörün hangi katta olduğunu belirlemek için sensör kullanıyorum ama şu int calculate_direction kısmındaki hatayı hala nasıl çözeceğimi anlayamadım 


  #define    buttonzero      portb.rb0
   #define    buttonone       portb.rb1
   #define    buttontwo       portb.rb2
   #define    cabinzero       portb.rb3
   #define    cabinone        portb.rb4
   #define    cabintwo        portb.rb5
   #define    led0            portc.rc0
   #define    led1            portc.rc1
   #define    led2            portc.rc2
   #define    sensor0         portc.rc4
   #define    sensor1         portc.rc5
   #define    sensor2         portc.rc6
   #define    motor1          portd.rd2
   #define    motor2          portd.rd3


   char yon=0;                                 // Kabinin bulunduğu kattan hareketin aşağı veya yukaı yönlü olması gerektiğini tutan değişken
   int b0flg=0;                                // Buton 0(Kat 0) kontrol bayrağı
   int b1flg=0;                                // Buton 1(Kat 1) kontrol bayrağı
   int b2flg=0;                                // Buton 2(Kat 2) kontrol bayrağı
   int current_floor=0;                        // Asansör kabininin bulunduğukat değerini tutan değişken
   int up_down=0;                              // 0 aşağı 1 yukarı
   int ak=0;

   
void init()                                    // Başlangıç ayarları
{
    ADCON1|= 0X0F;
    CMCON |=7;
    trisd  =0x00;
    trisc  =0x00;
    portc =0x00;
    portd =0x00;
    b0flg=1;                                    // Bu bayrak başlangıçta 0. katta olması gerektiği için 1 olabilir
    b1flg=0;
    b2flg=0;
    current_floor=0;
}

int calculate_direction(int to,int from)
{
    up_down = to-from;                           //   0 aşağı 1 yukarı
    if(up_down<0)
       ak=0;
    else if(up_down>0)
       ak=1;
}

void main()
{
   init();
   while(1)
   {
   if (buttonzero || cabinzero)                                                // Buton 0 a basılmışsa....
       {
        if(b1flg==0 && b2flg==0)                                // ve  b1 ile b2 butonlarına basılarak bayraklar aktif edilmemişse
        {
          b0flg=1;  led0=1;                                           // b0 bayrağını aktif et
          b1flg=0;  led1=0;
          b2flg=0;  led2=0;
          calculate_direction(0,current_floor);               // yön hesapla fonksiyonuna gidilecek olan kat ile bulunduğu kat değerlerini gönder
           if(up_down<0)
           {
              while(sensor0==0)
              {
                 motor1=1;
                 motor2=0;
              }
           }
            else if(up_down>0)
           {
              while(sensor0==0)
              {
                 motor1=0;
                 motor2=1;
              }
           }
            motor1=0;
            motor2=0;
           current_floor=0;
           b0flg=0;
           b1flg=0;
           b2flg=0;
        }
       }


   if (buttonone || cabinone)                                            // Buton 1 a basılmışsa....
       {
        if(b0flg==0 && b2flg==0)                             // ve  b0 ile b2 butonlarına basılarak bayraklar aktif edilmemişse
        {
          b0flg=0;   led0=0;
          b1flg=1;   led1=1;                                        // b1 bayrağını aktif et
          b2flg=0;   led2=0;
          calculate_direction(1,current_floor);             // yön hesapla fonksiyonuna gidilecek olan kat ile bulunduğu kat değerlerini gönder
           if(up_down<0)
           {
              while(sensor1==0)
              {
                 motor1=1;
                 motor2=0;
              }
           }
            else if(up_down>0)
           {
              while(sensor1==0)
              {
                 motor1=0;
                 motor2=1;
              }
           }
            motor1=0;
            motor2=0;
           current_floor=1;
           b0flg=0;
           b1flg=0;
           b2flg=0;
        }
       }
  if (buttontwo || cabintwo)                                            // Buton 2 ye basılmışsa....
       {
        if(b0flg==0 && b1flg==0)                            // ve  b0 ile b1 butonlarına basılarak bayraklar aktif edilmemişse
        {
          b0flg=0;  led0=0;
          b1flg=0;  led1=0;
          b2flg=1;  led2=1;                                 // b2 bayrağını aktif et
          calculate_direction(2,current_floor);             // yön hesapla fonksiyonuna gidilecek olan kat ile bulunduğu kat değerlerini gönder
           if(up_down<0)
           {
              while(sensor2==0)
              {
                 motor1=1;
                 motor2=0;
              }
           }
            else if(up_down>0)
           {
              while(sensor2==0)
              {
                 motor1=0;
                 motor2=1;
              }
           }
            motor1=0;
            motor2=0;
           current_floor=2;
           b0flg=0;
           b1flg=0;
           b2flg=0;
        }
       }
    }
   }

Tagli

int calculate_direction(int to,int from)
yerine
void calculate_direction(int to,int from)
yaz.

Tahminimce bu, derleme hatasını ortadan kaldıracak.

Ama, kodun tamamına bakınca ortada ak değişkeninin kullanıldığı bir yere göremedim. O zaman o fonksiyon ne iş yapıyor?
Gökçe Tağlıoğlu

Salih

parametre de from sembolü yerine başka sembol kullanıp denedin mi?

phantom

teşekkürler arkadaşlar tagli ve salih abinin dediklerini uygulayınca hatalar ortadan kalktı yardım eden herkese çok teşekkür ederim