Temporizador dos salidas ,arduino nano, lcd y botones

[/][[code]
#include <TimerOne.h>              //librerias que considero necesarias
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


                                   // los  elementos y pines  que voy  a utilizar

int upbuttom   =  6;               // boton  subir tiempo
int downbuttom =  7;               // boton  bajar tiempo
int sensor_1   =  8;               // sensor de proximidad inductivo lj12A3 (PnP) activador camara  1
int sensor_2   =  9;               // activador camara  2 (idem sensor 1)
int rele_1     = 10;               // maneja la electrovalvula  camara 1
int rele_2     = 11;               // maneja la electrovalvula  camara 2


LiquidCrystal_I2C lcd(0x20,16,2);  // para  nano(0x3F para uno)
int tiempo;                        // contador  de tiempo
int tiempo_p;                      // tiempo  programado
int var_tiempo;                    // almacena tiempo programado
Serial.begin(9600);                // la comunicacion del LCD


void setup() {                     // configurar LCD con I2C
  
  lcd.init();                      // Iniciar LCD
  lcd.backlight();                 // Activar luz de fondo 
  lcd.clear();                     // Borrar LCD
  lcd.setCursor(7,0);              // coordenadas LCD (x,y) primera linea
  lcd.print("tiempo millis()");    // muestra eltiempo programado 
  lcd.setCursor(6,1);              // coordenadas LCD (x,y) segunda linea
  lcd.print("ajuste el tiempo");   // indica  que se puede variar   el tiempo programado

  
                                   // definir entradas y  salidas
pinMode   (upbuttom ,  INPUT);  
pinMode   (downbuttom, INPUT); 
pinMode   (rele_1 ,    OUTPUT);
pinMode   (rele_2 ,    OUTPUT);
pinMode   (sensor_1,   INPUT);
pinMode   (sensor_2,   INPUT);
tiempo    = millis ();             // tiempo y pines  en  cero
tiempo_p   = 0;
sensor_1=0;
sensor_2=0;
upbuttom=0;
downbuttom=0;





void loop() {                     // se leen los sensores

  {
   digitalRead(sensor_1);        //lee sensor 1  sin actuar pero conectado  a ground y  5v
   digitalRead(sensor_2);        //lee sensor 2 (idem sensor 1)
   
  {                   

                                 // en pocision  neutra (sin estar ninguno actuado) se puede modificar el tiempo
                         
  if (sensor_1=LOW && sensor_2=LOW);// pocision neutra  para  modificar el tiempo
  lcd.setCursor(7,0);            // coordenadas LCD (x,y) primera linea
  lcd.print("tiempo millis()");  // tiempo programado 
  lcd.setCursor(6,1);            // coordenadas LCD (x,y) segunda linea
  lcd.print("ajuste el tiempo"); // listo para ajustar el tiempo
   {
   
                                 //  incrementar  tiempo temporizado
   if (upbuttom=HIGH);           // sube el  tiemp de temporizado
   tiempo_p=tiempo*1000++;
   tiempo=tiempo_p;              // almacena  nuevo tiempo
  lcd.setCursor(7,0);            // coordenadas LCD (x,y) primera linea
  lcd.print("ajuste tiempo");    // "ajuste tiempo"  puede titilar, no lo hice
  lcd.setCursor(6,1);            // coordenadas LCD (x,y) segunda linea
  lcd.print("tiempo_p millis()");// muestra  nuevo  tiempo
   }
   {
                                   //reducir  tiempo temporizado
    
    if (downbuttom=HIGH);          // baja el tiempo de temporizado
   tiempo_p=tiempo*1000--;
   tiempo=tiemp_p;                 // almacena  nuevo  tiempo
  lcd.setCursor(7,0);              // coordenadas LCD (x,y) primera linea
  lcd.print("ajuste tiempo");      // "ajuste tiempo" puede titilar, no lo hice
  lcd.setCursor(6,1);              // coordenadas LCD (x,y) segunda linea
  lcd.print("tiempo millis()");    // muestra nuevo tiempo
   }
  }
  
                                 // accionamiento de la  maquina,cierre de compuerta  a la pocision 1, inicio de ciclo camara 1
  
  {
     while
     (digitalWrite (sensor_1=HIGH)); //  al cerrar la compuerta se activa el sensor 1
     if (tiempo<tiempo_p);           // y hay tiempo programado  mayor que  cero
     digitalWrite (rele_1,HIGH);     // se activa rele 1  y electrovalvula 1, llena camara 1          
      lcd.setCursor(7,0);            // coordenadas LCD (x,y) primera linea
      lcd.print("tiempo millis()");  //muestra tiempo  total de temporizado
      lcd.setCursor(6,1);            // coordenadas LCD (x,y) segunda linea
      lcd.print("tiempo_p millis()--"); // muestra el tiempo decreciendo
     if (tiempo>itiempo_p);          // tiempo llega  a cero
     digitalWrite (rele_1,LOW);
      lcd.setCursor(7,0);            //  coordenadas LCD (x,y) primera linea
      lcd.print("tiempo_p millis()");//muestra tiempo restante    que debe  ser  cero se apaga el rele y la electrovalvula, la camara  se 
      lcd.setCursor(6,1);            // coordenadas LCD (x,y) segunda linea
      lcd.print("pegado completo");  // avisa que termino el ciclo 1 ,se puede usar un buzzer de  aviso (no lo  hice)

      
  }
                                     // accionamiento  de la  maquina , cierra de la compuerta a pocision 2  inicio ciclo camara 2   
  {
       while (digitalWrite (sensor_2=HIGH)); // al cerrar la compuerta se activa el sensor 2
     if (tiempo<tiempo_p);           // y hay tiempo programado  mayor que cero
     digitalWrite (rele_2,HIGH);     // se activa rele 2 y la electrovalvula 2 ,llena camara 2
       lcd.setCursor(7,0);           // coordenadas LCD (x,y) primera linea
       lcd.print("tiempo millis()"); // muestra el tiempo total de temporizado
       lcd.setCursor(6,1);           // coordenadas LCD (x,y) linea 2
       lcd.print("tiempo millis()--");// muestra el tiempo decreciendo
     if (tiempo>tiempo_p);           // el tiempo  llega  a cero
     digitalWrite (rele_2,LOW);      // se desactiva   el rele 2 ,la electrovalvula 2 y se vacia la camara 2
      lcd.setCursor(7,0);            //  coordenadas LCD (x,y) primera linea
      lcd.print("tiempo_p millis()");//muestra tiempo restante    que debe  ser  cero se apaga el rele y la electrovalvula, la camara  se 
      lcd.setCursor(6,1);            // coordenadas LCD (x,y) segunda linea
      lcd.print("pegado completo");  // avisa que termino el ciclo 2 ,se puede usar un buzzer de  aviso (no lo  hice)
  }
   
  
 


  

 






}

][/ Hola buenos días,he leído las normas del foro , aun así puedo haber faltado a algunas.
He intentado crear un código para controlar el tiempo de acción de dos reles (inicia el ciclo y enciende, , permanece encendido el tiempo programado y se desactiva), que trabajan de manera separada,primero el uno y luego el otro y se repite el ciclo indefinidamente ; cada rele mediante una señal de un sensor, el tiempo es común para los dos ; el tiempo se puede variar mediante dos pulsadores (upbuttom , downbuttom) y los tiempos se pueden ver de manera regresiva en un display LCD con comunicación I2C, el código no es una copia, intente hacerlo lo mas simple de forma personal pero tiene muchos errores y ni siquiera me compila aunque le he hecho múltiples correcciones de acuerdo a los mensajes de error. Agradezco a quien me pueda colaborar e indicarme los múltiples errores cometidos.]

Cuando escribes un if no haces esto

if (downbuttom=HIGH);          // baja el tiempo de temporizado

sino que lo que continua debe quedar entre llaves {}

Tu código

  if (downbuttom=HIGH);          // baja el tiempo de temporizado
   tiempo_p=tiempo*1000--;
   tiempo=tiemp_p;                 // almacena  nuevo  tiempo
  lcd.setCursor(7,0);              // coordenadas LCD (x,y) primera linea
  lcd.print("ajuste tiempo");      // "ajuste tiempo" puede titilar, no lo hice
  lcd.setCursor(6,1);              // coordenadas LCD (x,y) segunda linea
  lcd.print("tiempo millis()");    // muestra nuevo tiempo
   }

debe ir asi

if (downbuttom=HIGH) {          // baja el tiempo de temporizado
      tiempo_p=tiempo*1000--;     // <== error 
      tiempo=tiemp_p;                 // almacena  nuevo  tiempo
      lcd.setCursor(7,0);              // coordenadas LCD (x,y) primera linea
      lcd.print("ajuste tiempo");      // "ajuste tiempo" puede titilar, no lo hice
      lcd.setCursor(6,1);              // coordenadas LCD (x,y) segunda linea
      lcd.print("tiempo millis()");    // muestra nuevo tiempo
  }

Esto no se que esperas que haga?

tiempo_p = tiempo*1000++;

lo mas logico sería asi

tiempo_p += tiempo*1000;

Eso incrementa teimpo_p en el valor de tiempo*1000 y se lo suma a lo que ya contenía.
Hay muchos errores asi que iremos viendo de a poco.

ok. gracias por verlo y empezar a destacar los errores , también voy a empezar a hacer las correcciones que me sugieran , la idea es hacer que me funcione para poder usarlo en una pequeña maquina artesanal que estoy fabricando.saludos desde Cucuta Colombia

Cuando usas un "if" lo que va enseguida de éste entre paréntesis es una condición, en tu caso si downbutton está en estado alto. En C++ , cuando ponés un = estás asignando un valor a una variable ( por ejemplo downbutton=HIGH significa que la variable downbutton será un estado alto ). Para hacer una comparación se utiliza ==, o sea si ponés downbutton==HIGH estás preguntando si la variable está en estado alto. En resumen un solo = es asignación y dos == es comparación.

Ok.Lucini muchas gracias por su aporte, voy hacer esas mejoras , de por si ya el codigo va como en la V50 (VERSION 50) y aun no me compila, estoy tratando de hacer uno lo mas cercano posible para volverlo a subir al foro , solo espero que no sea como Thomas Alba Edisson que hallo mas de 2000 formas de no hacer una bombilla , que mi bombilla encienda pronto .Seguir leyendo y aprendiendo.

¡Cuidado! Los if están mal por dos motivos. No sólo los punto y coma, también el signo de igual = ha de ser un doble igual ==.

En lugar de...

if (downbuttom = HIGH);

Se ha de poner algo tal que...

if (downbuttom == HIGH) {
    // Aquí va el código que se desea que se ejecute si se cumple la igualdad.
}

Nota: tal cual estaba, la línea:

if (downbuttom = HIGH);

Eso es exactamente lo mismo que poner:

downbuttom = HIGH;

El aperador = asigna el valor de la derecha a la variable que está a su izquierda y da como resultado ese valor. Esto es lo que estaba evaluando el if. Mientras que el operador == compara los valores que tiene a izquierda y derecha y devuelve un uno o un cero (verdadero o falso) dependiendo de si los dos valores son iguales o distintos.

Este fallo/despiste es muy habitual.

El if "se cumple" si el valor de la expresión de lo que está entre paréntesis es distinto de cero. En el caso de valer cero no se cumple.

Como dije hay tantos errores que conviene saber que quiere hacer y programarlo desde 0.

Buenos días, estoy muy agradecido por su interés y su apoyo en mi proyecto ,hice varios códigos mas, algunos compilaron y subieron a la placa , pero no funcionaron bien , los dos relays quedaban encendidos a la vez , algo que no puede ser y no se desconectaban ni se leían los sensores ni el display mostraba ninguna información.
Hice una gráfica en un programa llamado Proteus , pero no pude compartirla de manera directa al foro , hice un recorte y comparto la imagen PNG.
mi proyecto usa solo dos pulsadores para subir y bajar el tiempo que se necesite programar ,el cual puedo variar cuando la compuerta esta en el centro ( neutro no hay ningun sensor actuado ,no se si necesite otro para hacer los ajustes) , dos sensores de proximidad inductivos que indican cuando se tapa una cámara o la otra (solo hay una compuerta que tapa una camara o la otra) y el sensor respectivo muestra cual es la camara que esta "lista"; el arduino controla un modulo rele de dos canales a 5V , que a su vez conectan las electrovalvulas. , no se que otra información sea necesaria para que se hagan una idea del sistema y les sea mas facil colaborarme, algo que les estaría muy agradecido. aunque yo voy a seguir neciando para seguir aprendiendo

temporizador dos salidas nano.PNG

Marco Emilio Parada Lizcano | Facebook . aqui se puede ver una maquina que hice con temporizadores de 12 voltios ,aunque son economicos , lo que pasa es que casi no los consigo.
espero haberlo hecho bien

temporizador dos salidas nano.PNG