久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: arduino SCoop多線程庫和PS2鍵盤應(yīng)用—arduino智能溫室 [打印本頁]

作者: 阿斯頓ll    時間: 2020-3-11 19:40
標(biāo)題: arduino SCoop多線程庫和PS2鍵盤應(yīng)用—arduino智能溫室
由于都知道的原因,最近樓主在家閑來無事,搞了個這個項目。新人第一個項目,有可改進(jìn)之處請不吝賜教!
具體功能:
1.溫濕度控制。通過土壤濕度傳感器獲取土壤濕度,達(dá)到閾值時啟動水泵;通過lm35溫度傳感器獲取環(huán)境溫度,達(dá)到閾值時啟動風(fēng)扇(水泵,風(fēng)扇用8050三極管驅(qū)動);
2.溫濕度顯示。這個就不用多說了,用2004i2c接口lcd顯示溫濕度;
3.時間顯示。通過ds1302芯片獲取時間;顯示在lcd上;
4.溫濕度閾值與時間更改。通過ps2鍵盤更改溫濕度閾值,將數(shù)據(jù)儲存在eeprom中,開機自動讀取
硬件部分暫時還沒搞完,是把arduino搞出最小系統(tǒng)焊到洞洞板上,在接外設(shè)。由于師傅作業(yè)奇多(網(wǎng)課),估計得一段時間了。

代碼:

附上用到的庫:
DS1302.zip (124.53 KB, 下載次數(shù): 5)
SCoop.zip (35.81 KB, 下載次數(shù): 15)

作者: 阿斯頓ll    時間: 2020-3-12 10:27
。。。。。代碼不見了 重新傳
  1. #include <LiquidCrystal_I2C.h>
  2. #include <DS1302.h>
  3. #include <PS2Keyboard.h>
  4. #include <EEPROM.h>
  5. #include <SCoop.h>
  6. #include <stdlib.h>

  7. #define tvaddr 0
  8. #define lvaddr 1
  9. #define wvaddr 2

  10. LiquidCrystal_I2C lcd_0(0x27, 20, 4);
  11. DS1302 rtc(8, 7, 6);
  12. PS2Keyboard keyboard;

  13. int led_0 = A0;
  14. int m1 = 1;
  15. int m2 = 4;
  16. int lightSensor_0 = A1;
  17. int soilhumi = A2;
  18. int lm35 = A3;
  19. int temp;
  20. int humi;
  21. int illu;
  22. bool op = 0;
  23. String t;
  24. char tv1;
  25. String tv2;
  26. int tv3;
  27. char lv1;
  28. String lv2;
  29. int lv3;
  30. char wv1;
  31. String wv2;
  32. int wv3;
  33. char op1;
  34. String op2;
  35. int op3;
  36. char np1;
  37. String np2;
  38. int np3;
  39. char ip1;
  40. String ip2;
  41. int ip3;
  42. char c;
  43. const int DataPin = 3;
  44. const int IRQpin =  2;
  45. int numdata[7] = {0};

  46. void setup()
  47. {
  48.     lcd_0.init();
  49.     lcd_0.backlight();
  50.     lcd_0.setCursor(4, 0);
  51.     lcd_0.print("Intellegent");
  52.     lcd_0.setCursor(2, 1);;
  53.     lcd_0.print("Greenhouse  v4.0");
  54.     lcd_0.setCursor(6, 2);
  55.     lcd_0.print("based on");
  56.     lcd_0.setCursor(3, 3);
  57.     lcd_0.print("ATmega 328p-pu");
  58.     delay(2000);
  59.     lcd_0.clear();
  60.     lcd_0.setCursor(3, 0);
  61.     lcd_0.print("Setting up...");
  62.     pinMode(led_0, OUTPUT);
  63.     pinMode(m1, OUTPUT);
  64.     pinMode(m2, OUTPUT);
  65.     pinMode(lightSensor_0, INPUT);
  66.     pinMode(soilhumi, INPUT);
  67.     keyboard.begin(DataPin, IRQpin);
  68.     tv3 = EEPROM.read(tvaddr);
  69.     lv3 = EEPROM.read(lvaddr);
  70.     wv3 = EEPROM.read(wvaddr);  
  71.     delay(1200);
  72.     lcd_0.clear();
  73.     rtc.setTCR(TCR_OFF);
  74.     rtc.halt(false);
  75.     /*rtc.writeProtect(false);
  76.     rtc.setDOW(WEDNESDAY);         
  77.     rtc.setTime(19, 41, 00);      
  78.     rtc.setDate(11, 3, 2020);   
  79.     rtc.writeProtect(true);*/
  80.     lcd_0.setCursor(0, 1);
  81.     lcd_0.print("illu");
  82.     lcd_0.setCursor(0, 2);
  83.     lcd_0.print("humi");
  84.     lcd_0.setCursor(0, 3);
  85.     lcd_0.print("temp");
  86.     mySCoop.start();
  87. }

  88. void loop()
  89. {
  90.     yield();
  91. }

  92. defineTaskLoop(Getdata)
  93. {
  94.     humi = map(analogRead(soilhumi), 0, 1023, 100, 0);
  95.     illu = map(analogRead(lightSensor_0), 0, 1023, 0, 102.3);
  96.     temp = (5 * analogRead(lm35) * 100)/1024;
  97. }

  98. defineTaskLoop(Operate)
  99. {
  100.     if (illu < lv3)
  101.     {
  102.         digitalWrite(led_0, HIGH);
  103.     }
  104.     else
  105.     {
  106.         digitalWrite(led_0, LOW);
  107.     }
  108.      if (temp < tv3-1)
  109.      {
  110.        digitalWrite(m1, LOW);
  111.      }
  112.      else if (temp > tv3+1)
  113.      {
  114.        digitalWrite(m1, HIGH);
  115.      }
  116.     if (humi < wv3)
  117.     {
  118.         digitalWrite(m2, HIGH);
  119.     }
  120.     else
  121.     {
  122.         digitalWrite(m2, LOW);
  123.     }
  124.     if(keyboard.available())
  125.     {
  126.       if(keyboard.read == PS2_F1)
  127.       {
  128.         menu();
  129.       }
  130.     }
  131.     clockdate();
  132. }

  133. defineTaskLoop(Display)
  134. {
  135.     lcd_0.setCursor(7, 1);
  136.     lcd_0.print(illu);
  137.     lcd_0.setCursor(7, 2);
  138.     lcd_0.print(humi);
  139.     lcd_0.setCursor(7, 3);
  140.     lcd_0.print(temp);
  141.     if (illu < 10)
  142.     {
  143.        lcd_0.setCursor(8, 1);
  144.        lcd_0.print(" ");
  145.     }
  146.     if (illu < 100)
  147.     {
  148.        lcd_0.setCursor(9, 1);
  149.        lcd_0.print(" ");
  150.     }
  151.     if (humi < 100)
  152.     {
  153.        lcd_0.setCursor(9, 3);
  154.        lcd_0.print(" ");
  155.     }
  156.     if (humi < 10)
  157.     {
  158.        lcd_0.setCursor(8, 3);
  159.        lcd_0.print(" ");
  160.     }
  161.     if (temp < 100)
  162.     {
  163.        lcd_0.setCursor(9, 2);
  164.        lcd_0.print(" ");
  165.     }
  166.     if (temp < 10)
  167.     {
  168.        lcd_0.setCursor(8, 2);
  169.        lcd_0.print(" ");
  170.     }
  171. }

  172. void clockdate()
  173. {  
  174.       lcd_0.setCursor(0, 0);
  175.       lcd_0.print(rtc.getDateStr(FORMAT_LONG,FORMAT_LITTLEENDIAN, '/'));// check 1302 library and see FORMAT_BIGENDIAN:2010-01-01;FORMAT_LITTLEENDIAN:01-01-2010
  176.       lcd_0.print(" ");
  177.       lcd_0.print(rtc.getDOWStr());
  178.       lcd_0.print(" ");
  179.       lcd_0.print(rtc.getTimeStr());
  180. }

  181. void menu()
  182. {
  183.     lcd_0.clear();
  184.     lcd_0.setCursor(0, 0);
  185.     lcd_0.print("1--set time");
  186.     lcd_0.setCursor(0, 1);
  187.     lcd_0.print("2--set temp vaule");
  188.     lcd_0.setCursor(0, 2);
  189.     lcd_0.print("3--set light vaule");
  190.     lcd_0.setCursor(0, 3);
  191.     lcd_0.print("4--set water vaule");
  192.     c = keyboard.read();
  193.     switch (c)
  194.     {
  195.       case 1:
  196.       lcd_0.clear();
  197.       lcd_0.setCursor(0, 0);
  198.       lcd_0.print("Input:y,m,d,h,m,s,w.");
  199.       lcd_0.setCursor(0, 1);
  200.       lcd_0.print("Divide by ','");
  201.       t += char(keyboard.read());
  202.       lcd_0.setCursor(0, 2);
  203.       lcd_0.print(t);
  204.       delay(6000);
  205.       int j = 0;
  206.       for(int i = 0; i < t.length() ; i++)
  207.       {
  208.         if(t[i] == ',')
  209.         {
  210.           j++;
  211.         }
  212.         else
  213.         {
  214.           numdata[j] = numdata[j] * 10 + (t[i] - '0');
  215.         }
  216.       }
  217.       t = String("");
  218.       for(int i = 0; i < 7; i++)
  219.       {
  220.         
  221.         numdata[i] = 0;
  222.       }
  223.       rtc.writeProtect(false);
  224.       rtc.setDOW(numdata[6]);         
  225.       rtc.setTime(numdata[3], numdata[4], numdata[5]);      
  226.       rtc.setDate(numdata[2], numdata[1], numdata[0]-2000);   
  227.       rtc.writeProtect(true);
  228.       lcd_0.clear();
  229.       lcd_0.setCursor(0, 0);
  230.       lcd_0.print("Time had been set!");
  231.       delay(1500);
  232.       break;

  233.       case 2:
  234.       lcd_0.clear();
  235.       lcd_0.setCursor(0, 0);
  236.       lcd_0.print("Input temp value:");
  237.       tv1 = keyboard.read();
  238.       lcd_0.setCursor(0, 1);
  239.       lcd_0.print(tv1);
  240.       if (isDigit(tv1))
  241.       {
  242.         tv2 += tv1;
  243.       }
  244.       else if (tv1 == PS2_ENTER)
  245.       {
  246.         tv3 = tv2.toInt();
  247.         EEPROM.update(tvaddr, tv3);
  248.         lcd_0.clear();
  249.         lcd_0.setCursor(0, 0);
  250.         lcd_0.print("Tv had been set");
  251.         delay(1500);
  252.       }      
  253.       break;

  254.       case 3:
  255.       lcd_0.clear();
  256.       lcd_0.setCursor(0, 0);
  257.       lcd_0.print("Input light value:");
  258.       lv1 = keyboard.read();
  259.       lcd_0.setCursor(0, 1);
  260.       lcd_0.print(lv1);
  261.       if (isDigit(lv1))
  262.       {
  263.         lv2 += lv1;
  264.       }
  265.       else if (lv1 == PS2_ENTER)
  266.       {
  267.         lv3 = lv2.toInt();
  268.         EEPROM.update(lvaddr, lv3);
  269.         lcd_0.clear();
  270.         lcd_0.setCursor(0, 0);
  271.         lcd_0.print("Lv had been set");
  272.         delay(1500);
  273.       }      
  274.       break;

  275.       case 4:
  276.       lcd_0.clear();
  277.       lcd_0.setCursor(0, 0);
  278.       lcd_0.print("Input water value:");
  279.       wv1 = keyboard.read();
  280.       lcd_0.setCursor(0, 1);
  281.       lcd_0.print(wv1);
  282.       if (isDigit(wv1))
  283.       {
  284.         wv2 += wv1;
  285.       }
  286.       else if (wv1 == PS2_ENTER)
  287.       {
  288.         wv3 = wv2.toInt();
  289.         EEPROM.update(wvaddr, wv3);
  290.         lcd_0.clear();
  291.         lcd_0.setCursor(0, 0);
  292.         lcd_0.print("Wv had been set");
  293.         delay(1500);
  294.       }      
  295.       break;
  296.     }
  297. }
復(fù)制代碼





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久久亚洲精品 | 国产精品国产精品国产专区不蜜 | 亚洲欧洲激情 | 在线日韩中文字幕 | 一区二区三区四区电影 | 色综合激情| 久久久久国产一区二区 | 国产亚洲成av人片在线观看桃 | 性做久久久久久免费观看欧美 | 中文字幕一区在线 | 国产精品日韩高清伦字幕搜索 | 日韩视频在线播放 | 91精品国产91久久久久久密臀 | 特级a欧美做爰片毛片 | 国产精品不卡 | 午夜看片网站 | 亚洲在线一区二区 | 国产精品一区在线观看你懂的 | 久久91精品国产一区二区 | 亚洲精品中文字幕在线观看 | 国产综合久久久久久鬼色 | 91精品国产一区二区三区 | 日日操日日干 | 国产精品久久久 | 日韩1区2区| 一区二区三区国产视频 | 亚洲精品视频导航 | 午夜精品一区二区三区在线观看 | 99久久免费精品国产男女高不卡 | 亚洲乱码国产乱码精品精的特点 | 亚洲一区在线播放 | 国产精品视频网 | 亚洲啪啪一区 | 九九久久精品 | 久久精品一级 | 亚洲福利| 国产精品永久免费 | 99re在线视频免费观看 | 日日噜噜夜夜爽爽狠狠 | 黄色精品视频网站 | 欧美aaaaa |