119 lines
2.7 KiB
C++
119 lines
2.7 KiB
C++
/*
|
||
* @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);
|
||
}
|
||
} |