北邮信通导论作业代码
流水灯
int brightness = 5;
//LED的亮度
int fadeAmount = 5;
//亮度变化增量
void setup()
{
pinMode(11, OUTPUT); //发绿色光
pinMode(10, OUTPUT); //发红色光
pinMode(9, OUTPUT); //发蓝色光
}
void loop()
{
for(int num=11;num>8;num--)
{
for(int i=0;;i++)
{
analogWrite(num, brightness);//点亮LED
if (brightness >= 255)
{
fadeAmount = -fadeAmount ;
};
brightness = brightness + fadeAmount;
if(brightness <= 0 )
{
break;
}
delay(5);
};
fadeAmount = 5,brightness = 5;
analogWrite(num, 0);
delay(5);
}
}
彩色呼吸灯
int brightness = 5;
//LED的亮度
int fadeAmount = 5;
//亮度变化增量
void setup()
{
pinMode(11, OUTPUT); //发红色光
pinMode(10, OUTPUT); //发绿色光
pinMode(9, OUTPUT); //发蓝色光
}
void loop()
{
for(int num=11;num>8;num--)
{
for(int i=0;;i++)
{
analogWrite(num, brightness);//点亮LED
if (brightness >= 255)
{
fadeAmount = -fadeAmount ;
};
brightness = brightness + fadeAmount;
if(brightness <= 0 )
{
break;
}
delay(30);
};
fadeAmount = 5,brightness = 5;
analogWrite(num, 0);
delay(30);
}
}
自动控制路灯
int threshold =400; //光强值,根据实际情况调整
void setup ( )
{
Serial.begin(115200);
//设置串口波特率
pinMode(10, OUTPUT); //设置输出端口
}
void loop( )
{
int n = analogRead(A3); //读取模拟口A3
Serial.println(n);
//串口打印,输出n的值
if (n>threshold )
//晚上光线暗,n值变大
digitalWrite(10, HIGH);
//点亮路灯
else
digitalWrite(10, LOW);
//关闭路灯
delay(200);
}
数字温度计
unsigned int tempMin = 24;
//亮灯温度
unsigned int tempMax = 28;
//报警温度
void setup( ) {
Serial.begin(115200);
//串口初始化
analogReference(INTERNAL); //调用板载1.1V基准源
pinMode(11, OUTPUT);
digitalWrite(11, LOW);
}
void loop( ) {
double analogVotage = 1.1*(double)analogRead(A3)/1023;
double temp = 100*analogVotage;
//计算温度
unsigned int dutyCycle;
//占空比
if (temp <= tempMin) {
//小于亮灯门限值
dutyCycle = 0; digitalWrite(11, LOW);
}
else if (temp < tempMax) { //小于报警门限
dutyCycle = (temp-tempMin)*255/(tempMax-tempMin);
digitalWrite(11, LOW);
}
else{
//发光二极管亮度最大值,并启动声音报警
dutyCycle = 255; digitalWrite(11, HIGH);
}
analogWrite(10, dutyCycle);
//控制发光二极管发光
Serial.print("Temp: "); Serial.print(temp);
Serial.print(" DegreesDuty cycle: ");
Serial.println(dutyCycle);
delay(100);
// 控制刷新速度
}
按键计数器
int count = 0;
void setup() {
pinMode(2,INPUT); //按键接引脚2,按下时为低电平
Serial.begin(9600);
Serial.println(count);
}
void loop() {
if (digitalRead(2) == LOW) { // 如果按键按下
delay(20); // 延迟20ms,去抖动
if (digitalRead(2) == LOW) { // 再次检测按键
count++; // 按键计数加1
Serial.println(count);
while(digitalRead(2) == LOW); // 等待按键释放
}
}
}
智能温控风扇
double analogVotage;
//模拟电压值
double temp;
//温度
unsigned int dutyCycle;
//占空比
unsigned int tempMin = 25; //零速温度
unsigned int tempMax = 33; //满速温度
void setup( ) {
Serial.begin(9600);
//波特率配置串口通讯
analogReference(INTERNAL); //调用板载1.1V基准源
}
void loop( ) {
analogVotage = 1.1*(float)analogRead(A3)/1023;
temp = 100*analogVotage;
//电压换算成温度
if (temp <= tempMin)
dutyCycle = 0;
else if (temp < tempMax)
dutyCycle = (temp-tempMin)*255/(tempMax-tempMin);
else
dutyCycle = 255;
analogWrite(10, dutyCycle); //产生PWM,控制电机转速
Serial.print("Temp: "); Serial.print(temp);
Serial.print(" DegreesDuty cycle: ");
Serial.println(dutyCycle);
delay(80);
// 控制刷新速度
}