Guest User

Untitled

a guest
May 20th, 2019
79
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Adafruit_VL53L0X.h"
  2. #include <LiquidCrystal.h>
  3.  
  4. //XSHUT Pins
  5. #define XSHUT1 8
  6. #define XSHUT2 9
  7.  
  8. //Buzzer Pin
  9. #define BUZZER 10
  10.  
  11. //Screen Pins
  12. #define RS 12
  13. #define EN 11
  14. #define D4 5
  15. #define D5 4
  16. #define D6 3
  17. #define D7 2
  18.  
  19. //Caracter custom pentru a fi afisat pe display
  20. byte p5[8] = {
  21. 0x1F,
  22. 0x1F,
  23. 0x1F,
  24. 0x1F,
  25. 0x1F,
  26. 0x1F,
  27. 0x1F,
  28. 0x1F
  29. };
  30.  
  31.  
  32.  
  33. //Obiect Senzori Distanta
  34. Adafruit_VL53L0X lox1 = Adafruit_VL53L0X();
  35. Adafruit_VL53L0X lox2 = Adafruit_VL53L0X();
  36.  
  37. //Obiect LCD
  38. LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
  39.  
  40. int dist1, dist2 = 0;
  41.  
  42. void setup() {
  43. //Initializam caracterul custom cu id-ul 1
  44. lcd.createChar(1, p5);
  45. //Initializam lcd-ul cu marimea 16 x 2
  46. lcd.begin(16,2);
  47.  
  48. //Setare pin buzzer ca output
  49. pinMode(BUZZER, OUTPUT);
  50.  
  51. //Setare pini XSHUT (pentru schimbarea adreselor pe i2c) ca output
  52. pinMode(XSHUT1, OUTPUT);
  53. pinMode(XSHUT2, OUTPUT);
  54.  
  55. //Setare pininilor XSHUT1 si XSHUT2 pe LOW pentru a reseta senzorul
  56. delay(10);
  57. digitalWrite(XSHUT1, LOW);
  58. digitalWrite(XSHUT2, LOW);
  59.  
  60. //Setarea pinilor XSHUT1 si XSHUT2 pe High pentru a reseta senzorul
  61. delay(10);
  62. digitalWrite(XSHUT1, HIGH);
  63. digitalWrite(XSHUT2, HIGH);
  64.  
  65. //Setarea pinului XSHUT2 pe low pentru a putea seta adresa primului senzor
  66. delay(10);
  67. digitalWrite(XSHUT2, LOW);
  68. lox1.begin(0x30);
  69.  
  70. //Setarea pinului XSHUT2 pe high pentru a seta adresa la al doilea senzor
  71. delay(10);
  72. digitalWrite(XSHUT2, HIGH);
  73. lox2.begin(0x31);
  74. }
  75.  
  76. void loop() {
  77. //Obiecte masurare
  78. VL53L0X_RangingMeasurementData_t measure1;
  79. VL53L0X_RangingMeasurementData_t measure2;
  80.  
  81. lox1.rangingTest(&measure1, false);
  82. lox2.rangingTest(&measure2, false);
  83.  
  84. if (measure1.RangeStatus != 4) { // eroare in caz ca nu a fost masurat bine, a depasit limita senzorului de masurare
  85. dist1 = measure1.RangeMilliMeter;
  86. }
  87. else { // in caz ca a fost depasita limita senzorului, valoarea distantei va ramane 2001 in loc de a afisa o distanta eronata
  88. dist1 = 2001;
  89. }
  90.  
  91. if (measure2.RangeStatus != 4) { // eroare in caz ca nu a fost masurat bine, a depasit limita senzorului de masurare
  92. dist2 = measure2.RangeMilliMeter;
  93. }
  94. else {
  95. dist2 = 2001; // in caz ca a fost depasita limita senzorului, valoarea distantei va ramane 2001 in loc de a afisa o distanta eronata
  96. }
  97.  
  98. //Afisare pe ecran a distantelor celor 2 senzori
  99. lcd.setCursor(0,0);
  100. lcd.print(dist1);
  101. lcd.print(" - ");
  102. lcd.print(dist2);
  103.  
  104. lcd.setCursor(0,1);
  105.  
  106. // Limitare distanta la 1000
  107. if (dist1 > 1000){
  108. dist1 = 1000;
  109. }
  110.  
  111. // Limitare distanta la 1000
  112. if (dist2 > 1000){
  113. dist2 = 1000;
  114. }
  115.  
  116. int j;
  117.  
  118. // Interpolare a valorii masurate
  119. // Se va lua in considerare valoarea minima citita de cei 2 senzori
  120. if(dist1 < dist2){
  121. j = 1 + ((16 - 1) * (((float)dist1 - 1) / (1000 - 1)));
  122. }
  123. else {
  124. j = 1 + ((16 - 1) * (((float)dist1 - 1) / (1000 - 1)));
  125. }
  126.  
  127. // Afisare pe display in functie de valoarea calculata mai sus
  128. for(int i = 0; i < (int)j; i++){
  129. lcd.setCursor(i,1);
  130. lcd.write(1);
  131. //Activare buzzer
  132. tone(BUZZER, (3000 - (100*j)) );
  133. }
  134.  
  135. delay(100);
  136. //Dezactivare buzzer
  137. noTone(BUZZER);
  138. delay(100);
  139. lcd.clear();
  140.  
  141. }
RAW Paste Data