Advertisement
MartinSRB

[НРС] Колоквијум - група 5А

Jun 3rd, 2023
1,150
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 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 pin = 33;
  12. int oldState,
  13.     startTime,
  14.     elapsedTime = 0,
  15.     periodTime = 0,
  16.     iteration  = 0,
  17.     jumps[100],
  18.     maxJump;
  19.  
  20. void resetIterations(){
  21.     iteration = 0,
  22.     maxJump   = 0;
  23.     for(int i = 0; i < 100; ++i){
  24.         jumps[i] = 0;
  25.     }
  26. }
  27.  
  28. void tracking(int id, void* ptrt){
  29.     static int first = true;
  30.     int newState = digitalRead(pin);
  31.     if(oldState > newState){
  32.         elapsedTime = millis() - startTime;
  33.     }else if(oldState < newState){
  34.         int time = millis();
  35.         periodTime = time - startTime;
  36.         startTime = time;
  37.         if(!first){
  38.             Serial.print('(');
  39.             Serial.print(iteration + 1);
  40.             Serial.print(".) ");
  41.             Serial.print(elapsedTime);
  42.             Serial.print(' ');
  43.             Serial.println(periodTime);
  44.             int humidity = map(elapsedTime, 0, 1500, 0, 100);
  45.             if(iteration == 0){
  46.                 jumps[iteration++] = humidity;
  47.             }else if(iteration < 100){
  48.                 jumps[iteration++] = humidity;
  49.                 int jump = abs(jumps[iteration - 1] - jumps[iteration - 2]);
  50.                 if(jump > maxJump){
  51.                     maxJump = jump;
  52.                 }
  53.                 if(jump > 15){ //mogu da napisem 15 jer je raspon od 0 do 100 isto kao i procenti
  54.                     Serial.print("[BIG-JUMP] There was a big diff. ");
  55.                     Serial.print(jump);
  56.                     Serial.println(" [%]");
  57.                 }
  58.             }else{
  59.                 //druga tacka
  60.                 int errCnt = 0;
  61.                 for(int i = 1; i < 99; ++i){
  62.                     if( (abs(jumps[i] - jumps[i - 1]) > 20 &&
  63.                        abs(jumps[i] - jumps[i + 1]) > 20) ||
  64.                        (abs(jumps[i] - jumps[i - 1]) < 20 &&
  65.                             abs(jumps[i] - jumps[i + 1]) < 20)){
  66.                         Serial.print("[ERROR nm. ");
  67.                         Serial.print(++errCnt);
  68.                         Serial.print("] Approx: ");
  69.                         Serial.println((jumps[i + 1] + jumps[i - 1]) / 2);
  70.                         delay(50);
  71.                    }
  72.                 }
  73.                 //prva tacka
  74.                 Serial.print("[BIGGEST-JUMP] Biggest diff. was ");
  75.                 Serial.println(maxJump);
  76.                 resetIterations();
  77.             }
  78.         }else{
  79.             first = false;
  80.         }
  81.     }
  82.     oldState = newState;
  83. }
  84.  
  85. void setup()
  86. {
  87.     Serial.begin(9600);
  88.     oldState = digitalRead(pin);
  89.     startTime = millis();
  90.     resetIterations();
  91.     pwmSin(33, 1500, 0.1);
  92.     createTask(tracking, 1, TASK_ENABLE, NULL);
  93. }
  94.  
  95. void loop()
  96. {
  97.  
  98. }
  99.  
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement