Flowerpot/智能节水花盆/智能节水花盆.ino

203 lines
6.3 KiB
Arduino
Raw Normal View History

2023-03-14 17:16:29 +00:00
/*
Name: .ino
Created: 2023/3/15 0:22:26
Author: JasonYANG17
2023-03-14 17:16:29 +00:00
*/
//导入配置库
2023-03-14 17:16:29 +00:00
#include <GFX4d.h>
#include <UnoWiFiDevEd.h>
#include <Adafruit_SSD1306.h> //驱动128x64 and 128x32 的屏幕显示的库
#include <Adafruit_GFX.h> //Arduino的图形库
#include <Wire.h>
#include <SPI.h>
//配置屏幕像素
2023-03-14 17:16:29 +00:00
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
//定义OLED恢复引脚无则定义为-1
2023-03-14 17:16:29 +00:00
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);//配置数据
2023-03-14 17:16:29 +00:00
// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain
int M0 = 1024; //在空气中AO读取的值最大为1024代表干燥时的读数
int M1 = 0; //浸泡在水里的最小值 464最小值会改变代表100%湿度
int PIN_AO = 14; //与wifi不冲突的pin
int in1 = 0;
int in2 = 2;
int LED = 15;
#include <DHT.h>
#define DHTPIN 13//刚才插得2号引脚
#define DHTTYPE DHT11//定义类型
DHT dht(DHTPIN, DHTTYPE);//进行初始化设置
int buttonPin = 12; // 将开关连接到
int buttonState = 0;//开关状态为0
2023-03-14 17:16:29 +00:00
void setup() {
Serial.begin(9600);
dht.begin();//DHT开始工作
pinMode(PIN_AO, INPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(LED, OUTPUT);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(LED, LOW);
pinMode(buttonPin, INPUT_PULLUP); // 设置开关模式
2023-03-14 17:16:29 +00:00
//Serial.println("OLED FeatherWing test"); //串口输出信息
display.begin(SSD1306_SWITCHCAPVCC, 0x3c); //初始化OLED并设置其IIC地址为 0x3C
display.clearDisplay(); //清屏
delay(200);
display.setTextSize(1.3);//设置文本大小
display.setTextColor(SSD1306_WHITE);//设置字体颜色
2023-03-14 17:16:29 +00:00
display.setCursor(0, 0); //设置光标的位置
//绘制像素点
// display.drawPixel(64, 32, WHITE);//(x坐标y坐标颜色)
//绘制水平线
// display.drawFastHLine(64,32,64,SSD1306_WHITE);//(x起点y起点长度颜色)
//绘制竖直线
// display.drawFastVLine(64,10,50,SSD1306_WHITE);
//绘制线
// display.drawLine(0,0,128,64,SSD1306_WHITE);//x起y起x终y终
//绘制空心矩形
// display.drawRect(0,0,128,64,SSD1306_WHITE);//(左上角x坐标左上角y坐标矩形长矩形宽)
//绘制实心矩形
//display.fillRect(20,10,88,44,SSD1306_WHITE);//同上
//点亮全屏
// display.fillScreen(SSD1306_WHITE);
//绘制空心圆
//display.drawCircle(64,32,32,SSD1306_WHITE);//(圆心x坐标圆心y坐标半径)
//绘制实心圆
//display.fillCircle(64,32,31,SSD1306_WHITE);
//绘制空心三角形
//display.drawTriangle(63,0, 0,63, 127,63, SSD1306_WHITE);//(第一顶点坐标[x,y],第二,第三)
//绘制实心三角形
// display.fillTriangle(63,0, 0,63, 127,63, SSD1306_WHITE);
//绘制空心圆角矩形
//display.drawRoundRect(10,5,107, 43,8, SSD1306_WHITE);//(左上角x左上角y矩形长矩形宽矩形圆角半径)
//实心圆角
//display.fillRoundRect(10,5,107,53,3, SSD1306_WHITE);
//绘制Bitmap图像
//Bimap图像数据
display.display();
display.println("");
display.println("");
display.println(" Wellcome To\n YANG\nIntelligent Flowerpot");
display.display();
delay(8000);
// display.begin(SSD1306_SWITCHCAPVCC, 0x3c); //初始化OLED并设置其IIC地址为 0x3C
}
void loop() {
// delay(2000);
buttonState = digitalRead(buttonPin);//读取开关通断模式,并导入至开关状态
2023-03-14 17:16:29 +00:00
Serial.println(analogRead(14));//湿度传感器接ESP32上的GPIO号
delay(100);
if (buttonState == LOW) { // 判断是否按下开关
display.clearDisplay(); //清屏
delay(200);
display.setTextSize(1.3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0); //设置光标的位置
// display.clearDisplay();
//delay(8000);
digitalWrite(in2, LOW);
digitalWrite(in1, LOW);
digitalWrite(LED, LOW);
display.println("Hello, user!");
display.println("");
display.println("Enter Emergency\nBraking");
display.println("");
display.println("All programs have\nbeen closed for you");
display.display();
// actually display all of the above
delay(2000);
}
else {
float h = dht.readHumidity();//读湿度
float t = dht.readTemperature();//读湿度
Serial.print("Humidity");//湿度
Serial.print(h);
Serial.println("%");
Serial.print("Temperatrue");//温度
Serial.print(t);
Serial.println("C");
display.clearDisplay();
delay(200);
display.setTextSize(1.3);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0); //设置光标的位置
float HUMI = ((M0 - analogRead(PIN_AO)) / ((M0 - M1) / 100)); //将湿度模拟量转换成数字量
if (HUMI > 100.00) {
HUMI = 100;
}
if (HUMI > 80) {
digitalWrite(in2, LOW);
digitalWrite(in1, LOW);
digitalWrite(LED, LOW);
}
else {
digitalWrite(in2, LOW);
digitalWrite(in1, HIGH);
digitalWrite(LED, HIGH);
}
Serial.print("HUMI= ");
Serial.print(HUMI);
Serial.println("% ");
display.println("---------YANG--------");
display.println("");
display.print("Temperature: ");
display.print(t);
display.println("C");
display.print("Humidity: ");//湿度
display.print(h);
display.println("%");
display.print("Soil Moisture: ");
display.println(HUMI);
if (HUMI > 80) {
display.println("Watter: OFF");
display.println("Photosynthesis: OFF");
}
else {
display.println("Watter: ON");
display.println("Photosynthesis: ON");
}
display.println("---Have a nice DAY!--");
//delay(1000);
display.display();
}
}