2013-03-24 41 views
0

我想比較我的溫度傳感器中的電流與我在程序中使用結構設置的上限值。如果溫度傳感器的價值超過目前的上限,我只想printf一個聲明。比較高和低值來調用函數

這段代碼有什麼問題,它不會打印出printf聲明,無論當前溫度如何。請假定程序中聲明瞭所有必需的頭文件,定義等。

作爲一個整體工作得很好,但我不明白爲什麼我不能得到一個簡單的printf命令來顯示!請假定所有需要的定義已經完成,並相應地全部完成。

這裏是我的結構

struct temperatureChannel_t { //set a structure that encompasses all of the follow elements in an array 
    temperature_t temperatureArray; 
    temperature_t temperatures[MAXSAMPLES]; 
    temperature_t currentTemperature; 
    temperature_t lowLimit; 
    temperature_t highLimit; 
    temperature_t minTemperature; 
    temperature_t maxTemperature; 

}; 

struct temperatureChannel_t temperatureChannel[MAXCHANNELS]; 

這是我如何初始化當前高限

void initializeTemperatureSubsystem() 
{ 
    currentInsertionPoint = 0; 
    for(int chID = 0; chID < MAXCHANNELS; chID++) 
    { 
      srand(time(NULL)); 
      for(int i = 1; i < MAXSAMPLES; i++) 
      { 
        temperatureChannel[chID].temperatures[i] = rand()%100; 
      } 
      temperatureChannel[chID].lowLimit = 50; 
     temperatureChannel[chID].highLimit = 100; 
     temperatureChannel[chID].currentTemperature = 75; 

     averageIsValid = FALSE; //NEW line 
    } 

} 

這裏是我如何第一呼叫設定的當前溫度,以功能

setCurrentTemperature(CH1, temperatureSensor1Reading); 

那麼功能

temperature_t setCurrentTemperature(int channelID, temperature_t temperature) 
{ 
    return temperatureChannel[channelID].currentTemperature; 
} 

首先,我有我的電話的功能,與目前的通道,我使用

compareHighLimit(CH1); 

那麼這裏不會打印出printf命令

void compareHighLimit (int channelID) 
{ 
    if (temperatureChannel[channelID].currentTemperature > temperatureChannel[channelID].highLimit) 
      printf("you have activated the high alarm!!"); 
} 
+0

在'compareHighLimit()'函數(您的'if(...)'語句中的條件)中輸入您認爲應該導致printf()運行的輸入值。你期望的價值是什麼? – d0rmLife 2013-03-24 18:23:59

+0

它觸發如果我使用compareHighLimit(CH1,CH1Reading),然後調用CH1讀入我的函數,並從那裏比較...但這不是我的鍛鍊點...我應該能夠確定CH1閱讀從剛使用單個CH1值,它應該分別從結構中調用它當前的溫度。 – 2013-03-24 18:29:26

+0

我明白了。如果條件不符合要求,最好的做法是通過打印值來查看實際進行比較的結果。正如下面的答案所表明的那樣,這樣做很可能會告訴你,你從不設置溫度。 :) – d0rmLife 2013-03-24 18:31:31

回答

3

功能您的設定溫度功能實際上並未設定該值:

temperature_t setCurrentTemperature(int channelID, temperature_t temperature) 
{ 
    // you need to set the data here, not just return the existing value 
    return temperatureChannel[channelID].currentTemperature; 
} 
+0

你真是太棒了.....非常感謝你的回覆......我做了必要的修改,現在它可以工作.......非常感謝你在這方面 – 2013-03-24 18:34:27

1

它似乎不像你曾經設置的溫度。你說你叫

setCurrentTemperature(CH1, temperatureSensor1Reading); 

此,我認爲,應該CH1的溫度設定爲temperatureSensor1Reading。此功能,但是,似乎並沒有改變溫度:

temperature_t setCurrentTemperature(int channelID, temperature_t temperature) 
{ 
    return temperatureChannel[channelID].currentTemperature; 
} 

看來,你可能混合了代碼setCurrentTemperaturegetCurrentTemperature

+0

你是對的猛禽。 ..我相信我的教授看着我的代碼,並告訴我改變這一點,當我想知道爲什麼(因爲他告訴我們最初將該函數定義爲「獲取」) – 2013-03-24 18:32:24