|
发表于 2015-6-10 11:52:55
|
显示全部楼层
丢一个用lz的方法使用8个口控制16个LED。
能实现,但是灯光变暗了。。
int group[] = {7, 4, 3, 2}; //从左向右
int member[] = {11, 10, 9, 8}; //接正
unsigned char ledStatus[16];
long int lastTime;
int mode = 1;
int v1CurLed;
void setLed()
{
if (1==mode)
{
for(int i=0;i<15;i++) ledStatus[i]=0;
v1CurLed = 0;
ledStatus[v1CurLed] = 1;
}
}
void nextLed()
{
ledStatus[v1CurLed] = 0;
v1CurLed++;
if (v1CurLed>15) v1CurLed = 0;
ledStatus[v1CurLed] = 1;
}
void freshLed()
{
for (int g=0; g<=3; g++)
{
digitalWrite(group[g], LOW);
for (int m=0;m<=3;m++)
{
int thisLed = ledStatus[g*4+m];
digitalWrite(member[m], thisLed);
if (thisLed == 1)
digitalWrite(member[m], LOW);
}
digitalWrite(group[g], HIGH);
}
}
void setup() {
for (int i=0;i<=3;i++)
{
pinMode(group[i], OUTPUT);
pinMode(member[i], OUTPUT);
digitalWrite(group[i], HIGH);
digitalWrite(member[i], LOW);
}
setLed();
}
void loop()
{
long int currentTime = millis();
if (currentTime - lastTime>100)
{
nextLed();
lastTime = millis();
}
freshLed();
} |
|