if (digitalRead(BUT_PIN1) == LOW )
if (digitalRead(BUT_PIN2) == LOW)
if (digitalRead(BUT_PIN3) == LOW )
if (digitalRead(BUT_PIN4) == LOW)
if (digitalRead(BUT_PIN5) == LOW)
if (digitalRead(BUT_PIN6) == LOW)
if (digitalRead(BUT_PIN7) == LOW)
if (digitalRead(BUT_PIN8) == LOW)
#define _BIT(pin) ((uint32_t)0x01 << ((pin > 13) ? (pin + 2) : pin))
#define _PINS(p0,p1,p2,p3,p4,p5,p6,p7) (_BIT(p0) | _BIT(p1) | _BIT(p2) | _BIT(p3) | _BIT(p4) | _BIT(p5) | _BIT(p6) | _BIT(p7))
#define READ_PINS(p0,p1,p2,p3,p4,p5,p6,p7) (boolean)( \
(PIND & (uint8_t)_PINS(p0,p1,p2,p3,p4,p5,p6,p7)) | \
(PINB & (uint8_t)(_PINS(p0,p1,p2,p3,p4,p5,p6,p7) >> 8)) | \
(PINC & (uint8_t)(_PINS(p0,p1,p2,p3,p4,p5,p6,p7) >> 16)))
void setup() {
//Инициализация пинов
}
void loop() {
if (!READ_PINS(BUT_PIN1, BUT_PIN2, BUT_PIN3, BUT_PIN4, BUT_PIN5, BUT_PIN6, BUT_PIN7, BUT_PIN8) {
//Что-то сделать если все пины в низком уровне
}
}
byte BUT_PIN[]
{BUT_PIN1,BUT_PIN2,BUT_PIN3,......};
void setap(){
for(int i=0;i<8;i++)
{pinMode(BUT_PIN[i],INPUT);
}
void loop()
{bool allow = true;
for(int i=0;i<8;i=++){
if (digitalRead(BUT_PIN[i])==HIGH)
allow = false;
}
if(allow)
{выполняем код}
Такой вопрос, зачем это делать если в маске достаточно на это место поставить два нуля. Это другой подход?Если сделать PIND >> 2, то они будут исключены из проверки.