2013-11-23 27 views
0

我是新來的Arduino或編碼一般,我正在嘗試一些東西。我正在使用代碼實現基本菜單,您可以通過按下按鈕來滾動瀏覽。這工作正常,但我希望它顯示在第一個菜單上的溫度。打印溫度到LCD外部環路

用於計算溫度的代碼在循環()中,而用於自定義菜單的代碼在setup()loop()之前。我想使用lcd.print(temperatureC)將溫度打印到液晶顯示器上,但不能使用temperatureC,因爲它只在循環()中聲明。

有什麼辦法可以解決這個問題嗎?我對此很陌生。

#include <LiquidCrystal.h> 

LiquidCrystal lcd(8,9,10,11,12,13); 
int tempPin = A0; 
int photocellPin = A1; 
const byte mySwitch = 7; 
#define aref_voltage 3.3 


// these "states" are what screen is currently being displayed. 
typedef enum 
    { 
    POWER_ON, TEMPERATURE, LIGHTSENSOR, EXHAUST_FAN1, EXHAUST_FAN2, 
    // add more here ... 

    LAST_STATE // have this last 
    } states; 

byte state = POWER_ON; 

byte oldSwitch = HIGH; 

void powerOn() 
    { 
    Serial.println ("Welcome!"); 
    lcd.setCursor(0,0); 
    lcd.print("Welcome!"); 
    delay(2000); 

    } 

void showTemperature() 
    { 
    Serial.println ("Temperature"); 
    lcd.clear(); 
    lcd.setCursor(0,0); 
    lcd.print("Temperature"); 
    lcd.setCursor(0,1); 
    lcd.print(temperatureC); 



void setup() 
{ 
    Serial.begin(9600); //Start the serial connection with the computer 
         //to view the result open the serial monitor 
    analogReference(EXTERNAL); 
    pinMode (mySwitch, INPUT_PULLUP); 
    lcd.begin(16, 2); 
    lcd.clear(); 
    powerOn(); 
} 

void loop() 
{ 
    int sensorVal = analogRead(tempPin); 
    delay(5); 
    int photocellVal = analogRead(photocellPin); 
    delay(5); 
    float voltage = (sensorVal) * aref_voltage; 
    voltage /= 1024.0; 
    float temperatureC = (voltage - .5) * 100; 
    temperatureC = round(temperatureC * 2.0)/2.0; 

    { 
    byte switchValue = digitalRead (mySwitch); 

    // detect switch presses 
    if (switchValue != oldSwitch) 
    { 
    delay (100); // debounce 

    // was it pressed? 
    if (switchValue == LOW) 
     { 
     state++;  // next state 
     if (state >= LAST_STATE) 
     state = TEMPERATURE; 

     switch (state) 
     { 
     case POWER_ON:  powerOn();   break; 
     case TEMPERATURE: showTemperature(); break; 
     case LIGHTSENSOR: showLightsensor(); break; 
     case EXHAUST_FAN1: showExhaustFan1(); break; 
     case EXHAUST_FAN2: showExhaustFan2(); break; 
     } // end of switch 
     } // end of switch being pressed 

    oldSwitch = switchValue; 
    } // end of switch changing state 

    } // end of loop 

回答

0

移動代碼讀取溫度到自身的方法,(從淺閱讀代碼分開 - 使另一種方法爲這個)...

float getTemperature() { 
    int sensorVal = analogRead(tempPin); 
    delay(5); 
    float voltage = (sensorVal) * aref_voltage; 
    voltage /= 1024.0; 
    float temperatureC = (voltage - .5) * 100; 
    temperatureC = round(temperatureC * 2.0)/2.0; 
    return temperatureC; 
} 

然後調用這個方法你的showTemperature()方法。