Баскетбольная доска Arduino бесконечно передает забитый мяч

Я пытался получить этот проект Arduino. работает, но я столкнулся с некоторыми проблемами.

Проект был разработан для Arduino mega 2560, но я использовал для него свой UNO и макетную плату вместе с библиотекой Software Serial. Я очень, очень новичок в работе с ардуино, поэтому, если есть какие-то основные вещи, которые я могу упустить, пожалуйста, укажите их.

Компоненты:

  • Ардуино УНО
  • Модуль Bluetooth HC-05
  • Датчик приближения E18-D80NK
  • Датчик приближения Saeed Grove 420
  • Резистор 10 кОм
  • Макет
  • Приложение, указанное в приведенной выше ссылке

Проблемы, с которыми я сталкиваюсь

a)Изначально датчик приближения определял, если я, например, провожу рукой перед ним, и отправлял данные в приложение, и он увеличивал счет и воспроизводил звук.

Однако, если бы я попытался щелкнуть датчик вибрации, не двигая рукой перед датчиком приближения, промах не был бы зафиксирован. Сначала даже простое прикосновение к датчику приближения также записывало счет, но позже он просто ничего не делал.

b) Не знаю, в чем проблема, но сейчас вообще ничего не происходит. Проводка и все остальное подключено так же, как и раньше, но теперь, хотя датчик приближения загорается, если я провожу рукой перед ним, никакие баллы не передаются модулем HC-05 или чем-то еще. Я пытался оставить последовательный монитор открытым, но на нем ничего не печатается.

Кроме того, код, который я вставил ниже, добавлен после включения заголовка библиотеки SerialSoftware и после удаления всего кода для настройки светодиодных индикаторов, который все еще доступен по ссылке выше. Проблема B начала возникать до того, как я это сделал, поэтому я не думаю, что это имеет к этому какое-то отношение. Просто не хотел включать светодиоды в свой проект.

Любая помощь будет очень признательна, спасибо!! Если есть какая-либо информация, которую я пропустил, сообщите мне.

Редактировать: Итак, провода RX и TX модуля были подключены не к тем разъемам. RXD модуля hc-05 теперь находится на контакте 11, а TXD на контакте 10. Данные передаются, но он просто бесконечно увеличивает количество снимков, даже если датчик приближения ничего не обнаруживает. :/ Какие-либо предложения?

Edit2: Хорошо, проблема решена. Я не установил правильную скорость передачи в части настройки Bluetooth. Должно быть 9600.

#include <SoftwareSerial.h>
SoftwareSerial Serial1(10, 11); // прием, передача

//------------------------------------------------ ----------------------------//
// Имя файла: Scoreboard.ino //
// Описание: Smart Basketball Scoreboard //
// Версия: 1.1.0 //
// Автор: Марсело Авила де Оливейра <[email protected]> //
//------------------------------------------------ ----------------------------//

//------------------------------------------------ ----------------------------//
// ОПРЕДЕЛЕНИЯ //
//------------------------------------------------ ----------------------------//

// ВКЛЮЧАЕМ РЕЖИМ ОТЛАДКИ
// # определить ОТЛАДКУ
// # определить DEBUG_PROX
// # определить DEBUG_VIBR

//------------------------------------------------ ----------------------------//
// КОНСТАНТЫ //
//------------------------------------------------ ----------------------------//

// пины
const int prox_pin = 2;
const int vibr_pin = 3;

// ВРЕМЯ
const unsigned long wait_interval = 3000;

//------------------------------------------------ ----------------------------//
// ПЕРЕМЕННЫЕ //
//------------------------------------------------ ----------------------------//

// ВРЕМЯ
unsigned long wait_time;

// ПОЛОЖЕНИЕ ДЕЛ
boolean prox = false;
boolean vibr = false;
boolean wait = false;

//------------------------------------------------ ----------------------------//
// ФУНКЦИИ (НАСТРОЙКИ) //
//------------------------------------------------ ----------------------------//

void setup() {
    // ЗАПУСК выводов
    pinMode(prox_pin, INPUT);
    pinMode(vibr_pin, INPUT);

    // НАЧАТЬ ПОСЛЕДОВАТЕЛЬНУЮ СВЯЗЬ
    Serial.begin(9600);

    // НАЧАЛО СВЯЗИ ПО BLUETOOTH
    setup_bluetooth();


    #ifdef DEBUG
        Serial.println("Board is alive");
        Serial.println();
    #endif
}

void setup_bluetooth() {
    #ifdef DEBUG
        Serial.println("Setting Bluetooth");
        Serial.println();
    #endif

    Serial1.begin(38400);                   // Установить скорость передачи данных
    Serial1.print("\r\n+STWMOD=0\r\n");     // Настраиваем на работу в ведомом режиме
    Serial1.print("\r\n+STNA=Arduino\r\n"); // Имя набора
    Serial1.print("\r\n+STOAUT=1\r\n");     // Разрешить парному устройству подключаться ко мне
    Serial1.print("\r\n+STAUTO=0\r\n");     // Здесь должно быть запрещено автоподключение
    delay(2000);                            // Эта задержка обязательна.
    Serial1.print("\r\n+INQ=1\r\n");        // Делаем ведомого запрашиваемым
    delay(2000);                            // Эта задержка обязательна.
    while (Serial1.available()) {           // Очистить данные
        delay(50);
        Serial1.read();
    }
}

//------------------------------------------------ ----------------------------//
// ФУНКЦИИ (ПРОВЕРКА) //
//------------------------------------------------ ----------------------------//

void check_prox() {
    if (!prox) {
        if(digitalRead(prox_pin) == LOW) {
            #ifdef DEBUG_PROX
                Serial.println("Proximity detected");
                Serial.println();
            #endif

            prox = true;
            if (!vibr) {
                wait = true;
                wait_time = millis() + wait_interval;
            }
            set_shot(1);
        }
    }
}

void check_vibr() {
    if (!prox && !vibr) {
        if(digitalRead(vibr_pin) == HIGH) {
            #ifdef DEBUG_PROX
                Serial.println("Vibration detected");
                Serial.println();
            #endif

            vibr = true;
            wait = true;
            wait_time = millis() + wait_interval;
        }
    }
}

void check_wait() {
    if (wait && millis() > wait_time) {
        if (!prox) {
            set_shot(0);
        }
        reset();
    }
}

//------------------------------------------------ ----------------------------//
// ФУНКЦИИ (ИС) //
//------------------------------------------------ ----------------------------//

void set_shot(int mode) {
    // РЕЖИМ:
    // 0 = НЕПРАВИЛЬНЫЙ ВЫСТРЕЛ (ПРОМАХ)
    // 1 = ПРАВЫЙ ВЫСТРЕЛ (СЧЕТ)

    Serial1.print(mode);
    delay(1000);
}

void reset() {
    vibr = false;
    prox = false;
    wait = false;
}

//------------------------------------------------ ----------------------------//
// ОСНОВНОЙ //
//------------------------------------------------ ----------------------------//

void loop() {
    check_prox();
    check_vibr();
    check_wait();
}

, 👍-1


1 ответ


0

Хорошо, проблема решена. Я не установил правильную скорость передачи в части настройки Bluetooth. Должно быть 9600.

,