如題要計數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開始顯示
試試看