MartinSRB

[НРС] Колоквијум - Група 89B

May 17th, 2023
612
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include<arduinoPlatform.h>
  2. #include<tasks.h>
  3. #include<interrupts.h>
  4. #include<stdio.h>
  5. #include<serial.h>
  6. #include <pwm.h>
  7. #include<data.h>
  8.  
  9. extern serial Serial;
  10.  
  11. const int btn[] = {4, 34, 36, 37};
  12. int fun1(){
  13.     int counter = 0;
  14.     for(int i = 0; i < 4; ++i){
  15.         if(digitalRead(btn[i])){
  16.             ++counter;
  17.         }
  18.     }
  19.     return counter;
  20. }
  21.  
  22. const int SW1 = 2;
  23. int sw1_old_state;
  24. void task1(int id, void* ptrt){
  25.     if(sw1_old_state < digitalRead(SW1)){
  26.         int max_led = fun1();
  27.         for(int i = 26; i <= 29; ++i){
  28.             digitalWrite(i, LOW); //gasimo sve ako se desi da ima manje dugmadi upaljeno
  29.         }
  30.         for(int i = 26; i < max_led; ++i){
  31.             digitalWrite(i, HIGH);
  32.         }
  33.         sw1_old_state = digitalRead(SW1);
  34.     }else if(sw1_old_state > digitalRead(SW1)){
  35.         for(int i = 26; i <= 29; ++i){
  36.             digitalWrite(i, LOW); //gasimo sve ako se desi da ima manje dugmadi upaljeno
  37.         }
  38.         sw1_old_state = digitalRead(SW1);
  39.     }
  40. }
  41.  
  42. int task1_id;
  43. const int SW4 = 35;
  44. int sw4_old_state;
  45. typedef void interruptFunction();
  46. interruptFunction *sw4_rising_edge  = NULL,
  47.                   *sw4_falling_edge = NULL;
  48. void sw4_attach_interrupt(short mode, interruptFunction* func){
  49.     if(mode == RISING){
  50.         sw4_rising_edge = func;
  51.     }else if(mode == FALLING){
  52.         sw4_falling_edge = func;
  53.     }
  54. }
  55.  
  56. void interruptOn(){
  57.     setTaskState(task1_id, TASK_ENABLE);
  58. }
  59.  
  60. void interruptOff(){
  61.     setTaskState(task1_id, TASK_DISABLE);
  62. }
  63.  
  64. void sw4_check(int id, void* ptrt){
  65.     if(sw4_old_state < digitalRead(SW4)){
  66.         if(sw4_rising_edge != NULL){
  67.             sw4_rising_edge();
  68.         }
  69.         sw4_old_state = digitalRead(SW4);
  70.     }else if(sw4_old_state > digitalRead(SW4)){
  71.         if(sw4_falling_edge != NULL){
  72.             sw4_falling_edge();
  73.         }
  74.         sw4_old_state = digitalRead(SW4);
  75.     }
  76. }
  77.  
  78. void task2(int id, void* ptrt){
  79.     if(Serial.available()){
  80.         Serial.readString();
  81.         for(int i = 30; i <= 33; ++i){
  82.             digitalWrite(i, HIGH);
  83.         }
  84.     }else{
  85.         for(int i = 30; i <= 33; ++i){
  86.             digitalWrite(i, LOW);
  87.         }
  88.     }
  89. }
  90.  
  91. void setup()
  92. {
  93.     Serial.begin(9600);
  94.     for(int i = 26; i <= 33; ++i){
  95.         pinMode(i, OUTPUT);
  96.         digitalWrite(i, LOW);
  97.     }
  98.     Serial.println("Martin Muharemovic PR130/2021");
  99.     sw1_old_state = digitalRead(SW1);
  100.     task1_id = createTask(task1, 25, TASK_ENABLE, NULL);
  101.     sw4_old_state = digitalRead(SW4);
  102.     sw4_attach_interrupt(RISING, interruptOn);
  103.     sw4_attach_interrupt(FALLING, interruptOff);
  104.     createTask(sw4_check, 50, TASK_ENABLE, NULL);
  105.     createTask(task2, 3000, TASK_ENABLE, NULL);
  106. }
  107.  
  108. void loop()
  109. {
  110.  
  111. }
  112.  
Advertisement
Add Comment
Please, Sign In to add comment