es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actuador de relé se enciende por cualquiera de los 3 sensores táctiles.

Tengo un relé y quiero encender la luz con él, y tengo 2 sensores táctiles, pero con este código solo puedo encenderla con uno. ¿Cómo puedo hacer que funcione? El tercero es un interruptor, pero debería funcionar de la misma manera. Lo intenté con un código diferente y funcionó, pero ese código era para un servo y no un relé.

int touchPin   = 4;
int touchPin2   = 6;   // Arduino pin connected to touch sensor's pin
int touchPin3   = 7 ;
int relayPin = 9;

int val = 0;
int lightON = 0;
int touched = 0;

void setup() {
  Serial.begin(9600);
  pinMode(touchPin, INPUT); 
    pinMode(touchPin2, INPUT);
      pinMode(touchPin3, INPUT);
  pinMode(relayPin, OUTPUT);

}

void loop() {

  val = digitalRead(touchPin);
    val = digitalRead(touchPin2);
      val = digitalRead(touchPin3);

  if(val == HIGH && lightON == LOW){

    touched = 1-touched;
    delay(100);
  }    

  lightON = val;

      if(touched == HIGH){
        Serial.println("Encendido");
        digitalWrite(relayPin, LOW); 

      }else{
        Serial.println("Apagado");
        digitalWrite(relayPin, HIGH);

      }     

  delay(100);
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para que el código funcione con dos sensores táctiles y un interruptor, necesitamos leer la entrada de los tres pines por separado y añadir una condición lógica adicional para comprobar si alguna de las entradas ha sido accionada.

    Aquí está el código modificado:

    int touchPin = 4;
    int touchPin2 = 6; 
    int touchPin3 = 7;
    int relayPin = 9;
    
    int val = 0;
    int lightON = 0;
    int touched = 0;
    
    void setup() {
      Serial.begin(9600);
      pinMode(touchPin, INPUT); 
      pinMode(touchPin2, INPUT);
      pinMode(touchPin3, INPUT);
      pinMode(relayPin, OUTPUT);
    }
    
    void loop() {
      int val1 = digitalRead(touchPin);
      int val2 = digitalRead(touchPin2);
      int val3 = digitalRead(touchPin3);
    
      if ((val1 == HIGH || val2 == HIGH || val3 == HIGH) && lightON == LOW){
        touched = 1 - touched;
        delay(100);
      }    
    
      lightON = (val1 || val2 || val3);
    
      if (touched == HIGH){
        Serial.println("Luz encendida");
        digitalWrite(relayPin, LOW);    
      } else {
        Serial.println("Luz apagada");
        digitalWrite(relayPin, HIGH);   
      }     
    
      delay(100);
    }
    

    En este código, leemos cada entrada de los sensores táctiles por separado y almacenamos los valores en tres variables diferentes: val1, val2 y val3.

    En la condición if donde comprobamos una entrada táctil, usamos el operador lógico OR (||) para comprobar si alguna de las entradas ha sido accionada. Si alguna de las entradas ha sido accionada y la luz está actualmente apagada, cambiamos la variable touched.

    El resto del código sigue siendo el mismo, excepto que usamos las variables val1, val2 y val3 para actualizar la variable lightON.

    Con estas modificaciones, el código debería funcionar con dos sensores táctiles y un interruptor.

Comments are closed.