usar true/false o usar if/else

hola, me gustaria que me ayudaran en una interpretacion de programa el circuito debe hacer una funcion basica con condicionamientos. pero tengo problemas con algunos codigos...

es uno de mis primeros programas. de ante mano muchas gracias...

este es el programa que he creado..

// cristopher saavedra 
//* Definiciones *//

int pulsador=0;              //almacena el estado del botón
int estado=0;                //0=led apagado, 1=led encendido
int pulsadorAnt=0;           //almacena el estado anterior del boton
int lector=0;
int value=0;
int lectorAnt=0;

//* Programa *//

void setup() {
 pinMode(2, OUTPUT);        //declaramos el pin 2 como salida
 pinMode(4, INPUT);         //declaramos el pin 4 como entrada
 pinMode(3, OUTPUT);       // declaramos el pin 3 como salida
 pinMode(5, INPUT);        // declaramos el pin 5 como entrada

}

void loop() {
 pulsador = digitalRead(4); //lee si el botón está pulsado
 lector = digitalRead(5);   //lee el estado del lector (alto-bajo)
 
}
pulsadorAnt=pulsador;      //actualiza el estado del pulsador
 
 if(pulsador==HIGH);  // si el sensor primartio detecta debes hacer esto
   estado=1-estado;
   delay(40);                   //pausa de 40 ms


   {
     delay(10000);
 digitalWrite(3, HIGH);    //*si se ingresa una tarjeta invalida, el sistema esperara diez segunddos y la rechazara*//
 delay(100);
 digitalWrite(3, LOW);
 }
 else(pulsador==LOW);
 delay(40);
 {                        //si no existe ingreso el sistema se mantendra off.
   digitalWrite(3, LOW);
   digitalWrite(2, LOW);
   delay(50)
 }
 
 lectorAnt=lector;      //   actualiza el estado del lector     
 
 if(value==HIGH)          //si el estado es 1
 value=1-value;
 delay(40);           // pausa 
 {
   digitalWrite(3, HIGH);            //activar paleta secundaria.
   delay(100);                        // pausa
   digitalWrite(2, HIGH);            // activa paleta primaria
   delay(100);                       //tiempo de espera para que pase tarjeta
   digitalWrite(3,LOW);              // cierra paleta secundaria
   delay(100);                       // pausa
   digitalWrite(2, LOW);             //cierra paleta primaria
   delay(100);}                      //pausa

   else(value==LOW);     //si el valor de lector es zero
   delay(40)           // pausa 40ms
{
digitalWrite(2,HIGH);       //*solo activara la paleta primaria, rechazando la tarjeta no identificada*//
delay(100);
digitalWrite(2,LOW);
}

y estos son los errrores que me arroja la programacion


sketch_jun21a:28: error: 'pulsadorAnt' does not name a type

pulsadorAnt=pulsador;      //actualiza el estado del pulsador

^

sketch_jun21a:30: error: expected unqualified-id before 'if'

  if(pulsador==HIGH);  // si el sensor primartio detecta debes hacer esto

  ^

sketch_jun21a:31: error: 'estado' does not name a type

    estado=1-estado;

    ^

sketch_jun21a:32: error: expected constructor, destructor, or type conversion before '(' token

    delay(40);                   //pausa de 40 ms

         ^

sketch_jun21a:35: error: expected unqualified-id before '{' token

    {

    ^

sketch_jun21a:41: error: expected unqualified-id before 'else'

  else(pulsador==LOW);

  ^

sketch_jun21a:42: error: expected constructor, destructor, or type conversion before '(' token

  delay(40);

       ^

sketch_jun21a:43: error: expected unqualified-id before '{' token

  {                        //si no existe ingreso el sistema se mantendra off.

  ^

sketch_jun21a:49: error: 'lectorAnt' does not name a type

  lectorAnt=lector;      //   actualiza el estado del lector     

  ^

sketch_jun21a:51: error: expected unqualified-id before 'if'

  if(value==HIGH)          //si el estado es 1

  ^

sketch_jun21a:53: error: expected constructor, destructor, or type conversion before '(' token

  delay(40);           // pausa 

       ^

sketch_jun21a:54: error: expected unqualified-id before '{' token

  {

  ^

sketch_jun21a:64: error: expected unqualified-id before 'else'

    else(value==LOW);     //si el valor de lector es zero

    ^

sketch_jun21a:65: error: expected constructor, destructor, or type conversion before '(' token

    delay(40)           // pausa 40ms

         ^

exit status 1
'pulsadorAnt' does not name a type

Hola. No te puedo ayudar mucho, pero sí he encontrado un error que el mismo compilador te lo está marcando. En el void loop abres un corchete, que está bien, y haces dos asignaciones. Después de las asignaciones cierras el corchete y ahí se acabó el void loop. :smiley:

Otra apreciación que he hecho, es que los IF no acaban con punto-coma, sino que acaban con apertura de corchete, por ejemplo:

if (2=2){
ejecuta.comando();
}

Creo que revisando esas cosas no debería darte error. Revisa bien los corchetes y los punto-coma. Cada IF lleva una apertura y cierre de corchete exclusivo para él. Si seleccionas un corchete, se señala el que lo abre o lo cierra. Puedes guiarte por esa ayuda.

Como consejo para colgar un programa aquí en el foro, es recomendable usar el comando CODE. Así, si metes el código dentro de este comando, al ser largo, tu mensaje se compactará y luego, nosotros al leerlo, podemos expandirlo.

Esperemos que resuelvas los problemas!! :wink:

gracias por tus aportes, como dije antes estoy iniciando en arduino y me toco este programa de entrada, tenioa nociones de C++ pero estan algo oxidadaas.....
realizare las modificaciones de ante mano gracias

Esta plagado de errores el código.
Tu código es un perfecto caos

Estas secciones no se que pretendes que hagan, las estaba corrigiendo pero prefiero que te expliques porque tiene cosas sin sentido.

Veamos una sección porque son tantos los errores pero peor aun es que no se entiende que queires hacer.

void loop() {
  pulsador  = digitalRead(4); //lee si el botón está pulsado
  lector    = digitalRead(5);   //lee el estado del lector (alto-bajo)

}
pulsadorAnt = pulsador;    //actualiza el estado del pulsador

if (pulsador == HIGH); // si el sensor primartio detecta debes hacer esto
estado = 1 - estado;
delay(40);                   //pausa de 40 ms


{  // <== ERROR
  delay(10000);
  digitalWrite(3, HIGH);    //*si se ingresa una tarjeta invalida, el sistema esperara diez segunddos y la rechazara*//
  delay(100);
  digitalWrite(3, LOW);
}
else(pulsador == LOW);  // <== ERROR
delay(40);
{   // <== ERROR
//si no existe ingreso el sistema se mantendra off.
  digitalWrite(3, LOW);
  digitalWrite(2, LOW);
  delay(50)
}

lectorAnt = lector;    //   actualiza el estado del lector

if (value == HIGH)        // <== ERROR
 //si el estado es 1
  value = 1 - value;
delay(40);           // pausa
{  // <== ERROR
  digitalWrite(3, HIGH);            //activar paleta secundaria.
  delay(100);                        // pausa
  digitalWrite(2, HIGH);            // activa paleta primaria
  delay(100);                       //tiempo de espera para que pase tarjeta
  digitalWrite(3, LOW);             // cierra paleta secundaria
  delay(100);                       // pausa
  digitalWrite(2, LOW);             //cierra paleta primaria
  delay(100);
}                      //pausa

Algunos estan señalados. Otros no puedo porque mezclas if () else () con partes que no tienen que ver.

bueno entonces desde la función...

mi código debe hacer lo siguiente

si mi sensor inicial (S1) se activa debe esperar 10 segundos, si durante esos 10 segundos no se cumple la acción del segundo sensor, solo debe activar una paleta (P1).

en cambio si el primer sensor toma señal y el segundo igual, debe activar ambas paletas. y luego volver a 0. esperando una nueva lectura....

es para un sistema de acceso por tarjeta... la señal de la tarjeta sera recibida de manera digital mediante un pulso entregado por una controladora externa....

gracias por la ayuda de verdad que me ha costado entender los códigos.

Hola cristopherelectronicaplicada, bueno, el código tiene muchos errores de sintaxis, sobre todo de anidamiento con los {}.

El primero mas evidente es que tienes el cierre de la función loop () en la cuarta linea despues del loop, lo que hace ya erroneo el resto del programa.

void loop() {
 pulsador = digitalRead(4); // lee si el botón está pulsado
 lector = digitalRead(5);   // ee el estado del lector (alto-bajo)
 
} // <--- este debes borrarlo.

repasa todos los {} y lo solucionaras.

suerte.

cristopherelectronicaplicada:
gracias por tus aportes, como dije antes estoy iniciando en arduino y me toco este programa de entrada, tenioa nociones de C++ pero estan algo oxidadaas.....
realizare las modificaciones de ante mano gracias

No pasa nada, todos empezamos desde cero dándonos cabezazos contra el teclado. :smiley:

Aunque no he podido aún analizar el código entero, sí he visto otros fallos que creo que ya te lo ha comentado surbyte. El comando ELSE no lleva condicional, ya que la condición está en el IF que le precede:

if (2==2) {              //Si dos es igual a dos...
ejecuta.comando();      //Ejecuta un comando
} else {                //(ELSE) Si dos NO es igual a dos...
ejecuta.otrocomando();  //Ejecuta otro comando
}                       //Cierra corchete y termina el ELSE

En caso de que quieras condicionar un ELSE tendrás que hacerlo con ELSE IF:

if (2==2) {              //Si dos es igual a dos...
ejecuta.comando();      //Ejecuta un comando
} else if (2==8) {       //(ELSE) Si dos NO es igual a dos (IF) pero es igual a 8...
ejecuta.otrocomando();  //Ejecuta otro comando
}                       //Cierra corchete y termina el ELSE IF

Lo primordial ahora mismo es pulir estos fallitos en el código y luego cargarlo en la placa para saber si funciona o no. Una vez que te compile y el código esté correcto, ya podemos empezar a ver qué parte del código está mal escrita para poder seguir ayudándote. :wink:

Es un doble post pero como ya resondieron respetaré a @fclavain y voy a unir los dos hilos, uno acá y otro en Software.
Lee las normas del foro y por favor no dupliques mas tus consultas.
Recuerda usar etiquetas de códigos.

Esfinterman:

if (2=2) {              //Si dos es igual a dos...

ejecuta.comando();      //Ejecuta un comando
} else {                //(ELSE) Si dos NO es igual a dos...
ejecuta.otrocomando();  //Ejecuta otro comando
}                      //Cierra corchete y termina el ELSE

Este es un error.
El signo = es de asignación. El de comparación es ==.

Cierto, Kike, se me fue. :smiley: