MBed节目陷入困境



我在Mbed框架的帮助下写了一些代码,它要么接受用户输入,然后显示传感器值,要么在15分钟后显示值。当我试图执行这个代码时,它被卡在了第21行(display.printf("内部循环"((。

我不明白为什么会这样,以及解决这个问题的方法是什么,这样开关块才能被执行。如何解决此问题?仅供参考,虽然不重要,但我使用的微控制器是STM32bluepill(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 statsn2.Return Control to System");
choice = display.putc(display.getc());
while(1){
display.printf("Inside loopn");
wait_ms(15000);
switch(choice)
{

case 1:
display.printf("Inside case 1");
a = Soil.readTemp();
display.printf("Temperature: %fn",DhtSensor.getCelsius());
display.printf("Humidity: %fn",DhtSensor.getHumidity());
display.printf("Soil water content: %cn ",*a);
break;
case 2:
/*<GreenHouse object>*/
/*Might have to proceed with timer*/
display.printf("Inside case 2");
t.attach(&getSensorData,4500);
display.printf("Temperature: %fn",a[0]);
display.printf("Humidity: %fn",a[1]);
display.printf("Soil water content: %cn ",a[2]);
break;
default:
break;

}
}
}
void getSensorData(){
static float a[3];
a[0]=DhtSensor.getCelsius();
a[1]=DhtSensor.getHumidity();
a[2]=(int)Soil.readTemp();   
}

您的switch语句可能正在执行,但始终处于"default"情况。您可以通过将print语句放在默认值中来测试这一点。

当您从显示器请求一个字符时,它将以ASCII字符的形式返回输入。这意味着,如果你在显示器上输入"1",它会给你(正如ASCII表所说(0x31(十进制49(,而不是1的值。所以你必须把你的案子改成";情况"1":";或";情况0x31:";以及第二种情况的等价物。

最新更新