Как узнавать, как назвать цифровой 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++;
}
@SV Savannah, 👍1
Обсуждение0
- Из-за чего LCD перестанет работать после 5-секундного подключения к Arduino?
- ЖК-дисплей 20x4 будет писать, но не будет обновляться
- Конфликт I2C с двумя ардуино
- Ошибка компиляции для Arduino Nano 33 BLE с библиотекой LiquidCrystal
- Как изменить созданный байт?
- переменная 'LiquidCrystal_I2C lcd' имеет инициализатор, но неполный тип
- Почему мои высокие и низкие значения не обновляются корректно во время последовательных циклов
- Проблемы с добавлением обратного отсчета к фрагменту кода
на 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