我在Mbed框架的帮助下编写了一些代码,它要么接受用户输入,然后显示传感器值,要么在15分钟后显示值。当我尝试执行这段代码时,它会被困在第21行(display.printf("Inside \n“);)。
我无法理解为什么会这样,以及如何解决这个问题,以便执行开关块。我怎么解决这个问题?FYI,虽然不重要,但我使用的微控制器是STM32 bluepill (STM32F103C8T6)。
#include "mbed.h"
#include "Sensor_input.h"
#include "Ticker.h"
#include "Dht11.h"
//#include "USBSerial.h"
Serial display(PA_2, PA_3, 9600);
char* a;
Dht11 DhtSensor(PA_4);
Ticker t;
Sensor_input Soil(PB_7, PB_6, 8);
float *SensorData;
void getSensorData();
int main ( void ){
uint8_t choice = 0;
display.printf("Enter 1 or 2:\n1.Greenhouse stats\n2.Return Control to System");
choice = display.putc(display.getc());
while(1){
display.printf("Inside loop\n");
wait_ms(15000);
switch(choice)
{
case 1:
display.printf("Inside case 1");
a = Soil.readTemp();
display.printf("Temperature: %f\n",DhtSensor.getCelsius());
display.printf("Humidity: %f\n",DhtSensor.getHumidity());
display.printf("Soil water content: %c\n ",*a);
break;
case 2:
/*<GreenHouse object>*/
/*Might have to proceed with timer*/
display.printf("Inside case 2");
t.attach(&getSensorData,4500);
display.printf("Temperature: %f\n",a[0]);
display.printf("Humidity: %f\n",a[1]);
display.printf("Soil water content: %c\n ",a[2]);
break;
default:
break;
}
}
}
void getSensorData(){
static float a[3];
a[0]=DhtSensor.getCelsius();
a[1]=DhtSensor.getHumidity();
a[2]=(int)Soil.readTemp();
}发布于 2022-03-11 15:42:35
您的开关语句可能正在执行,但总是在“默认”情况下。您可以通过在默认情况下放置一个print语句来测试这一点。
当您从显示器请求一个字符时,它将以ASCII-字符的形式返回输入。这意味着,如果您在显示中输入' 1‘,它将给您(如ASCII表所示) 0x31 (小数49),而不是1的值。因此,您必须将您的大小写更改为"case '1':“或"case 0x31:”,以及第二个大小写的等效值。
https://stackoverflow.com/questions/71426423
复制相似问题