实验一 LED灯

说明:此实验可以通过遥控器操作实现LED灯的变化

/*实验一 遥控灯*/
#include < IRremote.h >
#include < liquidCrystal_I2C.h >
int RECV_PIN=10;
int ledPin=3;       //LED -digital 3
boolean ledState=LOW;         //ledState用来存储LED的状态
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
 Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(ledPin,OUTPUT);         //设置LED为输出状态
  
}
void loop() {
  if(irrecv.decode(&results)){

  Serial.println(results.value,HEX);

  if(results.value==0xFD00FF){       
  
       ledState=!ledState;

      digitalWrite(ledPin,ledState);
   }
  irrecv.resume();
  }
}
图片加载失败

实验二 点歌台

说明:此实验可以通过计算机输入控制歌曲(我真的想不出来除了助教给的示例以外其他的只有do到xi的音乐了,所以只能用这两个了┭┮﹏┭┮)

/*实验二 点歌台*/
#include < IRremote.h >
#include < liquidCrystal_I2C.h >
#define DO 294
#define RE 330
#define MI 350
#define FA 393
#define SAO 441
#define LA 495
#define XI 556

//歌曲
int Eulogyofjoytune[]=                 //根据简谱列出各频率
{
  MI,MI,FA,SAO,
  SAO,FA,MI,RE,
  DO,DO,RE,MI,
  MI,RE,RE,
  MI,MI,FA,SAO,
  SAO,FA,MI,RE,
  DO,DO,RE,MI,
  RE,DO,DO,
  RE,RE,MI,DO,
  RE,MI,FA,MI,RE,
  RE,MI,FA,MI,RE,
  DO,RE,DO,MI,
  MI,MI,FA,SAO,
  SAO,FA,MI,RE,
  DO,DO,RE,MI,
  MI,RE,RE,
};
int lstune[]={
  DO,DO,SAO,SAO,
  LA,LA,SAO,
  FA,FA,MI,MI,
  RE,RE,DO,
  SAO,SAO,FA,FA,
  MI,MI,RE,
  SAO,SAO,FA,FA,
  MI,MI,RE,
  DO,DO,SAO,SAO,
  LA,LA,SAO,
  FA,FA,MI,MI,
 RE,RE,DO,
};


//自己定义一组频率和节拍
int tune={

};

//节拍
float Eulogyofjoybeat[]=                   //根据简谱列出各节拍
{
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,1,
  1+0.5,0.5,1+1,
  1,1,1,1,
  1,0.5,0.5,1,1,
  1,0.5,0.5,1,1,
  1,1,1,1,
  1,1,1,1,
  1,1,1,0.5,0.5,
  1,1,1,1,
  1+0.5,0.5,1+1,
};
float lsbeat[]={
  1,1,1,1,
  1,1,1+1,
  1,1,1,1,
  1,1,1+1,
  1,1,1,1,
  1,1,1+1,
  1,1,1,1,
  1,1,1+1,
  1,1,1,1,
  1,1,1+1,
  1,1,1,1,
  1,1,1+1
};

//自己定义一组频率和节拍
float beat={

};

//设置接口
int buzzerpin=3;
int ledpin=10;

void setup() {
  pinMode( buzzerpin,OUTPUT );
  pinMode(ledpin,OUTPUT);
  Serial.begin(9600);
}
//播放歌曲的函数
void start(int len,int buzzpin,int lepin,int *tune,float *beat){
  for(int x=0;x<len;x++)
  {
    tone(buzzpin,tune[x]);
    digitalWrite(lepin, HIGH); 
    delay(500*beat[x]);//与前一代码不同之处,这里将原来的500分为了400和100,分别控制led的开与关,对于蜂鸣器来说依然是500.
    digitalWrite(lepin, LOW);
    noTone(buzzpin);   
    delay(100);
  }
}
void loop() {
  String select;
  while(Serial.available()>0){
    select+=char(Serial.read());
    delay(2);
  }
  if(select!=""){
    int len;
    if(select=="Ode to Jo"){
      Serial.println("Next, we will play the Ode to Jo");
      len=sizeof(Eulogyofjoytune)/sizeof(Eulogyofjoytune[0]);
      start(len,buzzerpin,ledpin,Eulogyofjoytune,Eulogyofjoybeat);
    }else if(select=="little star"){
      Serial.println("Next, we will play the little star");
      len=sizeof(lstune)/sizeof(lstune[0]);
      start(len,buzzerpin,ledpin,lstune,lsbeat);
    }else{
      Serial.println("Sorry, there is no such song in the music library.");
    }
  }
  
}
图片加载失败

实验三 实时温度检测器

说明:此实验可以检测实时温度(虽然说不准)

/* 实验三 实时温度检测器 */
#include < wire.h >
#include < LiquidCrystal_I2C.h >     
#include < dht11.h >     
dht11 DHT;      
#define DHT11_PIN    
void setup(){  
  lcd.init(); // LCD初始化设置
  lcd.backlight(); // 打开LCD背光
  Serial.begin(9600); // 设置串口波特率9600   
  //串口输出”Type, status, Humidity(%), Temperature(C)”     
  Serial.println("Type,\tstatus,\tHumidity(%),\tTemperature(C)");      
  lcd.print("Humidity(%): "); //LCD屏显示” Humidity(%):”      
  lcd.setCursor(0, 1); //光标移到第2行,第一个字符     
  lcd.print("Temp(C): "); //LCD屏显示”Temp(C):”      
}
void loop() {     
  int chk; //chk用于存储DHT11传感器的数据      
  Serial.print("DHT11, \t");
  //读取 DHT11传感器的数据
  chk = DHT.read(DHT11_PIN);
  switch (chk){
  case DHTLIB_OK:
    Serial.print("OK,\t");
    break;
  case DHTLIB_ERROR_CHECKSUM:
    Serial.print("Checksum error,\t");
    break;
  case DHTLIB_ERROR_TIMEOUT:
    Serial.print("Time out error,\t");
    break;
  default:
    Serial.print("Unknown error,\t");
    break;
  }
  //串口显示温湿度值
  Serial.print(DHT.humidity,1);
  Serial.print(",\t");
  Serial.println(DHT.temperature,1);
  //LCD显示温湿度值
  lcd.setCursor(12, 0);
  lcd.print(DHT.humidity,1);
  lcd.setCursor(8, 1);
  lcd.print(DHT.temperature,1);
  delay(1000);
 }
图片加载失败

实验四 日历

说明:此实验可以做出电子日历,但是这个时间也不准,会快一些

/*实验四 日历*/
#include < IRremote.h >
#include < liquidCrystal_I2C.h >
liquidCrystal_I2C lcd(0x20,16,2);
int RECV_PIN=10;
int ALARM_PIN=4;
IRrecv irrecv(RECV_PIN);
decode_results results;

int Y1,Y2,Y3,Y4;
int M1,M2;
int D1,D2;
int H1,H2;
int MI1,MI2;
int S1,S2;
int Date;


void setup() {
    Serial. begin(9600);
    irrecv.enableIRIn();
    pinMode (ALARM_PIN, OUTPUT);
    lcd.init();
    lcd.backlight(); 
    Y1=1,Y2=9,Y3=9,Y4=9;//年份初始化
    M1=1,M2=2;//月份初始化
    D1=3,D2=1;//日期初始化
    H1=2,H2=3;//小时初始化
    MT1=5,MT2=8;//分钟初始化
    S1=5,S2=0;//秒数初始化
    Date=2;//星期初始化
    lcd.setCursor(10,1);
    switch(Date+1){
     case 1:lcd.print("Mon");break;
     case 2:lcd.print("Tue");break;
     case 3:lcd.print("Wes");break;
     case 4:lcd.print("Thu");break;
     case 5:lcd.print("Fri");break;
     case 6:lcd.print("Sat");break;
     case 7:lcd.print("Sun");break;
     }
delay(1000);
tita();

}

void loop() {
  lcd.setCursor(3.0);
  1cd.print(Y1);
  lcd.print(Y2);
  lcd.print(Y3);
  lcd.print(Y4);
  lcd.print("/");
  else if(results. value == OxFD8877){
    if(alarm_flag == true)
    {
      ∥保存闹钟变量
      xNob1ink();//取消光标闪烁
      modify_flag=false;
      alarm_flag=!alarm_flag;
      setAlarm();//保存闹铃时间
      //恢复时间
      Y1=temp_Y1, Y2=temp_Y2, Y3=temp_Y3, Y4=temp_Y4;
      M1=temp_M1, M2=temp_M2,D1=temp_D1, D2=temp_D2;
      H1=temp_H1, H2=temp_H2, MI1=temp_MI1, MI2=temp_MI2;
      S1=temp_S1, S2=temp_S2;
    }
    else{
      temp_Y1=Y1, temp_Y2=Y2, temp_Y3=Y3, temp_Y4=Y4, temp_M1=M1, temp_M2=M2, temp_D1=D1, temp_D2=D2, temp_H1=H1, temp_H2=H2, temp_MI1=MI1, temp_MI2=MI2, temp_S1=S1, temp_S2=S2;//保存设置闹钟前的当前时间
      modify_flag=true;
      buzzer_flag=false;
      x-1;
      y=1;
      xblink();
      modifyIndex=8;
      alarm_flag=true;
      }
     }
     //保存闹钟变量
     xNoblink();//取消光标闪烁
     modify_flag=false;
     alarm_flag=!alarm_flag;
     //保存闹铃时间
     setAlarm();
     //恢复时间
     Y1=temp_Y1, Y2=temp_Y2,Y3=temp_Y3,Y4=temp_Y4;
     M1=temp_M1, M2=temp_M2,D1=temp_D1,D2=temp_D2;
     H1=temp_H1,H2=temp_H2,MI1=temp_MI1, MI2=temp_MI2;
     S1=temp_S1, S2=temp_S2;
    }
else{

    }
  }

//恢复时间
Y1=temp_Y1, Y2=temp_Y2, Y3=temp_Y3, Y4=temp_Y4;
M1=temp_M1, M2=temp_M2, D1=temp_D1, D2=temp_D2;
H1=temp_H1, H2=temp_H2, MI1=temp_MI1, MI2=temp_MI2;
S1=temp_S1, S2=temp_S2;
else{

}
void calendarShowO
{
  lcd.setCursor(3,0);
  lcd.print(Y1);
  lcd.print(Y2);
  lcd.print(Y3);
  lcd.print(Y4);
  lcd.print("/");
  lcd.print(M1);
  lcd.print(M2);
  lcd.print("/");
  lcd.print(D1);
  lcd.print(D2);
  lcd.setCursor(1,1);
  lcd.print(H1);
  lcd.print(H2);
  lcd.print(":");
  lcd.print(MI1);
  lcd.print(MI2);
  lcd.print(":");
  lcd.print(S1);
  lcd.print(S2);
  lcd.setCursor(10,1);
  switch(Date+1){
    case 1:lcd.print("Mon");break;
    case 2:lcd.print("Tue");break;
    case 3:lcd.print("Wes");break;
    case 4:lcd.print("Thu");break;
    case 5:lcd.print("Fri");break;
    case 6:lcd.print("Sat");break;
    case 7:lcd.print("Sun");break;
}
void tita(){
  S2=S2+1:
  if(S2==10)
  {
   S2=0;
   S1=S1+1;
   if(S1==6)
   {
    S1=0:
    MI2=MI2+1;
    if(MI2==10)
    {
      MI2=0;
      MI1=MI1+1;
      if(MI1==6)
      {
        MT1=0;
        H2=H2+1;
        if(H1==2 && H2==4)
        {H1=0;
         H2=0;
         date();
      }
       if(H2==10)
       {
        H2=0;
        H1=H1+1;
       }
      }
    }
   }
  }
}
void date(){
  Date=(Date+1)%7;
  D2=D2+1;
  if(D2+D1*10>(dayOfMonth[M1*10+M2][ISYEARP(Y1*1000+Y2*100+Y3*10+Y40)])
  {
    D1=0;
    D2=1;
    M2=M2+1;
    if(M1==1 && M2==3)
    {
      M1=0;
      M2=1;
      Y4=Y4+1;
      if(Y4==10){
        Y4=0;
        Y3=Y3+1;
        if(Y3==10){
          Y3=0;
          Y2=Y2+1;
          if(Y2==10)
          {
            Y2=0;
            Y1=Y1+1;
            if(Y1==10)
            {
              Y1=0;
            }
          }
        }
      }
    }
    if(M2==10)
    {
      M2=0;M1=M1+1;
      }
     }
     if(D2==10)
      {
        D2=0;
        D1=D1+1;
      }
图片加载失败