Первый раз работаю с ардуино, нужна помощь в адаптации проекта с UNO на NANO

Я впервые работаю с Arduino, и у меня возникли некоторые проблемы при попытке скопировать программу, которую я нашел в Интернете, на свой Nano.

По сути, мой проект состоит из датчика пульса, который отправляет информацию о пульсе на Arduino, а затем на Bluetooth-модуль hc-05, чтобы мой телефон мог получать эту информацию в режиме реального времени.

На моем nano: D2 получает выходной сигнал датчика, D8 и D9 подключены к контактам RX/RT на HC05, а к D13 подключен светодиод.

Теперь вот в чем дело, я действительно мало что знаю об этом, и код, который я нашел, использует другие контакты, чем те, которые использую я.

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

Полный код можно найти по адресу https://www.instructables.com/id/Pulse-Sensor-With-Bluetooth -и-Ардуино/

Вот часть моего кода

//блютуз
#include <SoftwareSerial.h>// импортируем библиотеку последовательных портов

SoftwareSerial Genotronex(8, 9); // прием, передача
int ledpin=13; // светодиод на D13 будет мигать вкл/выкл
int BluetoothData; // данные, переданные с компьютера

// Переменные
int pulsePin = 2;                 // Фиолетовый провод датчика пульса, подключенный к аналоговому контакту 0
int blinkPin = 13;                // вывод для мигания светодиода при каждом ударе
int fadePin = 5;                  // вывод для причудливого классического затухания, мигающего на каждом такте
int fadeRate = 0;                 // используется для постепенного включения светодиода с помощью ШИМ на fadePin

// Изменчивые переменные, используемые в подпрограмме обслуживания прерывания!
volatile int BPM;                   // целое число, которое содержит необработанный аналог в 0. обновляется каждые 2 мс
volatile int Signal;                // содержит входящие необработанные данные
volatile int IBI = 600;             // int, который содержит временной интервал между ударами! Сеять надо!
volatile boolean Pulse = false;     // «Истинно», когда обнаружено живое сердцебиение пользователя. «Ложь», если это не «живой бит».
volatile boolean QS = false;        // становится истинным, когда Arduoino находит бит.

// С уважением, Serial OutPut -- Настройте это в соответствии с вашими потребностями
static boolean serialVisual = true;   // По умолчанию установлено значение «false». Снова установите значение «true», чтобы увидеть визуальный пульс Arduino Serial Monitor ASCII.


void setup(){
  pinMode(blinkPin,OUTPUT);         // вывод, который будет мигать в такт вашему сердцу!
  pinMode(fadePin,OUTPUT);          // вывод, который будет исчезать в такт вашему сердцу!
  Serial.begin(115200);             // мы согласны говорить быстро!
  interruptSetup();                 // настраивает чтение сигнала датчика пульса каждые 2 мс
   // НЕ КОММЕНТИРУЙТЕ СЛЕДУЮЩУЮ СТРОКУ, ЕСЛИ ВЫ ПОДАЕТЕ ПИТАНИЕ НА НИЗКОЕ НАПРЯЖЕНИЕ на датчик пульса,
   // И ПОДАЕМ ЭТО НАПРЯЖЕНИЕ НА ВЫВОД A-REF
// аналоговая ссылка (ВНЕШНЯЯ);
Genotronex.begin(9600);
  Genotronex.println("Bluetooth On please press 1 or 0 blink LED ..");
  pinMode(ledpin,OUTPUT);
}


// Где происходят чудеса
void loop(){

    serialOutput() ;       

  if (QS == true){     // Было найдено сердцебиение
                       // BPM и IBI определены
                       // Quantified Self "QS" true, когда arduino находит сердцебиение
        digitalWrite(blinkPin,HIGH);     // Мигаем светодиодом, мы получили удар.
        fadeRate = 255;         // Создает эффект затухания светодиода
                                // Установите для переменной 'fadeRate' значение 255, чтобы затухать светодиод с импульсом
        serialOutputWhenBeatHappens();   // Случился бит, выведите его в последовательный порт.
        QS = false;                      // сброс флага Quantified Self для следующего раза
       } 
      else { 

      digitalWrite(blinkPin,LOW);            // Биений нет, выключаем светодиод на пин 13
      }

   ledFadeToBeat();                      // Создает эффект затухания светодиода
  if (Genotronex.available()){
BluetoothData=Genotronex.read();
   if(BluetoothData=='1'){   // если нажата цифра 1 ....
   digitalWrite(ledpin,1);
   Genotronex.println("LED  On D12 ON ! ");
   }
  if (BluetoothData=='0'){// если нажата цифра 0 ....
  digitalWrite(ledpin,0);
   Genotronex.println("LED  On D12 Off ! ");
  }
}
  delay(20);                             // сделать перерыв
}```


, 👍-1

Обсуждение

почему вы считаете, что синхронизация светодиода с датчиком на самом деле будет посылать импульсы на телефон?, @jsotola

Потому что каждый раз, когда светодиод мигает, я получаю это как импульс на телефоне., @Ricardo

портировать скетч из Uno в Nano делать: ничего, @Juraj

@Ricardo, действие передачи импульса заставляет светодиод мигать, а не наоборот .... вы хотите, чтобы импульс передавался каждый раз, когда срабатывает датчик ... светодиод не имеет значения, @jsotola

Я не понимаю вашей проблемы. Что должен делать светодиод по отношению к чему? Также: Можете ли вы опубликовать полный код. Отсутствуют некоторые реализации функций, которые могут быть важны для всего, что вы хотите., @chrisl

@chrisl светодиод на D13 должен мигать каждый раз, когда Arduino получает импульс от D2. Полный код находится в ссылке, я не знаю, как размещать здесь несколько вкладок. В основном у меня возникли проблемы с изменением контактов в коде, чтобы использовать его на моем nano, все должно остаться прежним., @Ricardo

@jsotola Да, ты прав, @Ricardo

@juraj все, что мне нужно сделать, это изменить контакты из исходной программы, чтобы она работала с моей Arduino Nano, я знаю, что это очень просто, но я застрял, @Ricardo

Оригинальный код использует PIN A0 для получения выходных данных от датчика, я использую D2. Я заменил 0 на 2 в переменной pulsePin, но Arduino все равно не получает информацию о импульсах, в моем телефоне я получаю случайные импульсы, но они не исходят от датчика., @Ricardo

Вы не можете использовать контакт 2. В скетче используется AnalogRead, который работает только с контактами A. если вы изменили его на 2, то это А2. зачем пин поменял?, @Juraj

@juraj Я изменил его на контакт A0, и он работал нормально! Я все еще хотел бы знать, как изменить его с A0 на D2. Я действительно понятия не имею и уже переключил аналоговое чтение на цифровое чтение, но это тоже не сработало, спасибо :), @Ricardo

для AnalogRead пин должен быть аналоговым. Я не знаю, почему здесь используется AnalogRead, @Juraj


1 ответ


0

Во-первых: нет необходимости менять назначение контактов при переходе с Uno на Nano. Они используют один и тот же микроконтроллер и имеют одинаковые контакты.

Вы установили для pulsePin значение 2, что соответствует контакту D2. Но датчик пульса дает вам аналоговый сигнал. D2 не может измерять аналоговые напряжения, он может измерять только цифровые напряжения. Это означает, что вам нужно использовать один из аналоговых контактов, от A0 до A7, поэтому используйте один из этих контактов в объявлении pulsePin.

Причина этого в том, что микроконтроллер использует дополнительное периферийное устройство, включенное в него для измерения аналоговых напряжений: АЦП (аналого-цифровой преобразователь). Его можно подключить только к ограниченному количеству контактов (внутри через мультиплексор). Это также означает, что вы можете одновременно измерять аналоговое напряжение только на одном выводе.

,