Esperar hasta que llegue el dato en Puerto Serial

Hola, estoy empezando en arduino y tengo algunos problemitas en un codigo sencillo
Se trata de leer un pin analogico, conocer su valor en voltaje y dependiendo de ese valor quiero encender un LED
Este es el codigo:

const int led = 13;
const int sensor = A0;

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

void loop() {
  
   int sensorValue = analogRead(sensor);
   float voltage = sensorValue * (5.0 / 1023.0);
   
   if (voltaje >= 3.0); { 
   digitalWrite (led, HIGH);
   Serial.println("Led Encendido");
   }
   
   else {
   digitalWrite (led, LOW);
   Serial.println("Led Apagado");
   }   

  Serial.println(sensorValue);
  Serial.println(voltage);
}

Cuando le doy verificar me da los siguientes errores:

Alarma_Lectura.ino: In function 'void loop()':
Alarma_Lectura:12: error: 'voltage' was not declared in this scope
Alarma_Lectura:19: error: 'else' without a previous 'if'

Agradecido de antemano por su ayuda.

Hola jesus, si observas los errores que te el ide te dice que tenes mal escrito "VOLTAJE" y el comando if else tambien se encuentra mal escrito, para hacer un control on/off tenes que crear una variable y que la lea... El codigo es este:

void setup() 
{
  Serial.begin(9600);  //Inicia comunicación serial
  pinMode(13,OUTPUT);  //Configurar el pin 13 como una salida
}
 

void loop() 
{         
 
  //Guardar en una variable el valor de la lectura análoga
  int valor = analogRead(A0);
 
  Serial.println(valor);  //Imprime el valor por la consola
 
  //Si el valor es mayor o igual a 500
  if (valor >= 500)
  {
    digitalWrite(13,HIGH); //Enciende el LED en el pin 13
  }
  //Si el valor es menor a 500
  else
  {
    digitalWrite(13,LOW); //Apaga el LED en el pin 13
  } 
 
  delay(100); //Retardo de 100ms para ver los datos de la consola
}

Nose bien que sensor estas usando, pero cualquier cosa me avisas y lo adaptamos a tu necesidad...

Saludos

Aparte de lo que te dice Protheo (no te coinciden lo nombres de las variables voltage/voltaje) te sobran el ; en la sentencia if, estas no llevan ; al final, sólo el bloque {}

Gracias Protheo, realmente un error tonto y creeme que lo revise muchas veces porque no sabia por que me daba el error, cosas que aveces pasan, aparte de todo la correccion de josemaX no me di cuenta de ese ;.

Gracias por su tiempo

Protheo este sensor es resistivo, me interesa leer el voltaje y darle un rango de trabajo para hacerlo 1 o 0 logico y activar un led, mas adelante quiero activar una alarma o buzzer algo similar, apenas estoy empezando. Y bueno la idea final es crear una Alarma programable.

Aqui posteo el avance de mi proyecto, aun es algo sencillo. Funciona muy bien

void loop() {
  
   sensorValue = analogRead(sensor0);
   voltage0 = sensorValue * (5.0 / 1023.0);

   sensorValue = analogRead(sensor1);
   voltage1 = sensorValue * (5.0 / 1023.0);

   sensorValue = analogRead(sensor2);
   voltage2 = sensorValue * (5.0 / 1023.0);

   sensorValue = analogRead(sensor3);
   voltage3 = sensorValue * (5.0 / 1023.0);

   sensorValue = analogRead(sensor4);
   voltage4 = sensorValue * (5.0 / 1023.0);
   
   sensorValue = analogRead(sensor5);
   voltage5 = sensorValue * (5.0 / 1023.0);

// LECTURA DEL SENSOR 1

   Serial.println("------------------------------");
   
   if (voltage0 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 1 = "), Serial.println(voltage0);
   }
   
   else {
   noTone (buzzer);
   Serial.print("SENSOR 1 = "), Serial.println(voltage0);
   }   
// LECTURA DEL SENSOR 2
   if (voltage1 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 2 = "), Serial.println(voltage1);
   }
   
   else {
   Serial.print("SENSOR 2 = "), Serial.println(voltage1);
   noTone (buzzer);
   }
// LECTURA DEL SENSOR 3
   if (voltage2 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 3 = "), Serial.println(voltage2);
   }
   
   else {
   Serial.print("SENSOR 3 = "), Serial.println(voltage2);
   noTone (buzzer);
   }
// LECTURA DEL SENSOR 4   
   if (voltage3 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 4 = "), Serial.println(voltage3);
   }
   
   else {
   Serial.print("SENSOR 4 = "), Serial.println(voltage3);
   noTone (buzzer);
   }
// LECTURA DEL SENSOR 5
   if (voltage4 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 5 = "), Serial.println(voltage4);
   }
   
   else {
   Serial.print("SENSOR 5 = "), Serial.println(voltage4);
   noTone (buzzer);
   }
 // LECTURA DEL SENSOR 6
   if (voltage5 <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR 6 = "), Serial.println(voltage5);
   }
   
   else {
   Serial.print("SENSOR 6 = "), Serial.println(voltage5);
   noTone (buzzer);
   }
  
  Serial.println("------------------------------");
  delay (5000);
}

Ahora voy a tratar de resumir un poco con una variable x e ir sumando desde 0 a 6 para que me lea los 6 sensores de igual forma valla imprimiendo el valor de la variable para el nombre del senso, el voltaje en cada sensor, etc. creo que puede funcionar para cada dato la misma variable... Luego posteo el resultado....

Este es el avance que llevo, pero me da unos errores.

Porfavor ayuda.

Agradecido de antemano.

Alarma_Lectura_2.ino (757 Bytes)

Hola jesusbarazartem buen laburo calculo que recien arrancas con el arduino, aunque el codigo puede ser resumido con variables como decis, para empezar esta bien, espero ver mas resultados asi vas aprendiendo, la mejor manera de aprender es sentarse y probar... Cualquier duda consulta... Un abrazo!! :grin:

Y donde defines el vector
sensor[x] en ningun lugar lo haces.
Defines esto
const int sensor0 = A0;
const int sensor1 = A1;
const int sensor2 = A2;
const int sensor3 = A3;
const int sensor4 = A4;
const int sensor5 = A5;

pero debieras haber definido esto

const int sensor[5] = { A0, A1, A2, A3, A4, A5}

Acá la solución

const int buzzer = 13;
int sensor[6] = {A0, A1, A2, A3, A4, A5};

int x = 0;
int sensorValue = 0;
float voltage[6] = {0,0,0,0,0,0};

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

void loop() {

  Serial.println("------------------------------");
  
  for (x = 0;x < 6; x++){
    
   sensorValue = analogRead(sensor[x]);
   voltage[x] = sensorValue * (5.0 / 1023.0);
   
   if (voltage[x] <= 3.5) { 
   tone (buzzer, 2000);
   Serial.print("ALARMA!!! SENSOR [x] = "), Serial.println(voltage[x]);
   }
   
   else {
   noTone (buzzer);
   Serial.print("SENSOR [x] = "), Serial.println(voltage[x]);
   }
  }
  Serial.println("------------------------------");
  delay (500);
}

Gracias surbyte te habias adelantado a mi post, ya lo habia resuelto tal cual como me dices, pero tienes razon no habia declarado el array y sin eso obviamente no iba a funcionar, he aqui como yo lo he hecho...

Alarma_Lectura_2.ino (757 Bytes)

Que tal como van, aqui posteo un avance de la alarma, tengo un problema para leer los valores que envio por serial, sea lo que sea que envie me activa la alarma. No se que debo colocar para que me discrimine los caracteres "Si" o "No" respectivamente.

Gracias aqui esta el codigo... A ver quien puede ayudarme

const int buzzer = 13;
int x;
int sensor[] = {A0,A1,A2,A3,A4,A5};
int sensorValue = 0;
float voltage = 0;
char inChar = 0;

void setup() {
  Serial.begin(9600);
}
void loop() {
  Serial.println("      BIENVENIDO       ");
  delay (500);
  Serial.println("Sistema de Alarma V 1.0");
  delay (500);
  Serial.println("Desea Activar?: Si o No ");
  while (true) {
    if (Serial.available()) {
    inChar = (char)Serial.read();
       if (inChar = 'Si') { 
          Serial.println("Alarma Activada");
          delay (1000);
          Serial.println("------------------------------");
          while (true) {
            x = 0;
            for (x = 0; x < 6; x++){
              sensorValue = analogRead(sensor[x]);  // analogRead(A0)
              voltage = sensorValue * (5.0 / 1023.0);
                 if (voltage <= 3.5) { 
                 tone (buzzer, 2000);
                 Serial.print("ALARMA!!! SENSOR "), Serial.print(x), Serial.print(" = "), Serial.println(voltage);
                 }
                 else {
                 noTone (buzzer);
                 Serial.print("SENSOR "), Serial.print(x), Serial.print(" = "), Serial.println(voltage);
                 }
               }
            Serial.println("------------------------------");
            delay (5000);
          }
        }
      else {
        if (inChar = 'No'){
        Serial.println("Alarma Desactivada");
        delay (1000);
        }
      }
    }
  }
}

Hola nuevamente, tengo un problema para hacer que el ciclo se detenga al momento que valla a leer un dato por el serial, esta es una parte de la rutina que estoy haciendo del Sistema de Alarma:

 if (sensor == A0) {
                    Serial.print("Ingrese Clave: ");
                    (Serial.available() > 0);
                    incomingByte = Serial.read();
                      
                      if (incomingByte == clave){
                      Serial.print("Alarma Desactivada"); 
                      t = false;
                      }
                      else {
                      tone (buzzer, 2000);
                      Serial.print("ALARMA!!! SENSOR "), Serial.print(" = "), Serial.println(voltage);
                      }
                    }

obviamente, me activa el mensaje de alarma porque no se como esperar en el comando de lectura del Serial, hasta que ingrese la clave.

Porfavor ayuda con esto, Gracias...

Saludos
Cuando un codigo no te funciona, replantealo, yo por ejemplo lo vuelvo a hacer desde cero en otra ventana chequeo linea a linea.

Parte de tu problema es que luego de revisar la condición colocas un ";"
(Serial.available() > 0);
de esa manera nunca va a esperar recibir del puerto serial.

if (sensor == A0) {
  Serial.print("Ingrese Clave: ");
  (Serial.available() > 0){
  incomingByte = Serial.read();

  if (incomingByte == clave){
    Serial.print("Alarma Desactivada"); 
    t = false;
  }
  else {
    tone (buzzer, 2000);
    Serial.print("ALARMA!!! SENSOR "), Serial.print(" = "), Serial.println(voltage);
  }
}
}

Una pregunta: de que parte de Venezuela eres?. Seria bueno hacer un grupo aqui para ayudarnos.

Gracias por la ayuda max_saeta, disculpa por responder tan tarde. Yo soy de Portuguesa y me parece muy buena idea crear un grupo, hay muchas cosas que nos serian de util para los que se integren...

Resolvi un poco el codigo de esta manera, para que imprima una sola ves el mensaje de "Ingrese Clave", este es el codigo:

if (sensor == A0) {
  Serial.println("------------------------------");
  Serial.println("Ingrese Clave: ");
    while (a == true){
        if (Serial.available() > 0){
          incomingByte = Serial.read();
            if (incomingByte == '9'){
              Serial.println("------------------------------");
              Serial.println("Alarma Desactivada"); 
              a = false;
            }
        }
    }
}

Pero ahora tengo otro problema y es que en este caso le estoy enviando un dato, ¿Como hago para enviarle una cadena? aqui tengo algo que he ido haciendo, pero no me funciona.... Aparte que me imprime como unas lineas en blanco... No entiendo, es algo que he leido pero no se que significa ni que funcion hace el memset, tal ves esa funcion tenga algo para que no me imprima las lineas en blanco...

Les agradeceria su ayuda si alguien tiene algun conocimiento de como recibir una Cadena..

int posicion;
char cadena[20];
char dato;
String clavead = "1234";
boolean a;

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

void loop (){
  Serial.println("INICIANDO...");
  Serial.println("Envie a para empezar");
  a = true;
  while (a == true){
    if (Serial.available() > 0){
      dato = Serial.read();
      if (dato == 'a'){
        Serial.println("------------------------------------");
        Serial.println("    INGRESE CLAVE ADMINISTRATIVA    ");
        posicion = 0;
        while (a == true){
          if (Serial.available() > 0){
            memset(cadena, 0, sizeof(cadena));
            while (Serial.available() > 0){
              delay (5);
              cadena[posicion] = Serial.read();
              posicion++;
            }
            Serial.write(cadena);
            if (cadena == "clavead"){
              Serial.println("Usuario Autorizado");
            }
            else {
              Serial.println("Usuario NO Autorizado");
              a = false;
            }
          }
        }
      }
    }
  }
}

Esta parte quiero integrarla a la alarma para de esa manera ingresarle una clave verdadera y desactivarla en tal caso o activarla, no un simple numero...