Advertisement
Zaganu

man complet/ auto umplere+ deplasare ulterioara. 31.5.2020

May 31st, 2020
4,025
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // definirea pinului de pas, respectiv de directie pentru motorul pas cu pas miscare verticala
  2. #define stepPin 48
  3. #define dirPin 46
  4. #define ls3in 32
  5. #define ls4in 22
  6.  
  7. // definirea pinului de pas, respectiv de directie pentru motorul pas cu pas miscare orizontala lopata
  8. #define stepPin2 44
  9. #define dirPin2 42
  10. #define ls2in 34
  11.  
  12. // definirea pinului de pas, respectiv de directie pentru motorul pas cu pas miscare orizontala masa
  13. #define stepPin3 40
  14. #define dirPin3 38
  15. #define ls1in 36
  16.  
  17. //////////////// senzori///////////////
  18. #define ls0in 52
  19. #define so1in 50 //intrarea primului senzor de obstacole
  20.  
  21. //////////////relee/////////////////////////
  22. #define relay1 30
  23. #define relay2 28
  24. #define relay3 26
  25. #define relay4 24
  26.  
  27. ////// definim butoanele + switch
  28. #define swin 23  //switch
  29. #define start_button 20
  30. #define stop_button 21
  31.  
  32.  
  33. int so1 = 0;
  34.  
  35. int sw_val = 0;
  36.  
  37. const byte ROWS = 4; // Four rows
  38. const byte COLS = 4; // Three columns
  39.  
  40.  
  41. char keys[ROWS][COLS] = { // Define the Keymap
  42.   {'1', '2', '3', 'A'},
  43.   {'4', '5', '6', 'B'},
  44.   {'7', '8', '9', 'C'},
  45.   {'*', '0', '#', 'D'}
  46. };
  47. char opposite_keys[ROWS][COLS] = { // Define the Keymap
  48.   {NULL, NULL, NULL, NULL},
  49.   {NULL, NULL, NULL, NULL},
  50.   {'^', '%', '$', NULL},
  51.   {NULL, '@', NULL, NULL}
  52. };
  53.  
  54. byte rowPins[ROWS] = { 2, 3, 4, 5 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
  55.  
  56. byte colPins[COLS] = { 6, 7, 8 , 9}; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.
  57.  
  58. int opposite_key = NULL;
  59. bool flag_alarm = true;
  60. int current_state = -1;
  61.  
  62. byte chA = 18;
  63. byte chB = 19;
  64. int encoder_value = 0;
  65.  
  66. void setup()
  67. {
  68.   pinMode(stepPin, OUTPUT);
  69.   pinMode(dirPin, OUTPUT);
  70.   pinMode(ls3in, INPUT);
  71.   pinMode(ls4in, INPUT);
  72.  
  73.   pinMode(stepPin2, OUTPUT);
  74.   pinMode(dirPin2, OUTPUT);
  75.   pinMode(ls2in, INPUT);
  76.  
  77.   pinMode(stepPin3, OUTPUT);
  78.   pinMode(dirPin3, OUTPUT);
  79.   pinMode(ls1in, INPUT);
  80.  
  81.   pinMode(so1in, INPUT);
  82.   pinMode(ls0in, INPUT);
  83.  
  84.   pinMode(relay1, OUTPUT);
  85.   pinMode(relay2, OUTPUT);
  86.   pinMode(relay3, OUTPUT);
  87.   pinMode(relay4, OUTPUT);
  88.  
  89.   // pinmode pentru cele doua butoane si switch
  90.   pinMode(swin, INPUT_PULLUP);
  91.   pinMode(start_button, INPUT);
  92.   pinMode(stop_button, INPUT);
  93.  
  94.  
  95.  
  96.   // declararea pinilor de input respectiv output pentru tastatura 4x4
  97.   pinMode(6, INPUT);
  98.   pinMode(7, INPUT);
  99.   pinMode(8, INPUT);
  100.   pinMode(9, INPUT);
  101.   pinMode(2, OUTPUT);
  102.   pinMode(3, OUTPUT);
  103.   pinMode(4, OUTPUT);
  104.   pinMode(5, OUTPUT);
  105.   ///////////////////////////////
  106.   // setarea starii high pentru pinii asociati coloanelor
  107.  
  108.   digitalWrite(6, HIGH);
  109.   digitalWrite(7, HIGH);
  110.   digitalWrite(8, HIGH);
  111.   digitalWrite(9, HIGH);
  112.  
  113.   digitalWrite(relay1, HIGH);
  114.   digitalWrite(relay2, HIGH);
  115.   digitalWrite(relay3, HIGH);
  116.   digitalWrite(relay4, HIGH);
  117.  
  118.   ///// releul e COM_NC neenergizat, pe semnal LOW se conecteaza COM_NO iar pe semnal HIGH se conecteaza COM_NC.
  119.   Serial.begin(9600);
  120.  
  121.   attachInterrupt(digitalPinToInterrupt(stop_button), alarm, RISING);
  122.   attachInterrupt(digitalPinToInterrupt(start_button), reset_alarm, RISING);
  123.   // attachInterrupt(digitalPinToInterrupt(stop_button), cw, RISING);
  124.   // attachInterrupt(digitalPinToInterrupt(start_button), ccw, RISING);
  125. }
  126.  
  127. void loop() {
  128.   sw_val = digitalRead(swin);
  129.   if (sw_val == 0 && flag_alarm == false) {     // sw_val == 0 coincide cu modul AUTOMAT
  130.     automat();
  131.   }
  132.   else if (sw_val == 1) { //sw_val == 1 conincide cu modul MANUAL
  133.     current_state = -1;
  134.     manual();
  135.  
  136.   }
  137. }
  138.  
  139.  
  140. char read_keyboard()
  141. {
  142.   for ( uint8_t i = 2; i < 6; ++i) {
  143.     digitalWrite(i, LOW);
  144.     for ( uint8_t j = 6; j < 10; ++j) {
  145.       int key = digitalRead(j);
  146.       if (!key)
  147.       {
  148.         digitalWrite(i, HIGH);
  149.         opposite_key = (opposite_keys[i - 2][j - 6]);
  150.         return (keys[i - 2][j - 6]);
  151.       }
  152.     }
  153.     digitalWrite(i, HIGH);
  154.   }
  155.   return opposite_key;
  156. }
  157.  
  158.  
  159. void manual() {
  160.   char a = read_keyboard();
  161.   //Serial.println(a);
  162.   switch (a)
  163.   {
  164.  
  165.     case '0': //pompa pornita
  166.       {
  167.         if (digitalRead(so1in) == 0) {
  168.           pump_on();
  169.         }
  170.         break;
  171.       }
  172.     case '@': //pompa oprita
  173.       {
  174.         pump_off();
  175.         reset_opposite_key();     //opposite_character = NULL ;
  176.         break;
  177.       }
  178.     case '1': //stepper miscare sus
  179.       {
  180.  
  181.         if (digitalRead(ls3in) == 0) {
  182.           break;
  183.         }
  184.         else {
  185.           move_motor(stepPin, dirPin, HIGH, 130);
  186.           break;
  187.         }
  188.       }
  189.     case '4': //stepper miscare jos
  190.       {
  191.         if (digitalRead(ls4in) == 0) {
  192.           break;
  193.         }
  194.         else {
  195.           move_motor(stepPin, dirPin, LOW, 130);
  196.           break;
  197.         }
  198.       }
  199.     case '3': //stepper lopata miscare stanga
  200.       {
  201.  
  202.         if (digitalRead(ls2in) == 0) {
  203.           break;
  204.         }
  205.         else {
  206.           move_motor(stepPin2, dirPin2, HIGH, 1000);
  207.           break;
  208.         }
  209.       }
  210.     case '2': //stepper lopata miscare dreapta
  211.       {
  212.         move_motor(stepPin2, dirPin2, LOW, 1000);
  213.         break;
  214.  
  215.       }
  216.     case '6': //stepper masa miscare stanga
  217.       {
  218.  
  219.         if (digitalRead(ls1in) == 0) {
  220.           break;
  221.         }
  222.         else {
  223.           move_motor(stepPin3, dirPin3, HIGH, 100);
  224.           break;
  225.         }
  226.       }
  227.     case '5': //stepper masa miscare dreapta
  228.       {
  229.         move_motor(stepPin3, dirPin3, LOW, 100);
  230.         break;
  231.       }
  232.     case '9': // miscare banda
  233.       {
  234.         if (digitalRead(ls0in) == 0) { // trebuie modificat
  235.           conveyor_off();
  236.           break;
  237.         }
  238.         else
  239.         {
  240.           conveyor_on();
  241.           break;
  242.         }
  243.       }
  244.  
  245.     case '$' : // opposite 9
  246.       {
  247.         conveyor_off();
  248.         reset_opposite_key();   //opposite_character = NULL ;
  249.         break;
  250.       }
  251.     case '8': //invartire sens orar(privit de sus)
  252.       {
  253.         motor_cw();
  254.         break;
  255.       }
  256.     case '%':
  257.       {
  258.         motor_stop();
  259.         reset_opposite_key();    //opposite_character = NULL ;
  260.         break;
  261.       }
  262.     case '7': //invartire sens trigonometric(privit de sus)
  263.       {
  264.         motor_ccw();
  265.         break;
  266.       }
  267.     case '^':
  268.       {
  269.         motor_stop();
  270.         reset_opposite_key();   //opposite_character = NULL ;
  271.         break;
  272.       }
  273.  
  274.   }
  275. }
  276.  
  277. /////////////////////////////// automat /////////////////////////
  278. void automat() {
  279.  
  280.   switch (current_state)
  281.   {
  282.     case 0 :
  283.       {
  284.         initialize();
  285.         break;
  286.       }
  287.  
  288.     case 1 :
  289.       {
  290.         conveyor_on();
  291.         current_state = 2;
  292.         break;
  293.       }
  294.     case 2:
  295.       {
  296.         if (digitalRead(so1in) == 0) {
  297.           conveyor_off();
  298.           current_state = 3;
  299.         }
  300.         break;
  301.  
  302.       }
  303.     case 3:
  304.       {
  305.         delay(1000);
  306.         pump_on();
  307.         delay(500);
  308.         pump_off();
  309.         delay(500);
  310.         current_state = 4;
  311.         break;
  312.       }
  313.     case 4:
  314.       {
  315.         if(digitalRead(ls0in) == 1){
  316.           conveyor_on();
  317.        }
  318.        else{
  319.         conveyor_off();
  320.         current_state = 5;
  321.        }
  322.        break;
  323.       }
  324.       case 5:
  325.       {
  326.         Serial.println("e ok");
  327.       }
  328.      
  329.  
  330.   }
  331. }
  332. ////////////////////////////// states///////////////////////////
  333.  
  334. void initialize()
  335. {
  336.   pump_off();
  337.   conveyor_off();
  338.   motor_stop();
  339.  
  340.   if (digitalRead(ls1in) == 1) {
  341.     move_motor(stepPin3, dirPin3, HIGH, 100);
  342.   }
  343.   else
  344.   {
  345.     if (digitalRead(ls2in) == 1) {
  346.       move_motor(stepPin2, dirPin2, HIGH, 1000);
  347.     }
  348.     else
  349.     {
  350.       if (digitalRead(ls3in) == 1) {
  351.         move_motor(stepPin, dirPin, HIGH, 130);
  352.       }
  353.     }
  354.   }
  355.   if (digitalRead(ls1in) == 0 && digitalRead(ls2in) == 0 && digitalRead(ls3in) == 0)
  356.   {
  357.     current_state = 1;
  358.   }
  359.  
  360. }
  361.  
  362.  
  363.  
  364. //////////////////////////////// helper functions/////////////////
  365.  
  366. void conveyor_on() //miscare banda pornita
  367. {
  368.   digitalWrite(relay1, LOW);
  369. }
  370.  
  371. void conveyor_off() //miscare banda oprita
  372. {
  373.   digitalWrite(relay1, HIGH);
  374. }
  375.  
  376. void motor_cw() //motor infiletare sens orar
  377. {
  378.   digitalWrite(relay4, LOW);
  379. }
  380.  
  381. void motor_ccw() // motor infiletare sens trigonometric
  382. {
  383.   digitalWrite(relay3, LOW);
  384. }
  385.  
  386. void motor_stop() //motor infiletare este oprit
  387. {
  388.   digitalWrite(relay3, HIGH);
  389.   digitalWrite(relay4, HIGH);
  390. }
  391.  
  392. void pump_on()
  393. {
  394.   digitalWrite(relay2, LOW);
  395. }
  396.  
  397. void pump_off()
  398. {
  399.   digitalWrite(relay2, HIGH);
  400. }
  401.  
  402. void reset_opposite_key()
  403. {
  404.   opposite_key = NULL;
  405. }
  406.  
  407.  
  408. void cw()
  409. {
  410.   if (digitalRead(chA) > digitalRead(chB))
  411.   {
  412.     encoder_value++ ;
  413.   }
  414. }
  415.  
  416. void ccw()
  417. {
  418.   if (digitalRead(chA) > digitalRead(chB))
  419.   {
  420.     encoder_value-- ;
  421.  
  422.   }
  423. }
  424.  
  425. // functie pentru steppere
  426. void move_motor(int motor_pin, int dir_pin, int direction, int delay) {
  427.   digitalWrite(dir_pin, direction);
  428.   digitalWrite(motor_pin, HIGH);
  429.   digitalWrite(motor_pin, LOW);
  430.   delayMicroseconds(delay);
  431.   //ST1-SW123-011, comutator 111100;  delay micro 130
  432.   //ST2-SW123-010, comutator 111011;  delay micro 1000
  433.   //ST2-SW123--010, comutator 001100; delay micro 100
  434. }
  435.  
  436. void alarm() {
  437.   motor_stop();
  438.   pump_off();
  439.   conveyor_off();
  440.   flag_alarm = true;
  441.  
  442. }
  443.  
  444. void reset_alarm() {
  445.   flag_alarm = false;
  446.   current_state = 0;
  447. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement