Advertisement
Zaganu

26.5.2020 functional

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