#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会更新,代码会正常运行,否则不会。请帮忙。
答案 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);
}
}