hola tengo una consulta sobre el comando increment++, quiero saber cada cuanto tiempo equivale el numero de incremento a 1 segundo, es un programa que simula el factor de potencia y uso un potenciometro para simular su valor y tengo una salida que le digo contactor pero en realidad es un led.
const int contactor = 12;
int contador;
int contador2;
float PF;
void setup()
{
Serial.begin(9600);
pinMode(contactor, OUTPUT);
pinMode(A0, INPUT);
digitalWrite(contactor, HIGH);
}
void loop()
{
int sensorValue = analogRead(A0);
float PF = sensorValue * (1.0 / 1023.0);
if(PF<=0.85){ //si el factor de potencia es menor a 0.85 se activa el contactor
contador++;
contador2=0;
Serial.println(contador);
if(contador==5000){
digitalWrite(contactor,LOW);
contador=0;
}}
if(PF>=0.85){ //si el factor de potencia es mayor a 0.85 se apaga el contactor
contador2++;
contador=0;
Serial.println(contador2);
if(contador2==5000){
contador=0;
digitalWrite(contactor,HIGH);
}}
}
Buen dia.
¿Que cuanto tiempo equivale el operador ++?
Eso no tiene un numero en concreto, pues éste dependerá de cuan extenso es tu programa, como está estructurado, si usas o no delay, etc... imagina que tienes esto:
En este caso cada vuelta del loop tardará el segundo del delay más el tiempo que tarda en ejecutarse el Serial.print.
Entonces contador tardará 1 segundo y fraccion en sumar 1. y en tu codigo, contador se ejecutara solo en fracciones de segundo
Si quieres contar tiempo, tienes que usar millis(). Dale una mirada aqui
P.D. puse el delay() solo como ejemplo, tu no lo uses, usa millis();
const int contactor = 12;
unsigned long contador;
unsigned long contador2;
bool menor = false;
bool mayor = false;
float PF;
void setup() {
Serial.begin(9600);
pinMode(contactor, OUTPUT);
pinMode(A0, INPUT);
digitalWrite(contactor, HIGH);
}
void loop()
{
int sensorValue = analogRead(A0);
float PF = sensorValue * (1.0 / 1023.0);
if (PF<=0.85){ //si el factor de potencia es menor a 0.85 se activa el contactor
if (!menor) { // una sola vez
mayor = false;
contador = millis();
menor = true;
}
Serial.println((millis() -contador)/1000); // muestro tiempo en segundos
if (millis() - contador >= 5000UL){ // si supera 5 segundos entonces
digitalWrite(contactor,LOW);
}
}
}
if (PF>=0.85){ //si el factor de potencia es mayor a 0.85 se apaga el contactor
if (!mayor) { // una sola vez
menor = false;
contador2 = millis();
menor = true;
}
Serial.println((millis() -contador2)/1000); // muestro tiempo en segundos
if (millis() - contador2 >= 5000UL){ // si supera 5 segundos entonces
digitalWrite(contactor, HIGH);
}
}
}