变量未在mbed板上运行的代码中更新

时间:2016-01-25 09:55:57

标签: mbed

 #include "mbed.h"
 
DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
Serial pc(USBTX, USBRX);

int main() 
{ int c;
    while(1)
    {
    pc.scanf("%d",&c);
    pc.printf("hey i received %d",c);
    if (c==1050)
    {myled1=1;
    myled2=0;
    myled3=0;
    myled4=0;
    }
    else if (c==2050)
    {   myled1=0;
        myled4=0;
        myled3=0;
        myled2=1;
    }
    else if (c==3050)
    {myled3=1;
    myled4=0;
    myled2=0;
    myled1=0;
    }
    else if (c==4050)
    {myled4=1;
    myled3=0;
    myled2=0;
    myled1=0;
    }
    }
}

  

上述代码从终端接收'c'的值,并根据相同的方式做出决定。我面临的问题是,当我使用printf时,variabl c会更新,代码会正常运行,否则不会。请帮忙。

1 个答案:

答案 0 :(得分:0)

串行数据一次传输一个字节。通过向终端写入1050来发送多位整数时,每个号码都是单独发送的。下面的函数getNumber()收集所有字节,直到收到回车。通过减去ASCII值48(即0),接收的字符将转换为整数。在将接收到的整数添加到数字之前,将数字向左移动10。

最好的方法是使用中断。请参阅以下示例代码:

#include "mbed.h"

DigitalOut myled1(LED1);
DigitalOut myled2(LED2);
DigitalOut myled3(LED3);
DigitalOut myled4(LED4);
Serial pc(USBTX, USBRX);

unsigned int getNumber() 
{
    unsigned int val = 0;  // Max value 65535
    while(1)
    {
        char c = pc.getc();
        pc.putc(c); // echo back to terminal
        if (c == '\r') // enter pressed
            break;   
        val = ((c - 48) + (val * 10));
    }
    return val;
}

void callback() 
{
    unsigned int n = getNumber();
    pc.printf("Number = %d \r\n", n); // Write number to terminal
    if (n==1050)
    {
        myled1=1;
        myled2=0;
        myled3=0;
        myled4=0;
    }
    else if (n==2050)
    {   
        myled1=0;
        myled2=1;
        myled3=0;
        myled4=0;
    }
    else if (n==3050)
    {
        myled1=0;
        myled2=0;
        myled3=1;
        myled4=0;
    }
    else if (n==4050)
    {
        myled1=0;
        myled2=0;
        myled3=0;
        myled4=1;
    }
}

int main() {
    pc.attach(&callback);
    while (1) 
    {
        wait(0.5);
    }
}