Lectura de Varios pines al mismo tiempo

Buenas tardes. Tengo la siguiente duda. Estoy realizando una programación que posee 3 pines que realizan el mismo trabajo, es decir, son de seguridad, por lo cual al activarse solo uno de ellos el sistema se detiene. El código programado es bastante largo, por lo cual realizar tres bloques con cada pin sería poco Profesional.
La idea es lograr captar con una función la lectura de los 3 pines para asi generar el resultado deseado. La lógica deberia ser asi:
"Si, algunos de los pines seleccionado es uno, entonces, detener el sistema"

if(digitalRead (Pin2-Pin3-Pin4) == HIGH){
digitalWrite(5, LOW);
}

Enriendo que la que esta entre paréntesis para digitalRead no funciona. Es solo para mostrar el funcionamiento que deseo lograr. De antemano muchas gracias :handshake:

Lea sobre el acceso directo a los pines, sobre los registros DDRx PINx PORTx.

Si los tres pines pertenecen al mismo puerto del controlador, es posible leerlos en un operador. Por ejemplo, los pines 2 3 4 arduino Uno se encuentran en el puerto PORTD (PD2 PD3 PD4).
Puede verificar si los tres son HIGH como este:

if ((PIND & 0x00111000) == 0x00111000)  {  // true if pin2 pin3 pin4 are HIGH at the same moment

La función que debes usar entre estados es OR (que se simboliza || )

estado1 = digitalRead(pin1);
estado2 = digitalRead(pin2);
estado3 = digitalRead(pin3);

if (estado1 || estado2 || estado3) {
  detener_maniobra();
}

// es lo mismo que escribir
// if ((estado1 == HIGH) || (estado2 == HIGH) || (estado3 == HIGH) == true) {

Para usar el acceso a los registros como te sugiere @b707 deberías hacer (para los pines 3, 4 y 5)

if ((PIND & 0x00111000) != 0)  {  // se cumple si alguno de los 3 pines está en HIGH

Saludos

Perfecto. Voy a intentar ambas opciones y les comento como me va. Un saludo cordial a ambos. Muchas gracias por la asistencia :handshake:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.