从串行读取字节

时间:2013-02-28 08:35:38

标签: byte arduino

我使这个程序从串行读取信息并将值二进制写入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,但它不起作用。

1 个答案:

答案 0 :(得分:1)

使用二进制操作

for(int i = 0 ; i < 8 ; i++ ) {
   val = ( b >> i ) & 0x1;
   digitalWrite(i, val == 1 ? HIGH : LOW );
}

如果您计划进行一些严肃的串行通信,请查看我创建的库https://github.com/lukaszkujawa/arduino-serial-helper