找回密码
 立即注册

QQ登录

只需一步,快速开始

本帖最后由 lxf 于 2020-8-17 13:35 编辑

第22课 8位全彩LED流水灯实验案例


目标

1、让8位全彩LED流水灯模块,从1-8号灯珠,被依次点亮一颗,再熄灭前一颗,之后再从8-1号灯珠,被依次点亮一颗,再熄灭前一颗,依次循环。
2、随机数的使用,让8位全彩LED流水灯的1号灯珠每隔1秒随机被点亮一盏不同颜色的灯。

实验材料

Arduino UNO开发板
8位全彩LED流水灯模块的使用
配套USB数据线
配套杜邦线若干
Arduino IDE软件

图片1.png

内容

1、让8位全彩LED流水灯模块,从1-8号灯珠,被依次点亮一颗,再熄灭前一颗,之后再从8-1号灯珠,被依次点亮一颗,再熄灭前一颗,依次循环。

接线图

图片2.png

接线方式

Arduino UNO    <------>  8位全彩LED流水灯模块
        5V              <------>              4-7VDC
     GND             <------>               GND
        5                <------>                 DI

程序实现代码

  1. #include <Wire.h>
  2. #include <Adafruit_NeoPixel.h>   //8位全彩LED流水灯模块库文件
  3. Adafruit_NeoPixel  rgb_display_5(8);  //8位全彩LED流水灯模块灯数为8
  4. void setup(){
  5.   rgb_display_5.begin();
  6.   rgb_display_5.setPin(5);   //设置8位全彩LED流水灯为5号引脚
  7. }
  8. void loop(){
  9.   for (int i = 1; i <= 9; i = i + (1)) {      //8位全彩LED流水灯通过循环使1-8号灯珠,被依次点亮一颗,再熄灭前一颗
  10.     rgb_display_5.setPixelColor(i-1, 255,0,0);
  11.     rgb_display_5.show();   //进行显示
  12.     delay(500);    //延迟等待500ms
  13.     rgb_display_5.setPixelColor((i - 1)-1, 0,0,0);
  14.     rgb_display_5.show();  //进行显示
  15.     delay(500);   //延迟等待500ms
  16.   }
  17.   for (int i = 8; i >= 0; i = i + (-1)) {   //8位全彩LED流水灯通过循环使8-1号灯珠,被依次点亮一颗,再熄灭前一颗
  18.     rgb_display_5.setPixelColor(i-1, 255,0,0);
  19.     rgb_display_5.show();    //进行显示
  20.     delay(500);    //延迟等待500ms
  21.     rgb_display_5.setPixelColor((i + 1)-1, 0,0,0);
  22.     rgb_display_5.show();    //进行显示
  23.     delay(500);   //延迟等待500ms
  24.   }
  25. }
复制代码


加减乘除


这些运算符分别返回两个运算对象的和,差,积,商。这些运算操作受运算对象的数据类型的影响。请看以下示例语句:
int c = 9/4;
由于c是整数型变量,以上程序运算结果是c = 2。由于整数型变量c不能存储小数,所以运算结果中的小数部分被Arduino忽略了。
另外运算也会产生溢出效应。再看以下语句:
int c = 32767 + 1;
由于c是整数型变量,而整数型变量所能存储的最大整数为32767。所以以上程序将会产生溢出效果,这使得运算结果是c = -32768。为了得到正确的运算结果,需要使用适当的变量类型来进行该运算。比如使用float类型或double类型,程序运算结果就是正确的了。

示例:

  1. y = y + 3;
  2. x = x – 7;
  3. i = j * 6;
  4. r = r / 5;
复制代码

语法

result = value1 + value2;
result = value1 – value2;
result = value1 * value2;
result = value1 / value2;

参数

value1: 任何变量或常量
value2: 任何变量或常量

编程技巧:

* 要知道整型常量默认为int型,因此一些常量计算可能会溢出(例如:60 * 1000将产生负的结果)
* 在声明变量数据类型时,要考虑到这个变量所存储的数值大小。
* 要知道你的变量在哪一点将会产生“翻转”效果,且要知道在该数值在“翻转”后会发生什么,例如:(0 – 1)或(0 – 32768)。
* 如果数学计算的结果是分数,则应该使用浮点变量,但是要注意浮点变量占用空间大,计算速度慢。这是浮点变量的缺点。

2、随机数的使用,让8位全彩LED流水灯的1号灯珠每隔1秒随机被点亮一盏不同颜色的灯。

程序实现代码

  1. #include <Wire.h>
  2. #include <Adafruit_NeoPixel.h>   //8位全彩LED流水灯模块库文件
  3. Adafruit_NeoPixel  rgb_display_5(1);  //8位全彩LED流水灯模块灯数为1
  4. void setup(){
  5.   rgb_display_5.begin();
  6.   rgb_display_5.setPin(5);   //设置8位全彩LED流水灯为5号引脚
  7. }
  8. void loop(){
  9.   rgb_display_5.setPixelColor(1-1, (random(0, 255)),(random(0, 255)),(random(0, 255)));  //让8位全彩LED流水灯的1号灯珠每
  10. //1秒被随机点亮一盏不同颜色的灯
  11.   rgb_display_5.show();  //进行显示
  12.   delay(1000);
  13. }
复制代码

random()

random函数可用来产生随机数

语法

random(max)
random(min, max)

参数

min: 产生随机数的下限(包含此数值)
max: 产生随机数的上限(不包含此数值)

返回值

在最小值(min)和最大值减一(max-1)之间的随机数值

注意

单独使用random()函数,每次程序运行所产生的随机数字都是同一系列数字,并非真实的随机数,而是所谓的伪随机数,如果希望每次程序运行时产生不同的随机数值,应配合使用randomseed()函数。
分享至 : QQ空间
收藏

0 个回复

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