如題要計數0 ~ 255,過程中遇到的瓶頸是,8個LED中最高為元的2個LED永遠不會亮,當要進位到第7個位元後就開始會出問題,程式碼如下:
//file.ino
#include"library.h"
void setup()
{
  init();
}
void loop()
{
  run();
}
//library.h
#ifndef _LIBRARY_H
#define _LIBRARY_H
#include<Arduino.h>
#define L0 4
#define L1 5
#define L2 6
#define L3 7
#define L4 8
#define L5 9
#define L6 10
#define L7 11
#define delay_time 250
void init(); //初始化
void reset();
void run();
void binary(int);
#endif
//library.cpp
#include"library.h"
#include<Arduino.h>
int flag[8]; //紀錄8個LED亮還是不亮
void init()
{
  for(int i = L0 ; i <= L7 ; i++)
  {
    pinMode(i,OUTPUT);
    digitalWrite(i,LOW);
  }
}
void reset()
{
  for(int i = L0 ; i <= L7 ; i++)
  {
    digitalWrite(i,LOW);
  }
}
void run()
{
  for(int i = 0 ; i < 256 ; i++)
  {
    binary(i);
    digitalWrite(L0,flag[7]);
    digitalWrite(L1,flag[6]);
    digitalWrite(L2,flag[5]);
    digitalWrite(L3,flag[4]);
    digitalWrite(L4,flag[3]);
    digitalWrite(L5,flag[2]);
    digitalWrite(L6,flag[1]);
    digitalWrite(L7,flag[0]);
    delay(delay_time);
    reset();
  }
}
void binary(int num)
{
    int bits = floor(log(num) / log(2)); //找出位元數-1
    int index = 8 - bits + 1; //要從哪個LED開始顯示
    flag[8] = {LOW};
    while(bits) //先找出最左邊的bit,再來找第二個,依此類推找到倒數第二個bit。
    {
        if((num >> bits) & 1) //如果是1就亮
        {
          flag[index++] = HIGH;
        }
        else
        {
          flag[index++] = LOW;
        }
        bits--; //找到最左邊的後換找第二個
    }
    if(num & 1) //最高位元
    {
      flag[index++] = HIGH;
    }
    else
    {
      flag[index++] = LOW;
    }
}
以上是我的程式碼,想請教問題到底是出在哪呢?
int index = 8 - bits + 1; //要從哪個LED開始顯示
改成
int index = 8 - bits - 1; //要從哪個LED開始顯示
試試看