首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MBed程序卡住

MBed程序卡住
EN

Stack Overflow用户
提问于 2022-03-10 15:10:06
回答 1查看 98关注 0票数 0

我在Mbed框架的帮助下编写了一些代码,它要么接受用户输入,然后显示传感器值,要么在15分钟后显示值。当我尝试执行这段代码时,它会被困在第21行(display.printf("Inside \n“);)。

我无法理解为什么会这样,以及如何解决这个问题,以便执行开关块。我怎么解决这个问题?FYI,虽然不重要,但我使用的微控制器是STM32 bluepill (STM32F103C8T6)。

代码语言:javascript
复制
#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();   

}
EN

回答 1

Stack Overflow用户

发布于 2022-03-11 15:42:35

您的开关语句可能正在执行,但总是在“默认”情况下。您可以通过在默认情况下放置一个print语句来测试这一点。

当您从显示器请求一个字符时,它将以ASCII-字符的形式返回输入。这意味着,如果您在显示中输入' 1‘,它将给您(如ASCII表所示) 0x31 (小数49),而不是1的值。因此,您必须将您的大小写更改为"case '1':“或"case 0x31:”,以及第二个大小写的等效值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71426423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档