Hola noter buenas noches, me agrada tu idea de crear otra clase para los puertos usb, solo se debe crear un temporizador para dos salidas digitales, es todo.
Ahora no entendi pero nada jajajajaja su solucion de :
Relenchufe lavadora(A1, D1), lavavajillas(A2, D2), ordenador(A3, D3);
Como hemos combinado la lectura y el chequeo, podrías:
int consumoLavadora=lavadora.chequea();
if (consumoLavadora>0)
Serial.print("Consumo de la lavadora: ");
Serial.print(consumoLavadora);
} else {
Serial.print("Enchufe de lavadora desactivado");
}
y
if (comando=="1") lavadora.arma();
A ver a mi se me ocurría algo así de crear una variable,
//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////PEQUEÑA CLASE PARA CONTROL AHORRO//////////////////
///////////////////////////////////////////////////////////////////////////////////
// uso:
// Crear un dispositivo: Relenchufe enchufe(pin analógico, pin relé);
// Controlar el dispositivo: enchufe.chequea();
// Obtener lectura: enchufe.getCurrent();
// Obtener lectura de referencia: enchufe.getMaxCurrent();
const unsigned TIEMPODESCONEXION=5000; // TIEMPO TRAS EL QUE SE DESCONECTARÁ EL ENCHUFE SI PERMANECE BAJO
class Relenchufe{
public:
// constructor
Relenchufe(int pinAnalog, int pinLed, int dato):
pinLectura(pinAnalog), led(pinLed), current1(0), millisInicioApagado(0), data(dato){
pinMode(pinLectura, INPUT);
pinMode(led, OUTPUT);
digitalWrite(led, HIGH);
};
int getCurrent(){
return(current);
};
int getMaxCurrent(){
return(current1);
};
void chequea(void){
int sensorMax = 0;
int sensorValue = 0;
for(int cont=0;cont<450;cont++)
{
sensorValue = analogRead(pinLectura);
if (sensorValue > sensorMax)
{
sensorMax = sensorValue;
}
}
current=(float)sensorMax/1024*5/800*2000000; // Voltaje del sensor 5V. Recuerda que se puede simplificar la fórmula
if (current < current1*0.4)
{
if (millisInicioApagado > 0)
{
if ((millis() - millisInicioApagado) >= TIEMPODESCONEXION)
{
current1 = current;
Serial.println(data); // Enviamos por serial.printl a la app en android
digitalWrite(led, LOW); // Apagamos LED
millisInicioApagado = 0; // y reseteamos el valor de consumo y el temporizador
}
}
else
{
millisInicioApagado=millis(); // Iniciamos temporizado
}
}
else
{
millisInicioApagado=0; // Ponemos a 0 el temporizador
current1 = current ;
}
}
private:
int pinLectura; // Pin analógico para leer corriente
int led; // Pin relé de enchufe
int current; // Valor de la última lectura (máxima del for)
int current1; // Valor "alto" de consumo. Se irá estableciendo dinámicamente. Cuando baje del 60% iniciará el temporizador de desconexión
// milisegundo en el que inicia la bajada de consumo e inicia el temporizado para desconexión. Mayor que cero, significa que se ha iniciado la cuenta.
unsigned millisInicioApagado;
int data; // Variable donde pondremos el dato a enviar a la aplicacion en Android.
};
///////////////////////////////////////// hasta aquí la clase que seria metida en una libreria ///////////////////////////////////////////////////
}
Como puedes ver en los parametros del constructor agregue la variable donde estara el dato a enviar cuando se mande apagar el led (o Relenchufe).
Relenchufe(int pinAnalog, int pinLed, int dato):
pinLectura(pinAnalog), led(pinLed), current1(0), millisInicioApagado(0), data(dato)
y Aqui cuando se hace la comparacion y pasa el tiempo y se cumplen todas las condiciones para apagar el Relenchufe
if ((millis() - millisInicioApagado) >= TIEMPODESCONEXION)
{
current1 = current;
Serial.println(data); // Enviamos por serial.printl a la app en android
digitalWrite(led, LOW); // Apagamos LED
millisInicioApagado = 0; // y reseteamos el valor de consumo y el temporizador
Esto Siendo la clase como tal, que estara dentro de una libreria, ahora desde el archivo de programacion normal iría esto.
String dato; //Variable de tipo cadena para guardar los datos recibidos
int led1= 8;
int led2= 9;
int led3= 10;
Relenchufe enchufe1(A0, 8, 1); //A0 entrada analoga, 8 pin de salida, 1 dato a enviar
Relenchufe enchufe2(A2, 9, 2);
Relenchufe enchufe3(A3, 10, 3);
void setup()
{
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
digitalWrite(13,LOW);
digitalWrite(12,LOW);
digitalWrite(11,LOW);
}
void loop()
{
if (dato.length() > 0) { //Comprueba que la variable "dato" tenga al menos un caracter
if(dato == "1") { //Recibimos dato y comparamos
digitalWrite(led1, HIGH); //Enciende el led
}
if(dato == "2") {
digitalWrite(led2, HIGH);
}
if(dato == "3") {
digitalWrite(led3, HIGH);
}
dato=""; //Declaramos la variable "vacía" para volver a guardar de nuevo caracteres y compararlos con cada uno de los casos
}
enchufe1.chequea();
enchufe2.chequea();
enchufe3.chequea();
}
Que opinas al respecto ? , solo quedaria agregar la otra clase y listo.