Заполнение массива данных pinState состоянием пинов Ардуино
- Войдите на сайт для отправки комментариев
Чт, 24/01/2019 - 18:23
Возникла необходимость опрашивать состояние пинов D2-D8 c DIP-переключателем на 7 разрядов, который замыкает каждый подтянутый к + пин на массу. С помощью комбинации 1/0 на этих 7-и пинах есть необходимость оперативного выбора одного из 128-и каналов для радиомодема nRF24L01 когда под рукой нет ПК.
Вопрос: как правильно реализовать опрос пинов Ардуино чтобы а зависимости от логического уровня на каждом из них получить конкретный номер канала в диапазоне 0-127 (2^7). Вот мой скетч но он работает не так как надо:
#include <Arduino.h>
#define LOW_PIN 2 // pin D2 - старший бит
#define HIGH_PIN 10 // pin D10 - младший бит
void setup() {
bool pinState[] = {0};
Serial.begin(9600);
Serial.println("Arduino pin's state:");
Serial.print("[ "); // печатаем открывающуюся скобку с пробелом после
for (byte n = LOW_PIN; n < HIGH_PIN; n++) { // перебираем номера пинов от lowPin до highPin
pinMode(n, INPUT_PULLUP); // устанавливаем каждый n-ый пин как вход с подтяжкой к +
pinState[n - LOW_PIN] == digitalRead(n); // записываем считанное состояние каждого n-го пина в n-LOW_PIN массив pinState
Serial.print(pinState[n - LOW_PIN]); // печатаем n-й элемент массива pinState
Serial.print(' '); // печатаем пробел
}
Serial.println(']'); // печатаем закрывающуюся скобку ]
Serial.print("Size of array: "); // печатам фразу ""
Serial.print(sizeof(pinState)); // печатаем размер массимва pinState в байтах
Serial.println(" bytes"); // печатаем фразу ""
Serial.println("======================"); // печатаем строку
}
void loop() {}
Исправленый код:
Типа этого, полагаю:
Типа этого, полагаю:
Не жалеете глаза свои.(((
Спасибо за помощь, скетч зарботал как следует только с инверсией т.к. цифровые входы Ардуины я притянул к + для четкого определения лог.1 на них при снятом джампере. Вот рабочий вариант
Спасибо за помощь, скетч зарботал как следует только с инверсией т.к. цифровые входы Ардуины я притянул к + для четкого определения лог.1 на них при снятом джампере. Вот рабочий вариант
Мой предыдущий пост, вам как-бы намекал, научитесь код вставлять нормально.
Вопрос №2
Как лучше организовать опрос аналоговых входов A6 и A7 чтобы к ним подключить пару джамперов для выбора выходной мощности передатчика nRF24L01:
A6 A7
Tx_OFF: 0 0
Tx_MIN: 0 1
Tx_MED: 1 0
Tx_HIGH: 1 1
Тут вариант с digitalRead(pin) уже не прокатит т.к. аналоговые входы можно использовать только как цифровые ВХОДЫ D20, D21
Пины D0/D1 - UART (для отладки)
Пины D2-D8 - джампера для выбора адреса (номера) канала
Пины D9-D13 - 2 сигнала управления nRF24L01 + 3 сигнала для SPI
Пины А0-А3 - входы для аналоговые датчиков или выходы для подключения 4-х реле (или дешифратора на 16 выходов, например 155ИД3)
Пины A4/A5 - I2C (для подключения различных датчиков и дисплеев)
Пины A6/A7 - джампера для вкл/выкл nRF24L01 и ручного выбора выходной мощности
Спасибо за помощь, скетч зарботал как следует только с инверсией т.к. цифровые входы Ардуины я притянул к + для четкого определения лог.1 на них при снятом джампере.
Ну, инвертируйте результат digitalRead() через оператор отрицания: http://arduino.ru/Reference/Boolean
И прислушайтесь к bwn, пока он не избанил вас за нарушения, а меня за пособничество.
"аналоговое" значение можно привести к дижитальному через сравнение результата чтения с пина с определенными значениями (положим N и K): менее N -> 0, более K -> 1.
Что-то типо:
Типо. Только входы надо резистором притянуть куда-нить.