Go Down

Topic: Evaluar arrays en un if [SOLUCIONADO] (Read 407 times) previous topic - next topic

Sep 16, 2018, 03:20 am Last Edit: Sep 16, 2018, 06:19 am by imtdb
Hola gente, muy buenas noches.
Me encuentro desarrolando un pequeño programa donde deseo evaluar el contenido de un array luego de pulsar un boton y si este coincide con lo que busco que prenda un led. Lo hice de esta manera y no hay manera de que prenda el led, alguien sabe a que se puede deber o si hay alguna manera mas eficioente de hacerlo? Les dejo el codigo, gracias!

Code: [Select]
void loop() {
int lector = Serial.read();
int array[4];

if(lector == 1){
  array[0] = 1;
}

if(digitalRead(3) == LOW){
  for(int i = 0; i< sizeof(array); i++){
    Serial.println(i);
    if(array[i]==1){
      digitalWrite(8,HIGH);
    }
  }
  delay(1000);
 
}else{
  digitalWrite(8, LOW);
}
}

Disculpa, olvide la funcion setup. Aca esta completo:

Code: [Select]
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(3, INPUT);
}

void loop() {
int lector = Serial.read();
int array[4];

if(lector == 1){
  array[1] = 1;
}

if(digitalRead(3) == LOW){
  for(int i = 0; i< sizeof(array); i++){
    Serial.println(i);
    if(array[i]==1){
      digitalWrite(8,HIGH);
    }
  }
  delay(1000);
 
}else{
  digitalWrite(8, LOW);
}
}

surbyte

Este es el código con las correcciones que te sugiero.

Ahora no estan mis comentarios porque quise moverlo al ver tu respuesta y lo borré accidentalmente y ya no tengo ganas de escribir.

Code: [Select]
int array[4];

void setup() {
   Serial.begin(9600);
}

void loop() {
    int lector;
    if (Serial.available()>0) {
        lector = Serial.read();
    }
   
    if (lector == 1){
        array[0] = 1;
    }

    if (digitalRead(3) == LOW){
        for (int i = 0; i< sizeof(array); i++){
             Serial.println(i);
             if (array[i]==1){
                 digitalWrite(8,HIGH);
             }
        }
        delay(1000); 
    } else {
        digitalWrite(8, LOW);
    }
}


Basicamente falta if (Serial.available() ) para leer del puerto serie
Hay un error en donde defines array[4] que pondrá a 0 en cada loop los valores almancenados y para terminar solo modificas el valor de array[0]

Gracias por tu rapida respuesta surbyte, intente con lo que propusiste pero el codigo sigue actuando igual, al parecer si entra en el condicional pero no realiza el ciclo for y por lo tanto no prende el led cuando detecta el 1 almacenado. Seguire intentando, si alguno tiene alguna otra idea (o tu mismo) se aprecia la difusion. Gracias!

surbyte

prueba asi

Code: [Select]
    if (Serial.available()>0) {
        int lector = Serial.read();
        if (lector == 1){
            array[0] = 1;
        }
    }

No, tampoco. Por lo que estoy viendo luego de imprimir cada dato del array es que al parecer tampoco registra el 1 que le mando por el serial, vere si puedo solucionarlo. Gracias surbyte y cualquier cosilla es bien recibida

Ahí conseguí lo que buscaba, les dejo el código y gracias!

Code: [Select]
void setup() {
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  pinMode(3, INPUT);
}

void loop() {
char array[4]; //Creo el array

if(digitalRead(3) == LOW){ //Si presiono el boton
 
  if (Serial.available()>0) { //Si hay datos en el monitor serial
   
    char valor = Serial.read(); //Leo y almaceno lo que recibo
    Serial.println(valor);
    array[0] = valor; //Almaceno en el primero lugar lo que lee

      for(int i = 0; i<sizeof(array);i++){ //Recorro el array
        Serial.println(i);
        Serial.println(array[i]);
 
          if(array[0]=='1'){ //Evaluo, si es 1 prendo el led, sino no.
            digitalWrite(8,HIGH);
          }
        }   
      }
    }
  }

surbyte

No lo registra porque debes quitarlo 48 para que sea un número, lo que llega es un ASCII ´1´
Estoy dormido y no veo bien los errores.

Go Up