0

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

4

1 回答 1

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

于 2013-02-28T09:09:22.243 回答