SHARE
TWEET

Untitled

a guest May 20th, 2019 67 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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top