Advertisement
mod4

Deprez Arduino

Mar 15th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.91 KB | None | 0 0
  1. /*
  2. "Analóg" távolságmérő "műszer"
  3. "Analog" distance meter "instrument"
  4.  
  5. */
  6.  
  7. #include <Servo.h>
  8.  
  9. bool measurementFinished = false;
  10. unsigned long startTimestamp;
  11. unsigned long endTimestamp;
  12.  
  13. // 0,0343 cm / s
  14. // 0,0343 0,0686  0,1372  0,2744  0,5488  1,0976  2,1952  4,3904  8,7808  17,5616 35,1232 70,2464 140,4928  280,9856  561,9712  1123,9424
  15. #define HANGSEBESSEG_SZORZO (1124)
  16. // oda-vissza
  17. #define HANGSEBESSEG_SKALA (16)
  18.  
  19. #define TAVMERES_IDOZITES_MS  (250)
  20.  
  21. void triggerDistance(void);
  22. void isr_DistanceMeter(void);
  23.  
  24. // 0 - 100%
  25. // 180 - 0%
  26. Servo szervo;
  27.  
  28. const int trigPin = 7;
  29. const int echoPin = 2;
  30. unsigned long distance;
  31. unsigned long triggerSchedule = 0;
  32.  
  33. void setup() {
  34.   szervo.attach(9);
  35.   pinMode(trigPin, OUTPUT);
  36.   digitalWrite(trigPin, LOW);
  37.   pinMode(echoPin, INPUT);
  38.   Serial.begin(115200);
  39.   szervo.write(0);
  40.   delay(1000);
  41.   szervo.write(180);
  42.   attachInterrupt(digitalPinToInterrupt(2), isr_DistanceMeter, CHANGE);
  43. }
  44.  
  45. void loop() {
  46.   if(triggerSchedule <= millis())
  47.   {
  48.     triggerDistance();
  49.     triggerSchedule = millis() + TAVMERES_IDOZITES_MS;    
  50.   }
  51.  
  52.   if(measurementFinished == true)
  53.   {
  54.     measurementFinished = false;
  55.     distance = calculateDistance(endTimestamp - startTimestamp);
  56.     if(distance > 180)
  57.     {
  58.       szervo.write(0);
  59.     }
  60.     else
  61.     {
  62.       szervo.write(180 - distance);
  63.     }
  64.     Serial.print("Tavolsag: ");
  65.     Serial.println(distance);
  66.   }
  67. }
  68.  
  69. void triggerDistance(void)
  70. {
  71.   digitalWrite(trigPin, HIGH);
  72.   delayMicroseconds(10);
  73.   digitalWrite(trigPin, LOW);
  74. }
  75.  
  76. unsigned long calculateDistance(unsigned long duration)
  77. {
  78.   return (duration * HANGSEBESSEG_SZORZO) >> HANGSEBESSEG_SKALA;
  79. }
  80.  
  81. void isr_DistanceMeter(void)
  82. {
  83.   if(digitalRead(2) == HIGH)
  84.   {
  85.     measurementFinished = false;
  86.     startTimestamp = micros();
  87.   }
  88.   else
  89.   {
  90.     endTimestamp = micros();
  91.     measurementFinished = true;
  92.   }  
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement