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