كود أردوينو كامل للتحكم الذكي في مستودع
هيدروبونيك زراعة أسماك نباتات الجزء السادس (6)
(شرح الكود / شرح لقسم void loop / الجزء "ج" )
Arduino-code-farme-hydroponic-control
===========
كود أردوينو كامل للتحكم الذكي في مستودع هيدروبونيك (زراعة أسماك نباتات او ورقيات...) بالكامل مجرب لن تحتاج لأيدي عاملة به تقريبا إلا للأعمال الروتينية والتفقدات... ونظرا لأن الموضوع طويل فقد تم تقسيمه لسبعة أجزاء وهذا هو الجزء السادس سنتعرف فيه على شرح لقسم void loop / الجزء "ج"...
الكود مع الشرح / شرح لقسم void loop / الجزء "ج"
===========================================
//---------------------الواجهة 2 للعرض
---------------------
تشغيل مراوح التهوية وادخال واخراج الهواء للممستودع في اوقات محددة
//تشغيل
الVn
if ((Ti >= 26 && Min
>= 0 && Min <= 45)
|| (Hor == hours1 && Min == 1)
|| (Hor == hours1 && Min == 2)
|| (Hor == 9 && Min == 1)
|| (Hor == 9 && Min == 2)
|| (Hor == 13 && Min == 1)
|| (Hor == 13 && Min == 2)
|| (Hor == 15 && Min == 1)
|| (Hor == 15 && Min == 2))
{digitalWrite(Vn, HIGH);
lcd1.setCursor(0, 3);
lcd1.print("Vn>");
RemoteXY.led_Vn_g = 255;
strcpy (RemoteXY. text_Vn, "Vn>");}
else {
digitalWrite(Vn, LOW);
lcd1.setCursor(0, 3);
lcd1.print("Vn<");
RemoteXY.led_Vn_g = 0;
strcpy (RemoteXY. text_Vn, "Vn<");}
تشغيل مراوح تهوية النباتات...
//تشغيل
الFn
if ((Ti >= 26 && Min
>= 1 && Min <= 46)
|| (Hor == hours1 && Min == 2)
|| (Hor == hours1 && Min == 3)
|| (Hor == 9 && Min == 2)
|| (Hor == 9 && Min == 3)
|| (Hor == 13 && Min == 2)
|| (Hor == 13 && Min == 3)
|| (Hor == 15 && Min == 2)
|| (Hor == 15 && Min == 3))
{digitalWrite(Fn, HIGH);
lcd1.setCursor(4, 3);
lcd1.print("Fn>");
RemoteXY.led_Fn_g = 255;
strcpy (RemoteXY. text_Fn, "Fn>");}
else {
digitalWrite(Fn, LOW);
lcd1.setCursor(4, 3);
lcd1.print("Fn<");
RemoteXY.led_Fn_g = 0;
strcpy (RemoteXY. text_Fn, "Fn<");}
تشغيل سخانات مياه المنظومة
بشروط الحساس والزمن...
//تشغيل
الCh
if (now - time_now_Ch >= Min_Ch)
{time_now_Ch += Min_Ch;
if (Te < 26 && Mois
!=6 && Mois !=7 && Mois !=8 )
{digitalWrite(Ch, HIGH);
lcd1.setCursor(8, 3);
lcd1.print("Ch>");
RemoteXY.led_Ch_g = 255;
strcpy (RemoteXY. text_Ch, "Ch>");}
else {
digitalWrite(Ch, LOW);
lcd1.setCursor(8, 3);
lcd1.print("Ch<");
RemoteXY.led_Ch_g = 0;
strcpy (RemoteXY. text_Ch, "Ch<");}}
تشغيل مضاد الحشرات بشرط الزمن....
//مواقيت
إشعال مضاد الحشرات An
if (Ti >= 20 && Min
>= 2 && Min <= 51)
{digitalWrite(An, HIGH);
lcd1.setCursor(12, 3);
lcd1.print("An>");
RemoteXY.led_An_g = 255;
strcpy (RemoteXY. text_An, "An>");}
else {
digitalWrite(An, LOW);
lcd1.setCursor(12, 3);
lcd1.print("An<");
RemoteXY.led_An_g = 0;
strcpy (RemoteXY. text_An, "An<");}
تشغيل مضخة الأوكسجين بشرط
الزمن فقط بالأسفل كتجربة...
//مواقيت
تشغيل الاكسجين Ox
//
if ((Hor == (hours11+1) )
//
|| (Hor == 10 )
//
|| (Hor == 13 )
//
|| (Hor == 14 )
//
|| (Hor == 17 ))
//
{digitalWrite(Ox, HIGH);
//
lcd1.setCursor(16, 3);
//
lcd1.print("Ox>");
//
RemoteXY.led_Ox_g = 255;
//
strcpy (RemoteXY. text_Ox, "Ox>");}
//
else {
//
digitalWrite(Ox, LOW);
//
lcd1.setCursor(16, 3);
//
lcd1.print("Ox<");
//
RemoteXY.led_Ox_g = 0;
//
strcpy (RemoteXY. text_Ox, "Ox<");}
//للتجربة
if ((Hor == 3 )
|| (Hor == 4 )
|| (Hor == 5 ))
{digitalWrite(Ox, HIGH);
lcd1.setCursor(16, 3);
lcd1.print("Ox>");
RemoteXY.led_Ox_g = 255;
strcpy (RemoteXY. text_Ox, "Ox>");}
else {
digitalWrite(Ox, LOW);
lcd1.setCursor(16, 3);
lcd1.print("Ox<");
RemoteXY.led_Ox_g = 0;
strcpy (RemoteXY. text_Ox, "Ox<");}
تفعيل أزرار وتحكمات الكايباد للوضع الاوتوماتيكي....
//----------------------
الكايباد اوتو ------------------------
char key = kpd.getKey();
if(key){
switch (key){
إعطاء مهام للأزرار...
عند الضغط على 1 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '1':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "1");
break;
عند الضغط على 2 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '2':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "2");
break;
عند الضغط على 3 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '3':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "3");
break;
عند الضغط على 4 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '4':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "4");
break;
عند الضغط على 5 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '5':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "5");
break;
عند الضغط على 6 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '6':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "6");
break;
عند الضغط على 7 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '7':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "7");
break;
عند الضغط على 8 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '8':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "8");
break;
عند الضغط على 9 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '9':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "9");
break;
عند الضغط على A إإظهار االتحذيرات المخزنة....
case 'A':
//بداية تسجلات التحذيرات
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "A");
lcd1.clear();
lcd2.clear();
lcd2.setCursor(3, 3);
lcd2.print("W>");
lcd2.createChar(1, Flesh1);
lcd2.setCursor(6, 3);
lcd2.write(byte(1));
EEPROM.get(500,y);
lcd2.setCursor(7, 3);
lcd2.print(y);
delay (3000);
lcd1.clear();
lcd2.clear();
//كتابات
ثابتة عامة
B1; B2; B3; B4; B5; B6; B7; B8; B9; B10; B11; B12; B13; B14;
B17; B18; B19; B20; B21; B22; B23; B24; B25; B26; B27; B28;
B29; B30; B31; B32; B33; B34; B35; B36; B37; B38; B39; B40; B41;
B42; B43;
//نهاية تسجيلات التحذيرات
break;
عند الضغط على B عرض لمواقيت الصلاة او الآذان العنوان
التاريخ...
case 'B':
//بداية عرض الاذان
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "B");
lcd1.clear();
lcd2.clear();
//عرض
الوقت والتاريخ
lcd1.setCursor(0, 0);
lcd1.print(rtc.getTimeStr());
lcd1.setCursor(9, 0);
lcd1.print(rtc.getDateStr());
//عنوان
lcd1.createChar(2, Flesh1);
lcd1.setCursor(0, 1);
lcd1.write(byte(2));
lcd1.setCursor(1, 1);
lcd1.print("Adan:");
//الفجر
lcd1.setCursor(0, 2);
lcd1.print("Fajr:");
lcd1.setCursor(0, 3);
lcd1.print(hours1);
lcd1.setCursor(1, 3);
lcd1.print(":");
lcd1.setCursor(2, 3);
lcd1.print(minutes1);
lcd1.createChar(1, Adn_fsl);
lcd1.setCursor(5, 2);
lcd1.write(byte(1));
lcd1.setCursor(5, 3);
lcd1.write(byte(1));
//شروق
الشمس
lcd1.setCursor(7, 2);
lcd1.print("Shrk:");
lcd1.setCursor(7, 3);
lcd1.print(hours11);
lcd1.setCursor(8, 3);
lcd1.print(":");
lcd1.setCursor(9, 3);
lcd1.print(minutes11);
lcd1.createChar(1, Adn_fsl);
lcd1.setCursor(12, 2);
lcd1.write(byte(1));
lcd1.setCursor(12, 3);
lcd1.write(byte(1));
//الظهر
lcd1.setCursor(14, 2);
lcd1.print("Duhr:");
lcd1.setCursor(14, 3);
lcd1.print(hours2);
lcd1.setCursor(16, 3);
lcd1.print(":");
lcd1.setCursor(17, 3);
lcd1.print(minutes2);
lcd1.createChar(1, Adn_fsl);
lcd1.setCursor(19, 2);
lcd1.write(byte(1));
lcd1.setCursor(19, 3);
lcd1.write(byte(1));
//العصر
lcd2.setCursor(0, 2);
lcd2.print("Asar:");
lcd2.setCursor(0, 3);
lcd2.print(hours3);
lcd2.setCursor(2, 3);
lcd2.print(":");
lcd2.setCursor(3, 3);
lcd2.print(minutes3);
lcd2.createChar(1, Adn_fsl);
lcd2.setCursor(5, 2);
lcd2.write(byte(1));
lcd2.setCursor(5, 3);
lcd2.write(byte(1));
//المغرب
lcd2.setCursor(7, 2);
lcd2.print("Mghr:");
lcd2.setCursor(7, 3);
lcd2.print(hours4);
lcd2.setCursor(9, 3);
lcd2.print(":");
lcd2.setCursor(10, 3);
lcd2.print(minutes4);
lcd1.createChar(1, Adn_fsl);
lcd2.setCursor(12, 2);
lcd2.write(byte(1));
lcd2.setCursor(12, 3);
lcd2.write(byte(1));
//العشاء
lcd2.setCursor(14, 2);
lcd2.print("Icha:");
lcd2.setCursor(14, 3);
lcd2.print(hours5);
lcd2.setCursor(16, 3);
lcd2.print(":");
lcd2.setCursor(17, 3);
lcd2.print(minutes5);
lcd1.createChar(1, Adn_fsl);
lcd2.setCursor(19, 2);
lcd2.write(byte(1));
lcd2.setCursor(19, 3);
lcd2.write(byte(1));
delay (20000);
lcd1.clear();
lcd2.clear();
//كتابات
ثابتة عامة
B1; B2; B3; B4; B5; B6; B7; B8; B9; B10; B11; B12; B13; B14;
B17; B18; B19; B20; B21; B22; B23; B24; B25; B26; B27; B28;
B29; B30; B31; B32; B33; B34; B35; B36; B37; B38; B39; B40; B41;
B42; B43;
//نهاية عرض الاذان
break;
عند الضغط على C إظهار مختلف التحليلات....
case 'C':
//بداية منظومة التحليل
tone(Z, Sound1, 50);
strcpy (RemoteXY. text_K, "C");
lcd1.clear();
lcd2.clear();
//الحرارة
والرطوبة
//الداخل
والخارج
lcd1.createChar(2, Temp);
lcd1.setCursor(19,0);
lcd1.write(byte(2));
lcd1.setCursor(0, 0);
lcd1.print("Ti=");
lcd1.print(Ti, 0);
lcd1.setCursor(6, 0);
lcd1.print("Tx=");
lcd1.print(Tx, 0);
int df1;
df1=Ti-Tx;
lcd1.setCursor(12, 0);
lcd1.print("df= ");
lcd1.print( abs(df1) );
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,0);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,0);
lcd2.write(byte(1));
if (df1>5) {lcd2.setCursor(3, 0);
lcd2.print("df>5 grand");}
else if (df1<(-5)){lcd2.setCursor(3, 0);
lcd2.print("df>5 grand");}
else
{lcd2.setCursor(3, 0);
lcd2.print("df normal");}
//الرطوبة
lcd1.createChar(3, Hmd);
lcd1.setCursor(19,1);
lcd1.write(byte(3));
lcd1.setCursor(0, 1);
lcd1.print("Hi=");
lcd1.print(Hi, 0);
lcd1.setCursor(6, 1);
lcd1.print("Hx=");
lcd1.print(Hx, 0);
int df2;
df2=Hi-Hx;
lcd1.setCursor(12, 1);
lcd1.print("df= ");
lcd1.print(abs(df2));
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,1);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,1);
lcd2.write(byte(1));
if (df2>5)
{lcd2.setCursor(3, 1);
lcd2.print("df>5 grand");}
else if (df2<(-5)){lcd2.setCursor(3, 1);
lcd2.print("df>5 grand");}
else
{lcd2.setCursor(3, 1);
lcd2.print("df
normal");}
//الداخل
والماء
lcd1.createChar(2, Temp);
lcd1.setCursor(19,2);
lcd1.write(byte(2));
lcd1.setCursor(0, 2);
lcd1.print("Ti=");
lcd1.print(Ti, 0);
lcd1.setCursor(6, 2);
lcd1.print("Te=");
lcd1.print(Te, 0);
int df3;
df3=Ti-Te;
lcd1.setCursor(12, 2);
lcd1.print("df= ");
lcd1.print(abs(df3));
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,2);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,2);
lcd2.write(byte(1));
if (df3>5)
{lcd2.setCursor(3, 2);
lcd2.print("df>5 grand");}
else if (df3<(-5)){lcd2.setCursor(3, 2);
lcd2.print("df>5 grand");}
else
{lcd2.setCursor(3, 2);
lcd2.print("df
normal");}
//الداخل
والصندوق
lcd1.createChar(2, Temp);
lcd1.setCursor(19,3);
lcd1.write(byte(2));
lcd1.setCursor(0, 3);
lcd1.print("Ti=");
lcd1.print(Ti, 0);
lcd1.setCursor(6, 3);
lcd1.print("Ts=");
lcd1.print(Ts, 0);
int df4;
df4=Ti-Ts;
lcd1.setCursor(12, 3);
lcd1.print("df= ");
lcd1.print(abs(df4));
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,3);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,3);
lcd2.write(byte(1));
if (df4>5) {lcd2.setCursor(3,
3);
lcd2.print("df>5 grand");}
else if (df4<(-5)){lcd2.setCursor(3, 3);
lcd2.print("df>5 grand");}
else
{lcd2.setCursor(3, 3);
lcd2.print("df
normal");}
delay (20000);
lcd1.clear();
lcd2.clear();
//كتابات
ثابتة عامة
B1; B2; B3; B4; B5; B6; B7; B8; B9; B10; B11; B12; B13; B14;
B17; B18; B19; B20; B21; B22; B23; B24; B25; B26; B27; B28;
B29; B30; B31; B32; B33; B34; B35; B36; B37; B38; B39; B40; B41;
B42; B43;
//نهاية منظومة التحليل
break;
عند الضغط على D إظهار التعريف المؤسس نسخة البرنامج ....
الخ
case 'D':
//بداية التعريف
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "D");
lcd1.clear();
lcd2.clear();
lcd1.setCursor(0, 0);
lcd1.print(" Numero de version
");
lcd1.setCursor(0, 1);
lcd1.print(" du programme ");
lcd1.setCursor(0, 2);
lcd1.print(" V 1.0 ");
lcd1.setCursor(0, 3);
lcd1.print(" date:
10,09,2018 ");
lcd2.setCursor(0, 0);
lcd2.print(" le site
officiel ");
lcd2.setCursor(0, 1);
lcd2.print("
Arduino");
lcd2.createChar(5, Ard);
lcd2.setCursor(13, 1);
lcd2.write(byte(5));
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,2);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,2);
lcd2.write(byte(1));
lcd2.setCursor(3, 2);
lcd2.print("www.arduino.cc
");
lcd2.createChar(4, Flesh2);
lcd2.setCursor(0,3);
lcd2.write(byte(4));
lcd2.createChar(1, Flesh1);
lcd2.setCursor(1,3);
lcd2.write(byte(1));
lcd2.setCursor(3, 3);
lcd2.print("arduino.cc/forum
");
delay (20000);
lcd1.clear();
lcd2.clear();
//كتابات
ثابتة عامة
B1; B2; B3; B4; B5; B6; B7; B8; B9; B10; B11; B12; B13; B14;
B17; B18; B19; B20; B21; B22; B23; B24; B25; B26; B27; B28;
B29; B30; B31; B32; B33; B34; B35; B36; B37; B38; B39; B40; B41;
B42; B43;
//نهاية التعريف
break;
عند الضغط على 0 اصدار
صوت فقط وكتابته على الشاشة والهاتف...
case '0':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "0");
break;
عند الضغط على * اصدار صوت فقط وكتابته على الشاشة والهاتف...
case '*':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "*");
break;
عند الضغط على # اصدار صوت فقط وكتابته على الشاشة والهاتف...
case '#':
tone(Z, Sound1, 50);
lcd2.setCursor(19,1);
lcd2.print(key);
strcpy (RemoteXY. text_K, "#");
break;
default:
lcd2.setCursor(19,1);
lcd2.print(key);}}
else {
lcd2.setCursor(19,1);
lcd2.print("");
if (millis() > time_now_K + period_K) {
time_now_K = millis();
lcd2.setCursor(19,1);
lcd2.print("K");
strcpy (RemoteXY. text_K, "K");}}
}//FIN MODE AUTOMATIC
===========================================