Advertisement
Zaganu

26.5.2020 latest

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