从串口读取字节
问题描述:
我编写了这个程序,它从串口读取信息并将值写入6个LED。我不觉得这是最简单或最快的方式,而这正是我真正需要的。我的代码如下所示:从串口读取字节
boolean enable = false;
void setup()
{
for (int i = 2; i < 8; i++)
{
pinMode(i, OUTPUT);
}
}
void loop()
{
if (Serial.available() > 0)
{
enable = true;
}
if (enable)
{
while (Serial.available() > 0)
{
byte b = Serial.parseInt();
b = constrain(b, 0, 63);
byte val = b;
for (int i = 7; i >= 2; i--)
{
if (pow(2, (i-2)) <= val)
{
digitalWrite(i, HIGH);
val -= pow(2, (i-2));
}
else
{
digitalWrite(i, LOW);
}
}
}
enable = false;
}
delay(100);
}
一个有效的代码示例会很好。我尝试过使用PORTD,但它不起作用。
答
使用二进制运算
for(int i = 0 ; i < 8 ; i++) {
val = (b >> i) & 0x1;
digitalWrite(i, val == 1 ? HIGH : LOW);
}
如果你计划一些严重的串行通信看看到图书馆,我创建https://github.com/lukaszkujawa/arduino-serial-helper
+0
谢谢,我来看看。 :) – 2013-02-28 16:55:43
+0
快乐,我希望它会有所帮助。 – 2013-02-28 17:26:21
的'使='位无用的混乱(除非你打算做更多的事情它)。更简单的做'while(Serial.available()> 0)'并且在那里管理你的LED状态。 – 2013-02-28 18:38:47
我是,但我发现比使用while循环和布尔“启用”更好的解决方案。不管怎样,谢谢你。 – 2013-03-01 07:15:29