1

 #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 时,变量 c 得到更新,代码运行正常,否则无法正常运行。请帮忙。

4

1 回答 1

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);
    }
}
于 2016-01-26T07:13:42.080 回答