arduino学习之led相关--跑马灯+电位器控制led亮灭

引子

一直挺喜欢搞点硬件的东西,可是每次都坚持不了多久。不过人总是要寻找写改变的,之前未能坚持下去的不代表现在以及将来不能坚持下去,于是开始新的一波学习之旅。

开始

之前本来入了一块开发板(51和单片机都有),最近重拾单片机,顺带入了一块arduino的板子,这两天稍微学了一点便能做出一点自己认为有趣的东西,遂开贴记录之。

板子接电并开始第一个测试程序

很简单,
1. usb接口插入电脑;
2. 打开arduino.exe;
3. 运行自带的示例程序:文件->示例->01Basics->Blink

示例程序很简单设置13端口为输出,并每隔1s切换亮灭(为什么是13号端口,应该是由于板子默认带了一个led与13号端口相连)。

void setup() {
  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
}

自己点亮第一个外接led

由于上面的示例代码已经将13号led点亮,及周期的将13号端口电平拉高,只要将13号端口和地直接接入一个led即可。
另外由于限流的考虑,需要在led两端串入一个阻值大小合适的电阻。由于13号端口高电压为5v,LED正常工作压降为1.5v,正常工作电力为10mA。可以计算出串入的电阻阻值在350欧姆附件。参考板子配套教程中内容,arduino提供拉电流时是有限值的,一般不会超过20mA,而一般LED的极限电流为30mA,所以即使直接接入也不会引起烧坏,但是出于安全和功耗的考虑仍需要较为精确地计算电阻。
tb店家提供的电阻阻值为330欧姆,没有什么问题。顺便学习了下如何读取电阻的阻值,贴出一张阻值表便可说明一切:(注意依据两侧色环的间距判断哪边为第一段,即最后一段距离前一段的距离较大)
arduino学习之led相关--跑马灯+电位器控制led亮灭_第1张图片
另外附上面包板的使用:百度知道有一篇文章写得挺好http://jingyan.baidu.com/article/851fbc37a8b5053e1f15abb0.html ;其实记住除了两边的用线标出连接的,其余均为纵向连接。
还有led长引脚为正级。
有以上只是,相信自己连线点亮一个led已经不是问题了。

led流水灯 & 电位器控制led亮灭

其实流水灯只是将在一个led灯的基础上加入了多个led灯,并且时序并不相同而已。
电位器控制led灯的亮灭,这个其实还是蛮有意思的,通过这个实验可以让我们理解部分通过旋钮控制灯亮度的问题。
电路图绘制使用 Python库SchemDraw,上电路图:
arduino学习之led相关--跑马灯+电位器控制led亮灭_第2张图片
具体使用可以参考:http://blog.csdn.net/skyztttt/article/details/72598851
上代码:

const int ledCount = 8;
void setup() {
  // put your setup code here, to run once:
  for (int i = 0; i < ledCount; ++i) {
    pinMode(i, OUTPUT);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  int sensorRead = analogRead(A0); // 获取A0端口的模拟量值
  int ledLevel = map(sensorRead, 0, 1023, 0, 8); // 进行map转换,教材中说arduino使用10bitADC,最大精度为2^10 即1024,故map函数中范围为0~1023,输出值在0~8之间(这里为什么前面是0~1023包含了1023,而后面却不包含8,需要等后面知识丰富了再考察)
  for (int i = 0; i < ledCount; ++i) {
    digitalWrite(i, i < ledLevel ? HIGH : LOW);    
  }
}

你可能感兴趣的:(arduino学习)