查看:1813|回复:1
此项目没有使用中断,代码可以运行
为了读者有更好的体验,笔者进行了详细的注释
创作不易,请读者给个小心心吧
所有库文件笔者已经打包请在上面的文件下载
2021 12 31
by-王思源
Arduino源程序如下:
复制代码
new.h
复制代码
pitches.h
复制代码
为了读者有更好的体验,笔者进行了详细的注释
创作不易,请读者给个小心心吧
所有库文件笔者已经打包请在上面的文件下载
2021 12 31
by-王思源
Arduino源程序如下:
- #include "pitches.h"//调用蜂鸣器头文件
- #include "dht11.h"//调用温湿度头文件
- #include "new.h" //调用头文件
- #include "Wire.h"//调用总线文件
- #include "Servo.h"//调用伺服马达文件
- #include "LiquidCrystal_I2C.h"//调用1602文件
- #define DHT11PIN A0 //定意温湿度的I/O口是A0
- dht11 dht11; //初始化dhrll
- Servo myservo; //初始化伺服电机
- int ledpin = 3;
- int TrigPin = 4; //定义超声波的接口
- int EchoPin = 5;
- int tonepin = 6;
- int dianji = 7;
- int lighttrail = A1;
- int mx =A2;
- float distance;
- int swi = A4;
- int mxq;
- LiquidCrystal_I2C mylcd(0x27, 16, 2);//、、、、、、、、、、、、、、、用了scl和sda、、、、、、、、、0和1接口不能用、、、、、、、、、、、、、
- //初始化1602
- int pp;
- void tempearture(int temp) {
- Serial.println(temp);
- if (temp > 15) {
- digitalWrite(dianji, LOW);
- digitalWrite(ledpin, HIGH);
- // int length = sizeof(tune) / sizeof(tune[0]);//、、、、、、、、、、数组长度提取
- // for (int x = 0; x< length; x++) //循环音符的次数
- // {
- // tone(tonepin, tune[x]); //依次播放tune数组元素,即每个音符
- // delay(400 * duration[x]); //每个音符持续的时间,即节拍duration,400是调整时间的越大,曲子速度越慢,越小曲子速度越快
- // noTone(tonepin);//停止当前音符,进入下一音符
- // }
- if (!temp) {
- digitalWrite(dianji, LOW);
- }
- } else
- {
- digitalWrite(dianji, HIGH);
- }
- }
- void dis(float distance,float mqx) {
- Serial.print(distance);
- Serial.print("m");
- Serial.println();
- if (distance< 0.5)
- {
- digitalWrite(ledpin, HIGH);
- Serial.println("灯亮");
- for (int thisNote = 0; thisNote< 8; thisNote++) {
- int noteDuration = 1000 / noteDurations[thisNote];
- tone(tonepin, tune[thisNote], noteDuration);
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- noTone(17);
- }
- }
- if (mqx >20)
- {
- digitalWrite(ledpin, HIGH);
- Serial.println("灯亮");
- for (int thisNote = 0; thisNote< 8; thisNote++) {
- int noteDuration = 1000 / noteDurations[thisNote];
- tone(tonepin, tune[thisNote], noteDuration);
- int pauseBetweenNotes = noteDuration * 1.30;
- delay(pauseBetweenNotes);
- noTone(17);
- }
- }
- else
- {
- digitalWrite(ledpin, LOW);
- Serial.println("灯灭");
- }
- }
- void tempss(int pp, int hump, float distance) {
- mylcd.setCursor(0, 0);
- mylcd.print("T :");
- mylcd.setCursor(4, 0);
- mylcd.print(pp);
- mylcd.setCursor(0, 1);
- mylcd.print("H :");
- mylcd.setCursor(4, 1);
- mylcd.print(hump);
- mylcd.setCursor(7, 0);
- mylcd.print("D :");
- mylcd.setCursor(10, 0);
- mylcd.print(distance);
- }
- void setup() //建立函数
- {
- mylcd.init(); //、、、、、、、、、、、、、、、、、、、、、、、初始化liquidcrytal_2c
- mylcd.backlight();
- myservo.attach(9);
- pinMode(dianji, OUTPUT);
- pinMode(ledpin, OUTPUT);
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- pinMode(mx, INPUT);
- pinMode(swi,INPUT);
- Serial.begin(9600);
- Serial.println();
- }
- void loop() //、、、、、、、、、、、、、、、、、、、、、、、、主函数
- {
- int cc = analogRead(swi);
- int mxq = analogRead(mx);
- pp= (swi*0.0048828125*100);
- Serial.println("lailia");
- Serial.println(pp);
- digitalWrite(TrigPin, LOW);
- delayMicroseconds(2);
- digitalWrite(TrigPin, HIGH);
- delayMicroseconds(10);
- digitalWrite(TrigPin, LOW);
- distance = pulseIn(EchoPin, HIGH) / 58.00 / 100;//、、、、、、、、、、距离计算
- Serial.println("\n");
- dht11.read(DHT11PIN); //、、、、、、、、、、、、、、、、、、、、、、读取dth11的温度以便于复赋值
- Serial.print("湿度 (%): ");
-
Serial.println((float)dht11.humidity, 4);
- Serial.print("温度 (oC): ");
-
Serial.println((float)dht11.temperature, 4);
- // int temp = (float)dht11.temperature;
- int hump = (float)dht11.humidity;
- tempearture(pp); //、、、、、、、、、、、、、、、、、、、、、👉温度控制如果温度过高会开启温度过高保护
- tempss(pp, hump, distance); //、、、、、、、、、、、、、、、、、& #128073;液晶屏显示,船了三个参数,分别是温度湿度还有距离
- dis(distance,mxq); //、、、、、、、、、、、、、、、、、、、、、👉距离函数如果距离过高会开启蜂鸣器
- int val = analogRead(lighttrail); // reads the value of the potentiometer (value between 0 and 1023)
- val = map(val, 0, 100, 100, 0); // scale it for use with the servo (value between 0 and 180)
- myservo.write(val);
- delay(900);
- }
- double Fahrenheit(double celsius)
- {
- return 1.8 * celsius + 32;
- } //摄氏温度度转化为华氏温度
- double Kelvin(double celsius)
- {
- return celsius + 273.15;
- } //摄氏温度转化为开氏温度
- // 露点(点在此温度时,空气饱和并产生露珠)
-
// 参考: http://wahiduddin.net/calc/density_algorithms.htm
- double dewPoint(double celsius, double humidity)
- {
- double A0= 373.15/(273.15 + celsius);
- double SUM = -7.90298 * (A0-1);
- SUM += 5.02808 * log10(A0);
- SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
-
SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
- SUM += log10(1013.246);
- double VP = pow(10, SUM-3) * humidity;
- double T = log(VP/0.61078); // temp var
- return (241.88 * T) / (17.558-T);
- }
- // 快速计算露点,速度是5倍dewPoint()
-
// 参考: http://en.wikipedia.org/wiki/Dew_point
- double dewPointFast(double celsius, double humidity)
- {
- double a = 17.271;
- double b = 237.7;
- double temp = (a * celsius) / (b + celsius) + log(humidity/100);
- double Td = (b * temp) / (a - temp);
- return Td;
- }
pitches.h
- #define NOTE_B0 31
- #define NOTE_C1 33
- #define NOTE_CS1 35
- #define NOTE_D1 37
- #define NOTE_DS1 39
- #define NOTE_E1 41
- #define NOTE_F1 44
- #define NOTE_FS1 46
- #define NOTE_G1 49
- #define NOTE_GS1 52
- #define NOTE_A1 55
- #define NOTE_AS1 58
- #define NOTE_B1 62
- #define NOTE_C2 65
- #define NOTE_CS2 69
- #define NOTE_D2 73
- #define NOTE_DS2 78
- #define NOTE_E2 82
- #define NOTE_F2 87
- #define NOTE_FS2 93
- #define NOTE_G2 98
- #define NOTE_GS2 104
- #define NOTE_A2 110
- #define NOTE_AS2 117
- #define NOTE_B2 123
- #define NOTE_C3 131
- #define NOTE_CS3 139
- #define NOTE_D3 147
- #define NOTE_DS3 156
- #define NOTE_E3 165
- #define NOTE_F3 175
- #define NOTE_FS3 185
- #define NOTE_G3 196
- #define NOTE_GS3 208
- #define NOTE_A3 220
- #define NOTE_AS3 233
- #define NOTE_B3 247
- #define NOTE_C4 262
- #define NOTE_CS4 277
- #define NOTE_D4 294
- #define NOTE_DS4 311
- #define NOTE_E4 330
- #define NOTE_F4 349
- #define NOTE_FS4 370
- #define NOTE_G4 392
- #define NOTE_GS4 415
- #define NOTE_A4 440
- #define NOTE_AS4 466
- #define NOTE_B4 494
- #define NOTE_C5 523
- #define NOTE_CS5 554
- #define NOTE_D5 587
- #define NOTE_DS5 622
- #define NOTE_E5 659
- #define NOTE_F5 698
- #define NOTE_FS5 740
- #define NOTE_G5 784
- #define NOTE_GS5 831
- #define NOTE_A5 880
- #define NOTE_AS5 932
- #define NOTE_B5 988
- #define NOTE_C6 1047
- #define NOTE_CS6 1109
- #define NOTE_D6 1175
- #define NOTE_DS6 1245
- #define NOTE_E6 1319
- #define NOTE_F6 1397
- #define NOTE_FS6 1480
- #define NOTE_G6 1568
- #define NOTE_GS6 1661
- #define NOTE_A6 1760
- #define NOTE_AS6 1865
- #define NOTE_B6 1976
- #define NOTE_C7 2093
- #define NOTE_CS7 2217
- #define NOTE_D7 2349
- #define NOTE_DS7 2489
- #define NOTE_E7 2637
- #define NOTE_F7 2794
- #define NOTE_FS7 2960
- #define NOTE_G7 3136
- #define NOTE_GS7 3322
- #define NOTE_A7 3520
- #define NOTE_AS7 3729
- #define NOTE_B7 3951
- #define NOTE_C8 4186
- #define NOTE_CS8 4435
- #define NOTE_D8 4699
- #define NOTE_DS8 4978
- #define NOTE_D0 -1
- #define NOTE_D1 294
- #define NOTE_D2 330
- #define NOTE_D3 350
- #define NOTE_D4 393
- #define NOTE_D5 441
- #define NOTE_D6 495
- #define NOTE_D7 556
- #define NOTE_DL1 147
- #define NOTE_DL2 165
- #define NOTE_DL3 175
- #define NOTE_DL4 196
- #define NOTE_DL5 221
- #define NOTE_DL6 248
- #define NOTE_DL7 278
- #define NOTE_DH1 589
- #define NOTE_DH2 661
- #define NOTE_DH3 700
- #define NOTE_DH4 786
- #define NOTE_DH5 882
- #define NOTE_DH6 990
- #define NOTE_DH7 112
- #define WHOLE 1
- #define HALF 0.5
- #define QUARTER 0.25
- #define EIGHTH 0.25
- #define SIXTEENTH 0.625
- int melody[] = {
- NOTE_C4, NOTE_G3, NOTE_GS3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_DS8
- };
- int noteDurations[] = {
- 4, 8, 8, 4, 4, 4, 4, 4
- };
- int tune[] =
- {
- NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0,
- NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0, NOTE_D6,
- NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6, NOTE_D0, NOTE_D6,
- NOTE_DH1, NOTE_D6, NOTE_D5, NOTE_DH1, NOTE_D6, NOTE_D0,
- NOTE_D1, NOTE_D1, NOTE_D3,
- NOTE_D1, NOTE_D1, NOTE_D3, NOTE_D0,
- NOTE_D6, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
- NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
- NOTE_DH1, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D6,
- NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
- NOTE_D7, NOTE_D7, NOTE_D5, NOTE_D3,
- NOTE_D5,
- NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
- NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D3, NOTE_D0,
- NOTE_DH1, NOTE_D0, NOTE_D6, NOTE_D6, NOTE_D5, NOTE_D5, NOTE_D6, NOTE_D6,
- NOTE_D0, NOTE_D5, NOTE_D1, NOTE_D2, NOTE_D0,
- NOTE_D3, NOTE_D3, NOTE_D1, NOTE_DL6,
- NOTE_D1,
- NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
- NOTE_D3, NOTE_D5, NOTE_D6, NOTE_D6,
- NOTE_DH1, NOTE_D0, NOTE_D7, NOTE_D5,
- NOTE_D6,
- };
- //曲子的节拍,即音符持续时间
- float duration[] =
- {
- 1, 1, 0.5, 0.5, 1,
- 0.5, 0.5, 0.5, 0.5, 1, 0.5, 0.5,
- 0.5, 1, 0.5, 1, 0.5, 0.5,
- 0.5, 0.5, 0.5, 0.5, 1, 1,
- 1, 1, 1 + 1,
- 0.5, 1, 1 + 0.5, 1,
- 1, 1, 0.5, 0.5, 1,
- 0.5, 1, 1 + 0.5, 1,
- 0.5, 0.5, 0.5, 0.5, 1 + 1,
- 0.5, 1, 1 + 0.5, 1,
- 1 + 1, 0.5, 0.5, 1,
- 1 + 1 + 1 + 1,
- 0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
- 0.5, 1, 0.5, 1, 1,
- 0.5, 0.5, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25, 0.5 + 0.25, 0.25,
- 0.5, 1, 0.5, 1, 1,
- 1 + 1, 0.5, 0.5, 1,
- 1 + 1 + 1 + 1,
- 0.5, 1, 0.5, 1 + 1,
- 0.5, 1, 0.5, 1 + 1,
- 1 + 1, 0.5, 0.5, 1,
- 1 + 1 + 1 + 1
- };