Как узнавать, как назвать цифровой pin, который вы используете? Изменение pin датчика при использовании

Я скачал скетч потока воды и заставил его работать на bread board с помощью Uno и жидкокристаллического экрана. Я хочу сделать это на плате perf, используя Nano, а НЕ I2C LCD.

Я припаял все это, заставил "Привет, мир" работать нормально. Но поскольку мой скетч потока изначально использует D2 для датчика, а новый скетч использует D2 для жидкокристаллического дисплея, мне, очевидно, нужно сменить штифт датчика. У меня есть датчик, подключенный к D8, но я не могу понять, как сказать это скетчу...

Я считаю, что это такая строка кода:

    byte sensorInterrupt = 0;  // 0 = цифровой пин 2
    byte sensorPin       = 2;

Но я пробовал менять значения на основе диаграммы nano pin out, но просто не могу заставить ее читать. Я не думаю, что это аппаратная проблема, но если я смогу получить подтверждение того, что у меня есть правильный вывод, я могу вернуться к де-припою и проверить ...

    /*
Датчик расхода жидкости-DIYhacking.com Арвинд Санджив

Измерьте расход жидкости/воды, используя этот код. 
Подключите Vcc и Gnd датчика к arduino, а
сигнальную линию-к цифровому контакту arduino 2.
 
 */
// включить библиотечный код:
#include <LiquidCrystal.h>

// инициализируйте библиотеку, связав любой необходимый контакт жидкокристаллического интерфейса
// с помощью контакта arduino он подключается к
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


byte statusLed    = 13;

byte sensorInterrupt = 0;  // 0 = digital pin 2
byte sensorPin       = 2;

// Датчик расхода с эффектом Холла выдает примерно 4,5 импульса в секунду.
// расход / литр/минута.
float calibrationFactor = 7.55;  //biger more / min

volatile byte pulseCount;  

float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;

unsigned long oldTime;

void setup()
{
  
  // Инициализировать последовательное соединение для передачи значений хосту
  Serial.begin(9600);

     lcd.begin(16, 2);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("S.V. SAVANNAH");
   lcd.setCursor(0,1);
   lcd.print("DAY TANK");
   
  // Настройка светодиодной линии состояния в качестве выходного
  pinMode(statusLed, OUTPUT);
  digitalWrite(statusLed, HIGH);  // У нас есть подключенный светодиод active-low
  
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);

  pulseCount        = 0;
  flowRate          = 0.0;
  flowMilliLitres   = 0;
  totalMilliLitres  = 0;
  oldTime           = 0;

  // Датчик эффекта Холла подключен к контакту 2, который использует прерывание 0.
  // Сконфигурирован для запуска при ПАДАЮЩЕМ изменении состояния (переход от МАКСИМУМА
  // до сотояния LOW)
  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}

/**
 * Main program loop
 */
void loop()
{
   
   if((millis() - oldTime) > 1000)    // Счетчики обработки только один раз в секунду
  { 
    // Disable the interrupt while calculating flow rate and sending the value to
    // the host
    detachInterrupt(sensorInterrupt);
        
    // Поскольку этот цикл может не завершиться ровно за 1-секундные интервалы, мы вычисляем
    // количество миллисекунд, прошедших с момента последнего выполнения и использования
    // что для масштабирования вывода. Мы также применяем калибровочный фактор для масштабирования выходного сигнала
    // на основе числа импульсов в секунду на единицу измерения (л/мин в
    // данном случае) исходит от датчика.
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    
    // Обратите внимание на время выполнения этого прохода обработки. Обратите внимание, что, поскольку мы
    // disabled прерывает функцию millis() на самом деле не будет увеличиваться правильно
    // на данный момент, но он все равно вернет значение, которое было установлено ранее
    // прерывания ушли.
    oldTime = millis();
    
    // Разделите расход в литрах/мин на 60, чтобы определить, сколько литров
    // прошел через датчик в этом 1-секундном интервале, затем умножьте на 1000, чтобы
    // преобразовать в миллилитры.
    flowMilliLitres = (flowRate / 60) * 1000;
    
    // Добавьте миллилитры, переданные за эту секунду, к общему итогу
    totalMilliLitres += flowMilliLitres;
      
    unsigned int frac;
    
    // Вывести расход за эту секунду в литрах / минуту
    Serial.print("Flow rate: ");
    Serial.print(int(flowRate));  // целая часть переменной
    Serial.print("L/min");
    Serial.print("\t");       // Print tab space

    // Выведите совокупное общее количество литров, вытекших с момента запуска
    Serial.print("Output Liquid Quantity: ");        
    Serial.print(totalMilliLitres);
    Serial.println("mL"); 
    Serial.print("\t");       // Print tab space
  Serial.print(totalMilliLitres/1000);
  Serial.print("L");



   
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print(int(flowRate));  // Вывод целочисленной части переменной
      lcd.print("L/min ");

    // Вывод совокупное общее количество литров, вытекших с момента запуска
    lcd.print("Total ");        
  lcd.print(totalMilliLitres/1000.00);
  lcd.print("L");

    // Сброс счетчика импульсов, чтобы мы могли снова начать инкрементацию
    pulseCount = 0;
    
    // Снова включите прерывание теперь, когда мы закончили посылать выходные данные
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }
}

/*
Insterrupt Service Routine
 */
void pulseCounter()
{
  // Инкремент счетчика импульсов
  pulseCount++;
}

, 👍1

Обсуждение

на Nano только контакты 2 и 3 можно использовать с " attachInterrupt(digitalPinToInterrupt(pin), ...` https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/, @Juraj

Может ли ЖК-дисплей использовать D8 вместо D2 или D3 для "RS" или "E" на ЖК-дисплее?, @SV Savannah