60 lines
1.2 KiB
C++
Raw Normal View History

2017-08-20 22:12:07 +02:00
//
// FILE: PinInGroup.cpp
// AUTHOR: Rob Tillaart
2020-05-22 16:00:06 +02:00
// VERSION: 0.1.1
2017-08-20 22:12:07 +02:00
// DATE: 2017-04-26
// PURPOSE: PinInGroup library for Arduino
2020-05-22 16:00:06 +02:00
// goal is to easily read a group of pins that logically
2017-08-20 22:12:07 +02:00
// belong to each other.
// The pins can be in any order.
2020-05-22 16:00:06 +02:00
// URL: https://github.com/RobTillaart/PinInGroup
// http://forum.arduino.cc/index.php?topic=469599.0
2017-08-20 22:12:07 +02:00
//
2020-05-22 16:00:06 +02:00
// 0.1.0 2017-08-20 initial version (based upon pinGroup)
// 0.1.1 2020-05-19 refactor; added clear(); added param for INPUT or INPUT_PULLUP
2017-08-20 22:12:07 +02:00
#include "PinInGroup.h"
PinInGroup::PinInGroup()
2020-05-22 16:00:06 +02:00
{
clear();
}
void PinInGroup::clear()
2017-08-20 22:12:07 +02:00
{
_size = 0;
}
2020-05-22 16:00:06 +02:00
uint8_t PinInGroup::add(uint8_t sz, uint8_t * ar, uint8_t value)
2017-08-20 22:12:07 +02:00
{
2020-05-22 16:00:06 +02:00
int n = 0;
for (uint8_t i = 0; i < sz; i++)
2017-08-20 22:12:07 +02:00
{
2020-05-22 16:00:06 +02:00
n += add(ar[i], value);
2017-08-20 22:12:07 +02:00
}
2020-05-22 16:00:06 +02:00
return n;
2017-08-20 22:12:07 +02:00
}
2020-05-22 16:00:06 +02:00
uint8_t PinInGroup::add(uint8_t pin, uint8_t value)
2017-08-20 22:12:07 +02:00
{
2020-05-22 16:00:06 +02:00
if (_size >= PININGROUP_MAXSIZE) return 0;
_pins[_size] = pin;
pinMode(pin, value);
_size++;
return 1;
2017-08-20 22:12:07 +02:00
}
uint16_t PinInGroup::read()
{
uint16_t value = 0;
2020-05-22 16:00:06 +02:00
uint16_t mask = 0x01;
2017-08-20 22:12:07 +02:00
for (uint8_t i = 0; i < _size; i++)
{
2020-05-22 16:00:06 +02:00
if (digitalRead(_pins[i])) value |= mask;
mask <<= 1;
2017-08-20 22:12:07 +02:00
}
return value;
}
2020-05-22 16:00:06 +02:00
// --- END OF FILE ---