Advertisement
V_Tailor

Cod Mega

May 31st, 2020
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.25 KB | None | 0 0
  1. #include <LiquidCrystal_I2C.h> // Library for LCD
  2. #include <dht.h>
  3. #include "ServoTimer2.h"
  4. #include <SoftwareSerial.h>
  5. #include <ArduinoJson.h>
  6. SoftwareSerial s(22,24);
  7. LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);
  8. dht DHT;
  9. ServoTimer2 Servo1;
  10. const int stepPin = 12;
  11. const int dirPin = 13;
  12. const int stepPin2 = 10;
  13. const int dirPin2 = 11;
  14. const int stepPin3 = 6;
  15. const int dirPin3 = 5;
  16. const int RelayPin =30;
  17. const int RelayPin2 = 28;
  18. const int L1 = 50;
  19. const int L2 = 48;
  20. const int L3 = 46;
  21. const int L4 = 44;
  22. const int L5 = 42;
  23. const int L6 = 40;
  24. const int inX = A3;
  25. const int inY = A2;
  26. const int inX2 = A4;
  27. const int inY2 = A5;
  28. const int inX3 = A6;
  29. const int inY3 = A7;
  30. const int inX4 = A8;
  31. const int inY4 = A9;
  32. const int inX5 = A10;
  33. const int inY5 = A11;
  34. int servoPin = 2;
  35. int xValue = 0;
  36. int yValue = 0;
  37. int xValue2 = 0;
  38. int yValue2 = 0;
  39. int xValue3 = 0;
  40. int yValue3 = 0;
  41. int xValue4 = 0;
  42. int yValue4 = 0;
  43. int xValue5 = 0;
  44. int yValue5 = 0;
  45. int tmp=0;
  46. int hum=0;
  47. int CurrentState=0;
  48. bool pornit = 0;
  49. const int StartP = 8;
  50. const int StopP = 9;
  51. const int Mod = 38;
  52. int ht=0;
  53. bool Md = 0;
  54. const int PIR1 =34 ;
  55. bool pir1=0;
  56. const int PIR2 = 32;
  57. bool pir2=0;
  58. const int senzor_nivel= A12;
  59. float delayMinMotor = 500 * 0.062;
  60. float delayMinMotor2 = 300 * 0.062; //
  61. void setup() {
  62.   lcd.init();
  63.   lcd.backlight();
  64.   pinMode(StartP, INPUT);
  65.   pinMode(StopP, INPUT);
  66.   pinMode(L1, INPUT);
  67.   pinMode(Mod, INPUT_PULLUP);
  68.   pinMode(inX, INPUT);
  69.   pinMode(inY, INPUT);
  70.   pinMode(inX2, INPUT);
  71.   pinMode(inY2, INPUT);
  72.   pinMode(inX3, INPUT);
  73.   pinMode(inY3, INPUT);
  74.   pinMode(inX4, INPUT);
  75.   pinMode(inY4, INPUT);
  76.   pinMode(inX5, INPUT);
  77.   pinMode(inY5, INPUT);
  78.   pinMode(PIR1, INPUT);
  79.   pinMode(PIR2, INPUT);
  80.   pinMode(stepPin, OUTPUT);
  81.   pinMode(dirPin, OUTPUT);
  82.   pinMode(stepPin2, OUTPUT);
  83.   pinMode(dirPin2, OUTPUT);
  84.   pinMode(stepPin3, OUTPUT);
  85.   pinMode(dirPin3, OUTPUT);
  86.   pinMode(RelayPin, OUTPUT);
  87.   pinMode(RelayPin2, OUTPUT);
  88.   digitalWrite(RelayPin, HIGH);
  89.   digitalWrite(RelayPin2, HIGH);
  90.   Servo1.attach(2);
  91.   Servo1.write(1000);  
  92.   //Serial.begin(9600);
  93.   s.begin(9600);
  94.   cli();            
  95.   TCCR4A = 0;
  96.   TCCR4B = 0;
  97.   TCNT4 = 0;
  98.   OCR4A = delayMinMotor2  ;
  99.   TCCR4B |= (1 << WGM42);
  100.   TCCR4B |= (1 << CS42);
  101.   TCCR3A = 0;
  102.   TCCR3B = 0;
  103.   TCNT3 = 0;
  104.   OCR3A = delayMinMotor;
  105.   TCCR3B |= (1 << WGM32);
  106.   TCCR3B |= (1 << CS32);
  107.   sei();
  108.   stopTimer3();
  109.   stopTimer4();
  110. }
  111. void loop()
  112. {
  113.   Servo1.detach();
  114.  
  115.   TIMSK4 |= (1 << OCIE1A);
  116.   TIMSK3 |= (1 << OCIE3A);  
  117.   Md = digitalRead(Mod);
  118.   ht= DHT.read11(A13);
  119.   tmp = DHT.temperature;
  120.   hum = DHT.humidity;
  121.  
  122.    StaticJsonDocument<1500> doc;
  123.    JsonObject root = doc.to<JsonObject>();
  124.    root["pornit"] = pornit;
  125.    root["mod"] = Md;
  126.    root["lim1"] = digitalRead(L1);  
  127.    root["lim2"] = digitalRead(L2);
  128.    root["lim3"] = digitalRead(L3);
  129.    root["lim4"] = digitalRead(L4);
  130.    root["lim5"] = digitalRead(L5);
  131.    root["lim6"] = digitalRead(L6);
  132.    root["pir1"] = digitalRead(PIR1);
  133.    root["pir2"] = digitalRead(PIR2);
  134.    root["apa"] = analogRead(senzor_nivel);
  135.    root["temperatura"] = tmp;
  136.    serializeJson(doc,s);
  137.   if( Md == 1)
  138. {  
  139.     lcd.clear();
  140.     lcd.setCursor(5, 0);
  141.     lcd.print("MANUAL");
  142.     read_joystick(inX,inY);
  143.     read_joystick2(inX2,inY2);
  144.     read_joystick3(inX3);
  145.     read_joystick4(inX4);
  146.     read_joystick5(inX5);
  147.     delay(50);
  148. }
  149. else if ( Md == 0)
  150. {
  151.     lcd.clear();
  152.     lcd.setCursor(5, 0);
  153.     lcd.print("AUTOMAT");  
  154. if(digitalRead(StartP)== LOW)
  155.     {
  156.       pornit = 1;
  157.    //   stopTimer3();
  158.     // stopTimer4();
  159.     }
  160. if(digitalRead(StopP)== LOW)
  161.     {
  162.       pornit=0;
  163.     }
  164. if(pornit == 1)
  165.     {
  166.      
  167.      lcd.clear();
  168.      lcd.setCursor(5, 0);
  169.      lcd.print("AUTOMAT");
  170.      lcd.setCursor(0, 1);
  171.      lcd.print("PROCESS STARTED");          
  172.      switch(CurrentState){
  173.       case 0:
  174.           {        
  175.             deplasare(digitalRead(L1));
  176.             break;
  177.           }
  178.       case 1:  
  179.           {
  180.             verificare_pir_2();
  181.             break;
  182.           }
  183.       case 2:
  184.           {
  185.             porneste_banda();
  186.             break;
  187.           }
  188.       case 3:
  189.           {
  190.             verificare_pir_1();
  191.             break;
  192.           }
  193.       case 4:
  194.           {
  195.             opreste_banda();
  196.             break;
  197.           }    
  198.       case 5:
  199.           {
  200.             deschide_cleste();
  201.             coboara_brat(10);
  202.             break;
  203.           }
  204.       case 6:
  205.           {
  206.             inchide_cleste();
  207.             urca_brat(8);
  208.             break;
  209.           }  
  210.       case 7:
  211.           {
  212.             deplasare(digitalRead(L2));        
  213.             break;
  214.           }  
  215.       case 8:
  216.           {
  217.             verificare_senzor_nivel(senzor_nivel);
  218.             break;
  219.           }
  220.       case 9:
  221.           {
  222.             coboara_brat(13);
  223.             break;
  224.           }  
  225.       case 10:
  226.           {
  227.             urca_brat(11);
  228.             break;
  229.           }  
  230.       case 11:
  231.           {
  232.             deplasare(digitalRead(L3));
  233.             break;        
  234.            }
  235.  
  236.    case 12 :
  237.           {
  238.             coboara_brat(13);
  239.             break;  
  240.           }  
  241.     case 13:
  242.           {
  243.             urca_brat(11);
  244.             break;  
  245.           }
  246.     case 14:
  247.           {
  248.             deplasare(digitalRead(L5));
  249.             break;  
  250.           }
  251.     case 15:
  252.           {
  253.             coboara_brat(13);
  254.             break;
  255.           }  
  256.     case 16:
  257.           {
  258.             porneste_ventilatoare(30);
  259.             break;
  260.           }
  261.     case 17:
  262.           {
  263.             urca_brat(11);
  264.             break;
  265.           }
  266.     case 18:
  267.           {
  268.             deplasare(digitalRead(L6));
  269.             break;
  270.           }
  271.     case 19:
  272.           {
  273.             coboara_brat(25);
  274.             break;
  275.           }
  276.     case 20:
  277.           {
  278.             deschide_cleste();
  279.             CurrentState++;
  280.             break;
  281.           }
  282.     case 21:
  283.           {
  284.            urca_brat(26);
  285.            break;
  286.           }
  287.     case 22:
  288.           {
  289.             deplasare2(digitalRead(L1));
  290.             break;
  291.           }  
  292.         }
  293.   }
  294. else if(pornit==0)
  295.   {  
  296.      lcd.clear();
  297.      lcd.setCursor(5, 0);
  298.      lcd.print("AUTOMAT");
  299.      lcd.setCursor(0, 1);
  300.      lcd.print("PROCESS STOPPED");
  301.     stopTimer3();
  302.    stopTimer4();
  303.     }
  304.          
  305. }
  306.   delay(150);
  307. }
  308.  
  309. //Functii intrerupere
  310. ISR(TIMER4_COMPA_vect)          // timer 4 compare interrupt service routine misk4
  311. {
  312.    digitalWrite(stepPin,HIGH);
  313.    digitalWrite(stepPin,LOW);
  314.    digitalWrite(stepPin2,HIGH);
  315.    digitalWrite(stepPin2,LOW);
  316. }
  317. ISR(TIMER3_COMPA_vect)          // timer 3 compare interrupt service routine misk3
  318. {
  319.   digitalWrite(stepPin3,HIGH);
  320.   digitalWrite(stepPin3,LOW);;
  321. }
  322. void stopTimer4()
  323. {
  324.  
  325.   TCCR4B &= ~(1 << CS40);
  326.   TCCR4B &= ~(1 << CS41);
  327.   TCCR4B &= ~(1 << CS42);
  328.   TCNT4 = 0;
  329. }
  330. void startTimer4()
  331. {
  332.   TCCR4B |= (1 << CS42);
  333. }
  334. void stopTimer3()
  335. {
  336.  
  337.   TCCR3B &= ~(1 << CS30);
  338.   TCCR3B &= ~(1 << CS31);
  339.   TCCR3B &= ~(1 << CS32);
  340.   TCNT3 = 0;
  341. }
  342. void startTimer3()
  343. {
  344.   TCCR3B |= (1 << CS32);
  345. }
  346. //Functii_manual
  347. void read_joystick(int pin1, int pin2)
  348. {
  349.     xValue = analogRead(pin1);
  350.     yValue = analogRead(pin2);
  351.     if (xValue == 0)
  352.     {
  353.         digitalWrite(dirPin,HIGH);
  354.         digitalWrite(dirPin2,HIGH);
  355.         startTimer4();
  356.     }
  357.     if (xValue > 0 && xValue < 1023 )
  358.     {
  359.         stopTimer4();
  360.     }
  361.     if ( xValue == 1023)
  362.     {
  363.         digitalWrite(dirPin,LOW);
  364.         digitalWrite(dirPin2,LOW);
  365.         startTimer4();
  366.     }
  367. }
  368. void read_joystick2(int pin1, int pin2)
  369. {
  370.     xValue2 = analogRead(pin1);
  371.     yValue2 = analogRead(pin2);
  372.     if (xValue2 == 0)
  373.     {
  374.         digitalWrite(dirPin3,HIGH);
  375.        
  376.         startTimer3();
  377.     }
  378.     if (xValue2 > 0 && xValue2 < 1023 )
  379.     {
  380.         stopTimer3();
  381.     }
  382.     if ( xValue2 == 1023)
  383.     {
  384.         digitalWrite(dirPin3,LOW);
  385.      
  386.         startTimer3();
  387.     }
  388. }
  389. void read_joystick3(int pin1)
  390. {
  391.     xValue3 = analogRead(pin1);
  392.     if (xValue3 == 1023)
  393.        {
  394.           digitalWrite(RelayPin, LOW);  
  395.        }
  396.     if (xValue3  == 0)
  397.        {
  398.           digitalWrite(RelayPin, HIGH);    
  399.        }
  400. }
  401. void read_joystick4(int pin1)
  402. {
  403.     xValue4 = analogRead(pin1);
  404.     if (xValue4 == 1023)
  405.        {
  406.           digitalWrite(RelayPin2, LOW);  
  407.        }
  408.     if (xValue4  == 0)
  409.        {
  410.           digitalWrite(RelayPin2, HIGH);    
  411.        }
  412. }
  413. void read_joystick5(int pin1)
  414. {
  415.     xValue5 = analogRead(pin1);
  416.     if (xValue5  == 1023)
  417.        {
  418.         Servo1.attach(2);
  419.           Servo1.write(1750);  
  420.          
  421.          
  422.        }
  423.     if (xValue5  == 0)
  424.        {
  425.         Servo1.attach(2);
  426.           Servo1.write(1000);
  427.              
  428.        }
  429. }
  430. //Functii automat
  431. void deplasare( int lim)
  432. {
  433.   if(lim == 0)
  434.   {
  435.   digitalWrite(dirPin,LOW);
  436.   digitalWrite(dirPin2,LOW);
  437.   startTimer4();
  438.   }
  439.   else
  440.   {
  441.     stopTimer4();
  442.     CurrentState++;
  443.   }
  444. }
  445. void deplasare2( int lim)
  446. {
  447.   if(lim == 0)
  448.   {
  449.   digitalWrite(dirPin,HIGH);
  450.   digitalWrite(dirPin2,HIGH);
  451.   startTimer4();
  452.   }
  453.   else
  454.   {
  455.     stopTimer4();
  456.     CurrentState=0;
  457.   }
  458. }
  459. void verificare_pir_2()
  460. {
  461.   pir2 = digitalRead(PIR2);
  462.   if(pir2 == 0)
  463.   {
  464.     CurrentState++;
  465.   }
  466. }
  467. void porneste_banda()
  468. {
  469.   digitalWrite(RelayPin, LOW);
  470.   CurrentState++;
  471. }
  472. void verificare_pir_1()
  473. {
  474.   pir1 = digitalRead(PIR1);
  475.   if(pir1 == 0)
  476.   {
  477.     CurrentState++;
  478.   }
  479. }
  480. void opreste_banda()
  481. {
  482.   digitalWrite(RelayPin, HIGH);
  483.   CurrentState++;
  484. }
  485. void deschide_cleste()
  486. {
  487.   Servo1.attach(2);
  488.   Servo1.write(1000);
  489.  
  490. }
  491.  int cnt =0;
  492. void coboara_brat( int durata)
  493. {
  494.  
  495.   if(cnt<durata)
  496.         {
  497.         digitalWrite(dirPin3,HIGH);
  498.         startTimer3();
  499.         cnt++;
  500.         }
  501.   else
  502.         {
  503.          stopTimer3();  
  504.          CurrentState++;
  505.          cnt =0;
  506.         }  
  507. }
  508. void inchide_cleste()
  509. {
  510.   Servo1.attach(2);
  511.   Servo1.write(1750);
  512.  
  513. }
  514. int cnt2 =0;
  515. void urca_brat( int durata)
  516. {
  517.  
  518.   if(cnt2<durata)
  519.         {
  520.         digitalWrite(dirPin3,LOW);
  521.         startTimer3();
  522.         cnt2++;
  523.         }
  524.   else
  525.         {
  526.          stopTimer3();
  527.          CurrentState++;
  528.          cnt2 =0;
  529.         }  
  530. }
  531. int cnt3;
  532. void porneste_ventilatoare(int durata)
  533. {
  534.   if(cnt3<durata)
  535.               {
  536.                    digitalWrite(RelayPin2,LOW);
  537.                    cnt3++;
  538.                }
  539.              else
  540.               {
  541.                     digitalWrite(RelayPin2,HIGH);
  542.                     CurrentState++;
  543.                     cnt3= 0;
  544.               }
  545.  
  546. }
  547. void verificare_senzor_nivel(int level)
  548.   {
  549.     bool apaok;
  550.     if (level<=480){  
  551.     apaok = 0;
  552.   }
  553.   else if (level>480 && level<=530){
  554.    
  555.   }
  556.   else if (level>530 && level<=615){
  557.     apaok=1;
  558.   }
  559.   else if (level>615 && level<=660){  
  560.     apaok=1;
  561.   }
  562.   else if (level>660 && level<=680){
  563.     apaok=1;
  564.   }
  565.   else if (level>680 && level<=690){
  566.     apaok=1;
  567.   }
  568.   else if (level>690 && level<=700){
  569.   }
  570.   else if (level>700 && level<=705){
  571.     apaok=1;
  572.   }
  573.   else if (level>705){
  574.     apaok=1;
  575.   }
  576.   if (apaok == 0)
  577.    {  
  578.          CurrentState++;
  579.     }
  580.          
  581.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement