Arudio项目实战——001 Flash Light(闪烁灯)
实现灯的交替闪烁
Cblock源码
Cblock转Arduino源代码
//核心库
#include <Arduino.h>
//通信库
#include <Wire.h>
#include <SoftwareSerial.h>
//Me-motor模块库(蜂鸣器)
#include <MeMCore.h>
//定义电机9号和10号
MeDCMotor motor_9(9);
MeDCMotor motor_10(10);
//移动函数,方向和速度为参数
void move(int direction, int speed)
{
int leftSpeed = 0;
int rightSpeed = 0;
//根据方向参数设置左右电机速度
if(direction == 1){//前进
leftSpeed = speed;
rightSpeed = speed;
}else if(direction == 2){//后退
leftSpeed = -speed;
rightSpeed = -speed;
}else if(direction == 3){//左转
leftSpeed = -speed;
rightSpeed = speed;
}else if(direction == 4){//右转
leftSpeed = speed;
rightSpeed = -speed;
}
//让电机转动,M1为左电机,M2为右电机
motor_9.run((9)==M1?-(leftSpeed):(leftSpeed));//当电机9号为M1时,速度取反,否则不变
motor_10.run((10)==M1?-(rightSpeed):(rightSpeed));//当电机10号为M1时,速度取反,否则不变
}
//
double angle_rad = PI/180.0;//角度转弧度,PI为圆周率
double angle_deg = 180.0/PI;//弧度转角度,PI为圆周率
//定义光敏电阻6号
MeLightSensor lightsensor_6(6);//光敏电阻
MeBuzzer buzzer;//定义蜂鸣器
MeRGBLed rgbled_7(7, 7==7?2:4);//RGB LED类型
void setup(){
for(int __i__=0;__i__<10;++__i__)//闪烁10次
{
rgbled_7.setColor(0,100,0,0);//(红色,绿色,蓝色,亮度)
rgbled_7.show();
_delay(1);
rgbled_7.setColor(0,0,0,0);
rgbled_7.show();
_delay(1);
}
}
void loop(){
_loop();
}
void _delay(float seconds){
long endTime = millis() + seconds * 1000;//结束时间=当前时间+延时时间*1000
while(millis() < endTime)_loop();//如果当前时间小于结束时间,则执行_loop()函数
}
void _loop(){
}
代码解释
这段代码主要实现控制电机和 RGB LED 的类的使用。
- 包含了 常用库的头文件,Arduino.h 为核心库,Wire.h 和 SoftwareSerial.h 为通信库,MeMCore.h 是 Me-motor 模块的库。
- MeDCMotor 类来控制电机9号和电机10号,并定义了一个 move 函数用来移动机器人。 定义了角度和弧度之间的转换公式,
angle_rad 是角度转弧度的公式, angle_deg 是弧度转角度的公式。 定义了 RGB LED 灯7号,使用 - MeRGBLed 类来控制 RGB LED 灯。 在setup中,控制RGB灯每间隔1s闪烁一次。在setup中,通过rgbled_7.setColor(0,100,0,0)来设置颜色。
- _loop() 函数没有实际作用,可能是作者的编码习惯
最后还有_loop()和_delay()两个函数,_loop()函数没有任何操作,它可能是留给用户自定义操作的。_delay()函数接收一个float类型的参数seconds,
这个函数会在millis()+ seconds * 1000 毫秒后结束,并在循环内部调用_loop()函数,
这段函数可能用于实现类似于普通的 delay()函数的功能。
代码优化
#include <Arduino.h>//核心库
//通信库
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeMCore.h>//模块库
MeRGBLed rgbled_7(7, 7==7?2:4);
void setup(){
}
void loop(){//重复执行
rgbled_7.setColor(0,100,0,0);//绿色
rgbled_7.show();//执行
delay(1000);//持续1s
rgbled_7.setColor(0,0,0,0);//黑色
rgbled_7.show();
delay(1000);
}
优化解释
这段代码通过利用类 MeRGBLed,实现了 RGB LED 绿灯闪烁的效果。
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
#include <MeMCore.h>
这几行是包含了常用库的头文件,Arduino.h 为核心库,Wire.h 和 SoftwareSerial.h 为通信库,MeMCore.h 是 Me-motor 模块的库。
MeRGBLed rgbled_7(7, 7==7?2:4);
这行代码通过定义 MeRGBLed 类的对象 rgbled_7 ,来控制编号为 7 的 RGB LED 灯,第二个参数 (7==7?2:4) 是 RGB LED 的类型,这里使用了三目运算符 ?: ,如果 7 == 7 为 true,则类型为 2,否则为 4。
void setup(){
}
这部分是 setup 函数,在程序开始时执行一次。这里并没有任何代码,所以该函数没有执行任何操作。
void loop(){
rgbled_7.setColor(0,100,0,0);
rgbled_7.show();
delay(1000);
rgbled_7.setColor(0,0,0,0);
rgbled_7.show();
delay(1000);
}
这部分是 loop 函数,它在程序开始后会不断重复执行。这里的代码中调用了 rgbled_7.setColor(0,100,0,0) 和 rgbled_7.show() 设置颜色为绿色并将其点亮,然后调用 delay(1000) 持续 1s。之后调用 rgbled_7.setColor(0,0,0,0) 和 rgbled_7.show() 设置颜色为黑色并熄灭 LED 灯,再调用 delay(1000) 持续 1s,这样循环执行,就实现了 RGB LED 灯闪烁的效果。