MartinSRB

[НРС] Вежбе 17 - Задатак 1

May 14th, 2023 (edited)
1,290
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 KB | None | 0 0
  1. // -------- ПОГЛЕДАЈ КОМЕНТАР --------- //
  2. #include<arduinoPlatform.h>
  3. #include<tasks.h>
  4. #include<interrupts.h>
  5. #include<stdio.h>
  6. #include<serial.h>
  7. #include <pwm.h>
  8. #include<data.h>
  9.  
  10. extern serial Serial;
  11.  
  12. #define LED 26
  13. #define BTN 4
  14. #define SW  2
  15.  
  16. #define RISING  0
  17. #define FALLING 1
  18.  
  19. typedef void interruptFunction();
  20.  
  21. int br                 = 1,
  22.     blink_LED_task_id,
  23.     BTN_old_state,
  24.     SW_old_state;
  25.  
  26. interruptFunction* sw_falling_edge_func,
  27.                  * sw_rising_edge_func;
  28.  
  29. void blink_LED_task(int id, void* ptrt){
  30.     digitalWrite(LED, !digitalRead(LED));
  31. }
  32.  
  33. void BTN_check(int id, void* ptrt){
  34.     if(BTN_old_state < digitalRead(BTN)){
  35.         int task_period = getTaskPeriod(blink_LED_task_id);
  36.         Serial.println(task_period);
  37.         BTN_old_state = digitalRead(BTN);
  38.     }else if(BTN_old_state > digitalRead(BTN)){
  39.         setTaskPeriod(blink_LED_task_id, 1000 / br / 2);
  40.         BTN_old_state = digitalRead(BTN);
  41.     }
  42. }
  43.  
  44. void SW_attachInterrupt(short mode, interruptFunction func){
  45.     if(mode == RISING){
  46.         sw_rising_edge_func  = func;
  47.     }else if(mode == FALLING){
  48.         sw_falling_edge_func = func;
  49.     }
  50. }
  51.  
  52. void SW_intrptFuncs(){
  53.     if(br + 1 > 10){
  54.         br = 1;
  55.     }else{
  56.         ++br;
  57.     }
  58. }
  59.  
  60. void SW_check(int id, void* ptrt){
  61.     if(SW_old_state < digitalRead(SW)){
  62.         sw_rising_edge_func();
  63.         SW_old_state = digitalRead(SW);
  64.     }else if(SW_old_state > digitalRead(SW)){
  65.         sw_falling_edge_func();
  66.         SW_old_state = digitalRead(SW);
  67.     }
  68. }
  69.  
  70. void SerialHandler(int id, void* ptrt){
  71.     if(Serial.available()){
  72.         char tmp = Serial.read();
  73.         if(tmp >= '0' && tmp <= '9'){
  74.             br = tmp - '0' + 1;
  75.             setTaskPeriod(blink_LED_task_id, 1000 / br / 2);
  76.         }
  77.     }
  78. }
  79.  
  80. void setup()
  81. {
  82.     Serial.begin(9600);
  83.     pinMode(LED, OUTPUT);
  84.     BTN_old_state = digitalRead(BTN);
  85.     SW_old_state  = digitalRead(SW);
  86.     SW_attachInterrupt(RISING, SW_intrptFuncs);
  87.     SW_attachInterrupt(FALLING, SW_intrptFuncs);
  88.     blink_LED_task_id = createTask(blink_LED_task, 500, TASK_ENABLE, NULL);
  89.     createTask(BTN_check, 50, TASK_ENABLE, NULL);
  90.     createTask(SW_check, 50, TASK_ENABLE, NULL);
  91.     createTask(SerialHandler, 500, TASK_ENABLE, NULL);
  92. }
  93.  
  94. void loop()
  95. {
  96.  
  97. }
  98.  
Advertisement
Comments
  • MartinSRB
    2 years
    # text 0.18 KB | 0 0
    1. Узмите ово 1000 / br / 2 као да можда није добро (ја сам сматрао да један блинк значи и упалити и угасити)
    2.  
Add Comment
Please, Sign In to add comment