por favor suplico su ayuda con mi trabajo

porfavor ayúdenme con mi trabajo =( =( =( no logro poder hacerlo porfavor ayúdenme esto es lo que tengo que hacer

El proyecto consiste en controlar las luces de una casa como se describe a
continuación:

  1. El primer led se controlará mediante un pushButton así:
  2. Al presionar una vez, el led se encenderá mediante 30 segundos.
  3. Si el botón se presiona una segunda vez en un periodo de 50
    milisegundos, el led permanecerá encendido 90 segundos.
  4. Si el botón se presiona una segunda vez después de 50 milisegundos,
    el led se apagará.
  5. Si se recibe una 'A' por el puerto serial, el led se encenderá por 30
    segundos.
  6. Si se recibe una 'B' por el puerto serial, el led se encenderá por 90
    segundos.
  7. Si se recibe una 'C' por el puerto serial, el led se apagará.
  8. El segundo y el tercer led se controlan así:
  9. Mediante dos botones, donde al presionar cualquiera de los dos
    botones, se encenderán los dos leds y permanecerán encendidos 30
    segundos.
  10. Si el mismo botón que se presiono para encender los leds, se presiona
    una segunda vez en un periodo de 50 milisegundos, los leds
    permanecerán encendidos por 90 segundos.
  11. Si el mismo botón se presiona una tercera vez en el mismo periodo de
    50 milisegundos, los dos led encenderán de manera intermitente, uno a
    la vez por 250 milisegundos y por un periodo de 15 segundos.
  12. Si por el puerto serie se recibe una 'D' se realiza la actividad 1 de este
    inciso.
  13. Si se recibe una 'E' por el puerto serie, se realiza la segunda actividad
    descrita en este inciso.
  14. Si se recibe por el puerto serie una 'F' , se realiza la actividad 3 de este
    inciso
  15. Si se recibe una 'G', se apagan los dos leds.
  16. Si cualquier botón permanece apretado por 100 milisegundos, todos los
    leds encenderán al mismo tiempo de manera intermitente, con una
    duración de 75 milisegundos encendidos y 650 milisegundos apagados,
    esta acción permanecerá así por un minuto o hasta que se presione
    cualquier botón por un periodo de 100 milisegundos.
  17. El punto 3 se realizara también si se recibe por el puerto seria la letra 'T',
    con lo cual los leds parpadearan como se describió y si se recibe otra 'T',
    la actividad terminará.

esto es lo que llevo lo que me causa problemas son los tiempos los cuales no se como hacerlos porfavor ayudenme

int led = 9;
int led1 = 10;
int led2 = 11;
int boton = 12;
int boton1 = 13;
int boton2 = 8;
int x = 0;
int y = 0;
int z = 0;
int estado = 0;
int estado1 = 0;
int estado2 = 0;
char val;

long actual; 
long tinicio =0;


int ledStatus = false;
int buttonState = 0;
int lastButtonState = 0;
int lastButtonState2 = LOW;
int reading;
long lastDebounceTime = 0;
long debounceDelay = 200; 


int input;




void parpa(){
 for(int i =0; i<5; i++);{
  digitalWrite(led2, LOW);
  digitalWrite(led1, HIGH);
  delay(50);
  digitalWrite(led1, LOW);
  digitalWrite(led2, HIGH);
  delay(50);
  
   }
}


void setup() {
  pinMode(boton, INPUT);
  pinMode(boton1, INPUT);
  pinMode(boton2, INPUT);
  pinMode(led, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
}

void loop(){
 
 estado = digitalRead(boton2); 	 
  if(estado == HIGH){
    delay(90);                         
     x++;				
    if(x > 4){
      x = 1;				
    }
  }
  if (x == 1 ){
  actual=millis();
  if((actual -tinicio)/100>5){
     digitalWrite(led, HIGH);
   }
  }
  if (x == 2 ){
   digitalWrite(led, HIGH);
   delay(500);
   digitalWrite(led, LOW);
  }
  if ( x == 3){
  digitalWrite(led, LOW);
  }
  
  
  
  
  if(Serial.available()){
   val = Serial.read();
   Serial.print(val);
  }
   
    if( val == 'a' ){
    digitalWrite(led, HIGH);//activa el LED
    delay(300);

      }
    
    if( val == 'b' ){
    digitalWrite(led, HIGH);
    delay(100);
 
    }

    if( val == 'c' ){
    digitalWrite(led, LOW); 
    
    }
    
    
    
    
    
  
    
  if (Serial.available()>0){
  input=Serial.read();
  if (input=='1'){
  digitalWrite(led, HIGH); 
  delay(30000);
  }
  
  else{
  digitalWrite(led, LOW); }
  }

   
  estado1 = digitalRead(boton1); 
  if(estado1 == HIGH){
    delay(90);                         
     y++;				
    if(y > 3){
      y = 1;				
    }
  }
  if (y == 1 ){
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(2);
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
  }

  if (y == 2 ){
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(30);
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
  }
  if ( y == 3){
  void parpa();
  }
  
  
  estado2 = digitalRead(boton);	 
  if(estado2 == HIGH){
    delay(90);                         
     y++;				
    if(y > 3){
      y = 1;				
    }
  }
  if (y == 1 ){
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(2);
   digitalWrite(led1, LOW);
   digitalWrite(led2, LOW);
  }
  if (y == 2 ){
   digitalWrite(led1, HIGH);
   digitalWrite(led2, HIGH);
   delay(30);
  }
  if ( y == 3){
  void parpa();
  }
 
   
   
   if( val == 'g' ){
   digitalWrite(led1, LOW); 
   digitalWrite(led2, LOW);
   }
    
    if( val == 'b' ){
    digitalWrite(led, HIGH);
    delay(100);
 
    }

    if( val == 'c' ){
    digitalWrite(led, LOW); 
    
    }  
   
}

Buf... ese codigo no tiene ni pies ni cabeza...

me extraña que funcione siquiera.

Te aconsejo empieces a leerte lo basico de arduino, las funciones case, los bucles y la definicion de funciones.

Luego puedes mirar las librerias de tiempo para no emplear delays muy largos.

Hasta que no sepas lo basico de arduino poco vas a poder adelantar...

Un saludo.

  while (millis() - start < 2000)
  {
    if (feedgps())
      newdata = true;
  }

El bucle se repite cada 2 seg (2000) mientras la condición se cumpla.

Pero como dice el amigo Heke... hay que leer un poquito :slight_smile:

Te sugiero que vayas por parte y generar metas a corto plazo... por ejemplo "quiero que un led se prenda por 3 segundo si apreto un boton". Eso es mas facil para ti y para los que te quieran ayudar, y además con cosas pequeñas aprenderas las funcionalidades para realizar grandes proyectos.

Saludos
8)

Hola verlassen.
Lo que impide que funcione correctamente son las instrucciones delay.
Leete el sketck de ejemplo blink.
Cuando lo entiendas, lee blinkwithoutdelay.
Y cuando lo entiendas verás porque no funciona(... como quieres que funcione)

Revisa el código que has hecho y ya me dirás :slight_smile:

  1. Si el botón se presiona una segunda vez en un periodo de 50
    milisegundos, el led permanecerá encendido 90 segundos.

Oprimi el boton equivovado yo aqui y no pude escribir la respuesta.

te iba a decir que no hay forma humana de apretar el boton dos veces en un intervalo de 50 milisegundos de manera controlada. Si eso sucede es que no estas evitando el rebote de los contactos del boton. Recuerdo que en la escuela competiamos a ver quien podia parar un timer digital mas rapido, apretando el boton dos veces. Nadie pudo hacerlo en menos de 19 centecimas de segundo (190 ms) asi es que 50 milisegundos es inalcanzable...

cambia el título del post por favor