写了一段代码,前半部分温度模块测温度,串口屏显示数字,蜂鸣器报警这一部分功能已经实现。后半部分有关于红外发出和接收并且蜂鸣器报警这一功能实现不出来,求大神指导!谢谢! - //DATA TO A4
- //CLK TO A5
- #include "Wire.h"
- #include "LiquidCrystal.h"
- #include <IRSendRev.h>
- #include <OneWire.h>
- #include <DallasTemperature.h>
- #define IR_OUT_PIN 3 //红外线发射3号引脚
- // 定义DS18B20数据口连接arduino的4号IO上
- #define ONE_WIRE_BUS 4
- // 初始连接在单总线上的单总线设备
- OneWire oneWire(ONE_WIRE_BUS);
- DallasTemperature sensors(&oneWire);
- int buzzer=5;//设置控制蜂鸣器的数字IO脚
- int Receive=2;
- // Connect via i2c, default address #0 (A0-A2 not jumpered)
- LiquidCrystal lcd(0);
- unsigned char d[] = {15, 70, 70, 20, 60, 10, 1, 2, 3, 4,5,6,7,8,9,10};//接受
- unsigned char dta[20];//发射
- void setup() {
-
- pinMode(buzzer,OUTPUT);//设置数字IO脚模式,OUTPUT为输出
- pinMode(Receive,INPUT_PULLUP);
- // set up the LCD's number of rows and columns:
- lcd.begin(16, 2);
- Serial.begin(38400);
- IR.Init(IR_OUT_PIN);//红外线接收初始化
- digitalWrite(5,HIGH);
- sensors.begin();//温度传感器初始化
- }
- void loop() {
- sensors.requestTemperatures(); // 发送命令获取温度
- int val=sensors.getTempCByIndex(0) ;
- lcd.print(val);
- lcd.print("C");
- delay(2000);
- lcd.clear();
- lcd.setBacklight(HIGH);
- if(val<21)
- {
- digitalWrite(5,LOW);//低电平触发蜂鸣器
- delay(1000);
- digitalWrite(5,HIGH);
- delay(500);
- }
- else
- {
- digitalWrite(5,HIGH);
- delay(1000);
- }
- IR.Send(d, 38);//sent the data via 38Kz IR
- delay(1000);
- if(IR.IsDta())
- {
- // IR.Recv(dta);
- int length= IR.Recv(dta);
- for (int i =0;i<length;i++)
- {
- Serial.print(dta[i]);
- Serial.print("\t");
- }
- Serial.println();
- }
- if(IR.IsDta()){
- int length=IR.Recv(dta);
- if(length==0){
- digitalWrite(5,HIGH);
- delay(1000);
- }
- else {
- digitalWrite(5,LOW);//低电平触发蜂鸣器
- delay(100);
- digitalWrite(5,HIGH);
- delay(100);
- }
- }
- else{
- digitalWrite(5,HIGH);
- delay(1000);}
- }
复制代码 |