Encender grupo de 8 leds donde 255 sea encender todos los leds y 000 apagar todos

Hola tengo un problema y es que quiero hacer un codigo el cual lea una cantidad de bits de 0 a 255 y este encienda los leds por ejemplo si escribo el numero 71 encender el led 7 3 2 y 1, a aprte de eso estar separados por filas es decir, 024 255 enciendo todos los leds de la fila 24, estoy haciendo el codigo pero me parece muy chapuzas estar usando digitalWrite HIGH LOW, aqui teneis mas o menos lo que llevo hecho

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(50);
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(7,OUTPUT);

}
String rele;
void loop() {
  if(Serial.available()>0){
    rele = Serial.readString();
    if (rele == "024001\r\n"){
      digitalWrite(13,HIGH);
      digitalWrite(12,LOW);
      digitalWrite(11,LOW);
      digitalWrite(10,LOW);
      digitalWrite(9,LOW);
      digitalWrite(8,LOW);
      digitalWrite(7,LOW);
      
    }
    if (rele == "024002\r\n"){
      digitalWrite(13,LOW);
      digitalWrite(12,HIGH);
      digitalWrite(11,LOW);
      digitalWrite(10,LOW);
      digitalWrite(9,LOW);
      digitalWrite(8,LOW);
      digitalWrite(7,LOW);
    }
    if(rele == "024003\r\n"){
      digitalWrite(13,HIGH);
      digitalWrite(12,HIGH);
      digitalWrite(11,LOW);
      digitalWrite(10,LOW);
      digitalWrite(9,LOW);
      digitalWrite(8,LOW);
      digitalWrite(7,LOW);
    }
    if rele == "024004\r\n"){
      digitalWrite(13,LOW);
      digitalWrite(12,LOW);
      digitalWrite(11,HIGH);
      digitalWrite(10,LOW);
      digitalWrite(9,LOW);
      digitalWrite(8,LOW);
      digitalWrite(7,LOW);
    }
  }
  }

Muchas gracias por su atención

Hola,

  1. Quiere encender 8 bits, pero solo tiene configurados 7 Leds.

  2. En la línea " if rele == "024004\r\n"){" falta un "(" antes de la palabra "relé".
    Correcto si (rele == "024004\r\n"){

  3. No entendí nada sobre la línea...

  4. Seque un código que creo que cumple con su necesidad de encender los LED de acuerdo con el número ingresado.

Recuerda que por ejemplo:
113 = 0x71 bits 7, 3, 2, 1 aciertos.
255 = 0xFF, todos los bits activados.

Para probar, escriba 024113 e ingrese.


//  0x 71 = 0b 0111 0001
// 13, 12, 11, 10, 9, 8,  7  Seven bits only



String rele;
byte myLeds = 0;
byte line = 0;
//-----------------------------------------------------
void setup() {
  Serial.begin(9600);
  Serial.setTimeout(50);
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
}
//-----------------------------------------------------
void loop() {
  if (Serial.available() > 0) {
    rele = Serial.readString();
    Serial.println(rele);
    line = rele.substring(0, 3).toInt();
    myLeds = rele.substring(3, 6).toInt();
    Serial.println(line, HEX);
    Serial.println(myLeds, HEX);
    
    digitalWrite(13, bitRead(myLeds, 0));
    digitalWrite(12, bitRead(myLeds, 1));
    digitalWrite(11, bitRead(myLeds, 2));
    digitalWrite(10, bitRead(myLeds, 3));
    digitalWrite(9, bitRead(myLeds, 4));
    digitalWrite(8, bitRead(myLeds, 5));
    digitalWrite(7, bitRead(myLeds, 6));
    digitalWrite(6, bitRead(myLeds, 7));
  }
}

Muchas gracias por la solución funciona perfectamente, la única duda que tengo con esto, es como has conseguido que solo funcione cuando escribas 024 al principio ya que no encuentro nada en el código que lo ordene, de nuevo muchisimas gracias

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