Go Down

Topic: Problemas con contadores (Read 404 times) previous topic - next topic

Karenfrausto

Sep 30, 2019, 08:57 pm Last Edit: Sep 30, 2019, 08:59 pm by Karenfrausto
Hola buen día.

¿Podrían ayudarme con mi código?


Tengo de proyecto mostrar cuanto tiempo llevan encendida diferentes maquinas.
Estoy utilizando el arduino Mega2560.

Debo recibir 5 señales de 5 maquinas respectivamente, y según cada una debe empezar a contar el tiempo independientemente de las demás y mostrármelo en un Display, ya tengo para que me muestre las horas y minutos, si es la señal S1, S2, etc.

Pero no se como hacerle para simplificar lo del contador por que no quiero tener que inicializar variables para cada señal.


Code: [Select]

#include "SevSeg.h"

SevSeg sevseg;   //Instanciamos el object
//Inicia para maquina 1
int hora = 0;
int minuto = 0;
int segundo = 0;

//Inicia para maquina 2
int hora2 = 0;
int minuto2 = 0;
int segundo2 = 0;

unsigned long tiempo1 = 0;
unsigned long tiempo2 = 0;
long actual = 500000;
long actual2 = 500000;

int Paro;     // variable para la señal de Paro
int Paro2;     // variable para la señal de Paro2
int Reset;   // variable para la señal de RESET

void setup()
{
  pinMode(Paro, INPUT);
  pinMode(Paro2, INPUT);
  pinMode(Reset, INPUT);

  //Display 7seg izquierdo hrs min
  byte hardwareConfig = N_TRANSISTORS;  //Indica que es cátodo común con NPN
  byte numDigits = 6;
  byte digitPins[] = {13, 12, 11, 10, 9, 8}; //transistores
  byte segmentPins[] = {1, 2, 3, 4, 5, 6, 7}; //ABCDEFG
  bool resistorsOnSegments = true;     //true indica que resistencia esta en el pin de segmento
  bool updateWithDelays = false;       //Recomendado
  bool leadingZeros = true;            //true muestra ceros a izquierda
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros);
  sevseg.setBrightness(60);

}

void loop()
{
  un_seg (); //void un seg

  if ( millis()<1000) {
    sevseg.setNumber(actual, 6);
  }
  contador(); //void contador
  unsigned long mils = millis();
  if ((Paro == 1) && (Reset == 0)) //Maquina 1
  {
    actual = 510000 + (hora * 100) + (segundo);
    sevseg.setNumber(actual, 6);
  }
  if ((Paro2 == 1) && (Reset == 0)) //Maquina2
  {
    actual2 = 520000 + (hora2 * 100) + (segundo2);
    sevseg.setNumber(actual2, 6);
  }
  sevseg.refreshDisplay();

  Paro = digitalRead(26);
  Paro2 = digitalRead(27);
  Reset = digitalRead(28);
}

void un_seg()
{
  tiempo2 = (millis() / 1000);
  if (( tiempo1 != tiempo2 ) && (Paro == 1)) {
    tiempo1 = tiempo2;
    segundo++;
  }
  if (( tiempo1 != tiempo2 ) && (Paro2 == 1)) {
    tiempo1 = tiempo2;
    segundo2++;
  }
}

void contador() {
  //rutina segundos
  if (( segundo == 61 ) || ( segundo2 == 61 )) {
    segundo = 0;
    segundo++;

    segundo2 = 0;
    segundo2++;
  }

  if ( ( segundo == 60 ) || ( segundo2 == 60 ) ) {
    segundo = 0;
    minuto++;

    segundo2 = 0;
    minuto2++;
  }
 
  // Rutina para los minutos
  if ((minuto == 61 ) || (minuto2 == 61 )) {
    minuto = 0;
    minuto++;

    minuto2 = 0;
    minuto2++;
  }

  if ( ( minuto == 60 ) || ( minuto2 == 60 )) {
    minuto = 0;
    hora++;

    minuto2 = 0;
    hora2++;
  }

  // Rutina para las horas
  if (( hora == 25 ) || ( hora2 == 25 )) {
    hora = 0;
    hora++;

    hora2 = 0;
    hora2++;
  }

  if ( (hora == 24) || (Reset == 1) || (hora2 == 24) ) {
    hora = 0;
    minuto = 0;
    segundo = 0;
    actual = 500000;

    hora2 = 0;
    minuto2 = 0;
    segundo2 = 0;
    actual2 = 500000;
  }
}



Les agradezco su ayuda.

surbyte

Ve a Documentación => Indice de temas tutoriales => millis()

Y con millis() podrás contar el tiempo de la cantidad de máquians que quieras.

Go Up