HardWare/esp8266/Project/turangshidu/turangshidu.ino

119 lines
2.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* @Author: dugulingping
* @Date: 2022-06-09 16:14:32
* @LastEditTime: 2022-06-12 23:28:17
* @LastEditors: dugulingping
* @Description:
* @FilePath: \test\turangshidu\turangshidu.ino
*/
// 定义字库
unsigned char LED_0F[] = {
// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
// 定义位
unsigned char LED_BIT[] = {
// 1 2 3 4 1+2 3+4 1~4
0x01,0x02,0x04,0x08,0x03,0x0C,0x0F
};
// 土壤湿度
#define PIN_AO A0
#define PIN_DO 4
// LED
#define SCLK 14
#define RCLK 13
#define DIO 15
int M0 = 1024; // 在空气中AO读取的值最大为1024代表干燥时的读数
int M1 = 550; // 浸泡在水里的最小值 550 最小值会改变代表100%湿度
int data[2] = {0};
void setup(){
pinMode(PIN_AO, INPUT);
pinMode(PIN_DO, INPUT);
// 让三个脚都是输出状态
pinMode(SCLK,OUTPUT);
pinMode(RCLK,OUTPUT);
pinMode(DIO,OUTPUT);
Serial.begin(115200);
}
int delay_date = 0; // 定时
void loop(){
if(delay_date < 2000){
delay_date += 4;
delay(4);
}else{
delay_date = 0;
soilMoisture();
}
if(!data[0]){
LED_display(LED_BIT[6], 0xBF);
return;
}
// 模拟量
int num1 = data[0] / 1000;
int num2 = data[0] / 100 % 10;
int num3 = data[0] / 10 % 10;
int num4 = data[0] % 10;
LED_display(LED_BIT[3], LED_0F[num1]);
LED_display(LED_BIT[2], LED_0F[num2]);
LED_display(LED_BIT[1], LED_0F[num3]);
LED_display(LED_BIT[0], LED_0F[num4]);
// delay(3000);
// num1 = data[1] / 10;
// num2 = data[1] % 10;
// LED_display(LED_BIT[0], LED_0F[0xBF]);
// LED_display(LED_BIT[1], LED_0F[0xBF]);
// LED_display(LED_BIT[2], LED_0F[num1]-128);
// LED_display(LED_BIT[3], LED_0F[num2]);
// delay(3000);
}
void soilMoisture(){
data[0] = analogRead(PIN_AO);
Serial.print("AO:");
Serial.println(data[0]);
Serial.print("DO=");
Serial.println(digitalRead(PIN_DO));
float HUMI = (M0 - analogRead(PIN_AO)) / ((M0 - M1) / 100); // 将湿度模拟量转换成数字量
Serial.print("HUMI= ");
Serial.print(HUMI);
Serial.println("% ");
data[1] = HUMI;
}
void LED_display(unsigned char bit, unsigned char digit ){
LED_OUT(digit);
LED_OUT(bit);
digitalWrite(RCLK,LOW);
digitalWrite(RCLK,HIGH);
delay(1);
}
void LED_OUT(unsigned char X){
unsigned char i;
for(i=8;i>=1;i--)
{
if(X&0x80)
digitalWrite(DIO,HIGH);
else
digitalWrite(DIO,LOW);
X<<=1;
digitalWrite(SCLK,LOW);
digitalWrite(SCLK,HIGH);
}
}