极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: yangqiang29

Arduino最小系统驱动5*5 LED 点阵

[复制链接]
发表于 2014-12-22 20:26:09 | 显示全部楼层
蛮不错哦

回复 支持 反对

使用道具 举报

发表于 2015-6-8 22:03:14 | 显示全部楼层
想问一下,为什么两边都要加电阻呢。
在一侧应该够了吧。
回复 支持 反对

使用道具 举报

发表于 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();
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-29 00:16 , Processed in 0.037463 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表