。。。。。代碼不見了 重新傳- #include <LiquidCrystal_I2C.h>
- #include <DS1302.h>
- #include <PS2Keyboard.h>
- #include <EEPROM.h>
- #include <SCoop.h>
- #include <stdlib.h>
- #define tvaddr 0
- #define lvaddr 1
- #define wvaddr 2
- LiquidCrystal_I2C lcd_0(0x27, 20, 4);
- DS1302 rtc(8, 7, 6);
- PS2Keyboard keyboard;
- int led_0 = A0;
- int m1 = 1;
- int m2 = 4;
- int lightSensor_0 = A1;
- int soilhumi = A2;
- int lm35 = A3;
- int temp;
- int humi;
- int illu;
- bool op = 0;
- String t;
- char tv1;
- String tv2;
- int tv3;
- char lv1;
- String lv2;
- int lv3;
- char wv1;
- String wv2;
- int wv3;
- char op1;
- String op2;
- int op3;
- char np1;
- String np2;
- int np3;
- char ip1;
- String ip2;
- int ip3;
- char c;
- const int DataPin = 3;
- const int IRQpin = 2;
- int numdata[7] = {0};
- void setup()
- {
- lcd_0.init();
- lcd_0.backlight();
- lcd_0.setCursor(4, 0);
- lcd_0.print("Intellegent");
- lcd_0.setCursor(2, 1);;
- lcd_0.print("Greenhouse v4.0");
- lcd_0.setCursor(6, 2);
- lcd_0.print("based on");
- lcd_0.setCursor(3, 3);
- lcd_0.print("ATmega 328p-pu");
- delay(2000);
- lcd_0.clear();
- lcd_0.setCursor(3, 0);
- lcd_0.print("Setting up...");
- pinMode(led_0, OUTPUT);
- pinMode(m1, OUTPUT);
- pinMode(m2, OUTPUT);
- pinMode(lightSensor_0, INPUT);
- pinMode(soilhumi, INPUT);
- keyboard.begin(DataPin, IRQpin);
- tv3 = EEPROM.read(tvaddr);
- lv3 = EEPROM.read(lvaddr);
- wv3 = EEPROM.read(wvaddr);
- delay(1200);
- lcd_0.clear();
- rtc.setTCR(TCR_OFF);
- rtc.halt(false);
- /*rtc.writeProtect(false);
- rtc.setDOW(WEDNESDAY);
- rtc.setTime(19, 41, 00);
- rtc.setDate(11, 3, 2020);
- rtc.writeProtect(true);*/
- lcd_0.setCursor(0, 1);
- lcd_0.print("illu");
- lcd_0.setCursor(0, 2);
- lcd_0.print("humi");
- lcd_0.setCursor(0, 3);
- lcd_0.print("temp");
- mySCoop.start();
- }
- void loop()
- {
- yield();
- }
- defineTaskLoop(Getdata)
- {
- humi = map(analogRead(soilhumi), 0, 1023, 100, 0);
- illu = map(analogRead(lightSensor_0), 0, 1023, 0, 102.3);
- temp = (5 * analogRead(lm35) * 100)/1024;
- }
- defineTaskLoop(Operate)
- {
- if (illu < lv3)
- {
- digitalWrite(led_0, HIGH);
- }
- else
- {
- digitalWrite(led_0, LOW);
- }
- if (temp < tv3-1)
- {
- digitalWrite(m1, LOW);
- }
- else if (temp > tv3+1)
- {
- digitalWrite(m1, HIGH);
- }
- if (humi < wv3)
- {
- digitalWrite(m2, HIGH);
- }
- else
- {
- digitalWrite(m2, LOW);
- }
- if(keyboard.available())
- {
- if(keyboard.read == PS2_F1)
- {
- menu();
- }
- }
- clockdate();
- }
- defineTaskLoop(Display)
- {
- lcd_0.setCursor(7, 1);
- lcd_0.print(illu);
- lcd_0.setCursor(7, 2);
- lcd_0.print(humi);
- lcd_0.setCursor(7, 3);
- lcd_0.print(temp);
- if (illu < 10)
- {
- lcd_0.setCursor(8, 1);
- lcd_0.print(" ");
- }
- if (illu < 100)
- {
- lcd_0.setCursor(9, 1);
- lcd_0.print(" ");
- }
- if (humi < 100)
- {
- lcd_0.setCursor(9, 3);
- lcd_0.print(" ");
- }
- if (humi < 10)
- {
- lcd_0.setCursor(8, 3);
- lcd_0.print(" ");
- }
- if (temp < 100)
- {
- lcd_0.setCursor(9, 2);
- lcd_0.print(" ");
- }
- if (temp < 10)
- {
- lcd_0.setCursor(8, 2);
- lcd_0.print(" ");
- }
- }
- void clockdate()
- {
- lcd_0.setCursor(0, 0);
- lcd_0.print(rtc.getDateStr(FORMAT_LONG,FORMAT_LITTLEENDIAN, '/'));// check 1302 library and see FORMAT_BIGENDIAN:2010-01-01;FORMAT_LITTLEENDIAN:01-01-2010
- lcd_0.print(" ");
- lcd_0.print(rtc.getDOWStr());
- lcd_0.print(" ");
- lcd_0.print(rtc.getTimeStr());
- }
- void menu()
- {
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("1--set time");
- lcd_0.setCursor(0, 1);
- lcd_0.print("2--set temp vaule");
- lcd_0.setCursor(0, 2);
- lcd_0.print("3--set light vaule");
- lcd_0.setCursor(0, 3);
- lcd_0.print("4--set water vaule");
- c = keyboard.read();
- switch (c)
- {
- case 1:
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Input:y,m,d,h,m,s,w.");
- lcd_0.setCursor(0, 1);
- lcd_0.print("Divide by ','");
- t += char(keyboard.read());
- lcd_0.setCursor(0, 2);
- lcd_0.print(t);
- delay(6000);
- int j = 0;
- for(int i = 0; i < t.length() ; i++)
- {
- if(t[i] == ',')
- {
- j++;
- }
- else
- {
- numdata[j] = numdata[j] * 10 + (t[i] - '0');
- }
- }
- t = String("");
- for(int i = 0; i < 7; i++)
- {
-
- numdata[i] = 0;
- }
- rtc.writeProtect(false);
- rtc.setDOW(numdata[6]);
- rtc.setTime(numdata[3], numdata[4], numdata[5]);
- rtc.setDate(numdata[2], numdata[1], numdata[0]-2000);
- rtc.writeProtect(true);
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Time had been set!");
- delay(1500);
- break;
- case 2:
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Input temp value:");
- tv1 = keyboard.read();
- lcd_0.setCursor(0, 1);
- lcd_0.print(tv1);
- if (isDigit(tv1))
- {
- tv2 += tv1;
- }
- else if (tv1 == PS2_ENTER)
- {
- tv3 = tv2.toInt();
- EEPROM.update(tvaddr, tv3);
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Tv had been set");
- delay(1500);
- }
- break;
- case 3:
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Input light value:");
- lv1 = keyboard.read();
- lcd_0.setCursor(0, 1);
- lcd_0.print(lv1);
- if (isDigit(lv1))
- {
- lv2 += lv1;
- }
- else if (lv1 == PS2_ENTER)
- {
- lv3 = lv2.toInt();
- EEPROM.update(lvaddr, lv3);
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Lv had been set");
- delay(1500);
- }
- break;
- case 4:
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Input water value:");
- wv1 = keyboard.read();
- lcd_0.setCursor(0, 1);
- lcd_0.print(wv1);
- if (isDigit(wv1))
- {
- wv2 += wv1;
- }
- else if (wv1 == PS2_ENTER)
- {
- wv3 = wv2.toInt();
- EEPROM.update(wvaddr, wv3);
- lcd_0.clear();
- lcd_0.setCursor(0, 0);
- lcd_0.print("Wv had been set");
- delay(1500);
- }
- break;
- }
- }
復制代碼 |