极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22080|回复: 1

世界最小的Arduino——ATTiny13上手全攻略2A跑马灯

[复制链接]
发表于 2015-7-31 16:25:02 | 显示全部楼层 |阅读模式
本帖最后由 幻生幻灭 于 2017-2-15 10:42 编辑

系列教程传送门
世界最小的Arduino——ATTiny13上手全攻略1A简介
世界最小的Arduino——ATTiny13上手全攻略1B在Arduino IDE环境下的搭建
世界最小的Arduino——ATTiny13上手全攻略1C用Arduino来下载
世界最小的Arduino——ATTiny13上手全攻略2A跑马灯
世界最小的Arduino——ATTiny13上手全攻略2B呼吸灯
世界最小的Arduino——ATTiny13上手全攻略2C舵机测试仪
世界最小的Arduino——ATTiny13上手全攻略3A冬日雪花

前言
上一期我们介绍了ATTiny13有关的基础知识,在Arduino IDE环境下的搭建方法,并完成了第一个点灯实验“Hello World!”。本章教程将向大家介绍几款有趣的小应用。

实验一:从跑马灯开始

在本实验中,我们将通过制作一款简单的跑马灯来熟悉数字量输出控制,延时和循环等常见函数。整体电路搭建如图,左侧为ATTiny13最小系统,其下方是下载器的接口。右侧是5个彩色的LED发光二极管。为了让LED的光亮相对柔(An)和(Dan)一点,我们采用了较大阻值的1KΩ电阻。


因为ATTiny13只有8个引脚,而正常模式下可以使用的IO数量仅有5个,Arduino将其数字量通道的定义为从0到4。跑马灯的原理就是依次点亮或者熄灭指定的LED,然后反复循环形成一个简单的动画效果。整体代码也比较简单,程序的控制原理是在setup()中利用for()循环将所有的IO设置为输出状态,然后在loop()中先将所有的IO输出状态拉低,再将其中一位依次拉高。


当然这里的高低电位都是相对的,我们可以通过修改变量声明中的“ledON = LOW; ”或者 “LedON = HIGH; ”来进行切换。跑马灯的实际执行效果如下图。


关于具体每个函数的语法和功能,因为已经有很多教程介绍过,这里就不再重复了。在学习Arduino的过程中,其实最好帮助就是其软件本身自带的参考文档Reference了。建议大家在查阅函数时主要看Arduino软件帮助菜单Help中的Reference即可,里面有所有的函数功能介绍和丰富的样例资源。


如果只是想了解某一个特定函数的功能,可以先将鼠标指针点击到当前函数,然后再点帮助菜单下面的Find in Reference,在弹出的浏览器中会直接跳转到对应的页面。


附上Arduino代码
  1. //Author: Leo
  2. //Date: 2015.02.13
  3. //IDE Ver.: 1.0.3
  4. //website: github.com/leolite
  5. //MCU: ATMEL ATTINY13
  6. //Programmer: usbtinyisp(@Ladyada [url]https://learn.adafruit.com/usbtinyisp/drivers[/url])
  7. //hardware core: core13(@smeezekitty [url]http://sourceforge.net/projects/ard-core13/[/url])

  8. /*
  9. Water lights with 5 LED

  10. This example code is in the public domain.
  11. */

  12. //       ATMEL ATTINY13 / ARDUINO
  13. //
  14. //                      +-\/-+
  15. // [RST]ADC0 (D 5) PB5 1|    |8 Vcc
  16. //      ADC3 (D 3) PB3 2|    |7 PB2 (D 2) ADC1[SCK]
  17. //      ADC2 (D 4) PB4 3|    |6 PB1 (D 1) PWM1[MISO]
  18. //                 GND 4|    |5 PB0 (D 0) PWM0[MOSI]
  19. //                      +----+

  20. int pinOut[] = {
  21.   0,1,2,3,4};
  22. int countOut = 5;
  23. int timerOut = 200;
  24. int countLed = 0;
  25. boolean ledON = LOW;
  26. void setup()
  27. {
  28.   // initialize the digital pin as an output.
  29.   for(int i =0; i<countOut; i++){
  30.     pinMode(pinOut[i], OUTPUT);
  31.   }
  32. }
  33. void loop()
  34. {
  35.   for (int i =0; i<countOut; i++){
  36.     digitalWrite(pinOut[i], !ledON);  
  37.   }
  38.   digitalWrite(pinOut[countLed], ledON);
  39.   countLed ++;
  40.   if( countLed >= 5) countLed = 0;
  41.   delay(timerOut);
  42. }

复制代码



其他参考:
Arduino中文Wiki:http://wiki.geek-workshop.com/


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2023-6-12 14:51:38 | 显示全部楼层
楼主,麻烦问下,想在Arduino内调用Attiny13A的PB5脚作为输出引脚能做到么?谢谢
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 07:46 , Processed in 0.041150 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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