Работа IR приёмника и дальномеров VL53L0X
- Войдите на сайт для отправки комментариев
Пнд, 04/11/2019 - 22:52
Всем привет! Мучаюсь сейчас с таким вопросом. На Arduino Nano подключил IR приёмник с помощью библиотеки RC5. Все работает, все прекрасно. Затем подключил 6 дальномеров VL53L0X при помощи одноименной библиотеки, все так же работает замечательно, но когда я объединил в одну программу, loop виснет и нечего не работает. Не могу найти проблему
Вот собственно код
#include <VL53L0X.h> #include <Wire.h> #include <RC5.h> #define IR_PIN 11 RC5 rc5(IR_PIN); unsigned char toggle; unsigned char address; unsigned char command; unsigned char ID_IR; int p_front_left, p_front, p_front_right, p_left, p_backside, p_right; #define PR_FRONT_LEFT 2 #define PR_FRONT 3 #define PR_FRONT_RIGHT 4 #define PR_LEFT 5 #define PR_BACKSIDE 6 #define PR_RIGHT 7 #define LED_RED 1 #define LED_YELLOW 14 VL53L0X prep_front_left; VL53L0X prep_front; VL53L0X prep_front_right; VL53L0X prep_left; VL53L0X prep_backside; VL53L0X prep_right; void setup() { Serial.begin(9600); pinMode(LED_RED, OUTPUT); pinMode(LED_YELLOW, OUTPUT); pinMode(PR_FRONT_LEFT, OUTPUT); pinMode(PR_FRONT, OUTPUT); pinMode(PR_FRONT_RIGHT, OUTPUT); pinMode(PR_LEFT, OUTPUT); pinMode(PR_BACKSIDE, OUTPUT); pinMode(PR_RIGHT, OUTPUT); digitalWrite(PR_FRONT_LEFT, LOW); digitalWrite(PR_FRONT, LOW); digitalWrite(PR_FRONT_RIGHT, LOW); digitalWrite(PR_LEFT, LOW); digitalWrite(PR_BACKSIDE, LOW); digitalWrite(PR_RIGHT, LOW); delay(500); Wire.begin(); digitalWrite(PR_FRONT_LEFT, HIGH); delay(150); prep_front_left.init(true); delay(100); prep_front_left.setAddress((uint8_t)22); digitalWrite(PR_FRONT, HIGH); delay(150); prep_front.init(true); delay(100); prep_front.setAddress((uint8_t)23); digitalWrite(PR_FRONT_RIGHT, HIGH); delay(150); prep_front_right.init(true); delay(100); prep_front_right.setAddress((uint8_t)24); digitalWrite(PR_LEFT, HIGH); delay(150); prep_left.init(true); delay(100); prep_left.setAddress((uint8_t)26); digitalWrite(PR_BACKSIDE, HIGH); delay(150); prep_backside.init(true); delay(100); prep_backside.setAddress((uint8_t)27); digitalWrite(PR_RIGHT, HIGH); delay(150); prep_right.init(true); delay(100); prep_right.setAddress((uint8_t)25); } void loop() { if (rc5.read(&toggle, &address, &command)) { Serial.println(address); } if(address == 11) { ID_IR=command; digitalWrite(LED_YELLOW, HIGH); delay(200); digitalWrite(LED_YELLOW, LOW); delay(200); digitalWrite(LED_YELLOW, HIGH); delay(200); digitalWrite(LED_YELLOW, LOW); delay(200); address=111; } p_front_left = prep_front_left.readRangeSingleMillimeters(); p_front = prep_front.readRangeSingleMillimeters(); p_front_right = prep_front_right.readRangeSingleMillimeters(); p_left = prep_left.readRangeSingleMillimeters(); p_backside = prep_backside.readRangeSingleMillimeters(); p_right = prep_right.readRangeSingleMillimeters(); digitalWrite(LED_RED, LOW); if(p_front<400) {digitalWrite(LED_RED, HIGH); digitalWrite(LED_YELLOW, LOW);} }
На какой строке виснет?
Сейчас еще раз протестировал. Прошу прощения, не так написал. Не виснет, а просто ИК приёмник не работает. Если закомментировать со 109 по 114 строки, то ИК приёмник начинает работать. Очень странно, ведь эти строки рабочие.
Ну, наверное, пореже надо читать шесть дальномеров? Сколько времени у них Single Range Reading идёт? Умножьте это число на 6. Вот всё это время ардуина не может принимать и обрабатывать биты с IR.
Хорошо, попробую, спасибо большое
Да, Вы были правы, все заработало