mais o filtro ou é uma limitação da corrente mínima detectada pelo sensor?
Agora estou usando o seguinte sketch baseado no seu:
#include <SPI.h>#include <IRremote.h>#include <Ethernet.h>#include <TimerOne.h>
//Ethernet Parameters
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x36 }; //physical mac addressbyte ip[] = { 192, 168, 0, 120 }; // ip in lanbyte gateway[] = { 192, 168, 0, 1 }; // internet access via routerbyte subnet[] = { 255, 255, 255, 0 }; //subnet maskEthernetServer server(80); //server port
String readString;
String inString = "";
int Strng;
//Infrared Signal and Control pins
IRsend irsend;
int IRCPin_1 = 2; //Used to control a first IR signal outputint IRCPin_2 = 4; //Used to control a second IR signal output
// int IRCPin_3 = 5; //Used to control a third IR signal output
//Dimmers Control pins
const int DimmerPin_1 = 7;const int DimmerPin_2 = 8;
int sampleTime = 100000UL; // sample over 100ms, it is an exact number of cycles for both 50Hz and 60Hz mainsint numSamples = 250UL; // choose the number of samples to divide sampleTime exactly, but low enough for the ADC to keep upint sampleInterval = sampleTime/numSamples; // the sampling interval, must be longer than then ADC conversion time
const int currentPin0 = A0;const int adc_zero = 510;long in_filtro=0;long filtro=0;long out_filtro=0;int currentAcc0;int count0;unsigned long prevMicros0;
void current(){ int adc_raw0 = analogRead(currentPin0) - adc_zero; in_filtro=(long)adc_raw0 *adc_raw0 ;filtro=filtro+in_filtro;filtro=filtro-out_filtro;out_filtro=filtro>>10;/* Pode alterar esse valor para observar a diferença de tamanho do filtro e ver oque é melhor para seu caso*/
}
void setup() { Timer1.initialize(250); Timer1.attachInterrupt(current); Serial.begin(9600); //Start serial conection Serial.begin(9600); //start Ethernet Ethernet.begin(mac, ip, gateway, subnet); server.begin();
// Infrared - Pin Mode//pinMode(IRledPin, OUTPUT);
pinMode(IRCPin_1, OUTPUT);pinMode(IRCPin_2, OUTPUT);
//Dimmer - Pin Mode
pinMode(DimmerPin_1, OUTPUT);pinMode(DimmerPin_2, OUTPUT);
//IR - PIN OFF
//digitalWrite(IRledPin, LOW);
digitalWrite(IRCPin_1, LOW);digitalWrite(IRCPin_2, LOW);
//Dimmer - PIN OFF
digitalWrite(DimmerPin_1, HIGH);digitalWrite(DimmerPin_2, HIGH);}
void Clear(){ inString = ""; readString = ""; delay(300); }
void loop() {
// Create a client connection EthernetClient client = server.available(); if (client) { while (client.connected()) { if (client.available()) { char c = client.read();
//read char by char HTTP request if (readString.length() < 100) {
//store characters to string readString += c; } //if HTTP request has ended if (c == '\n') {
inString = readString.substring(5,8); Strng = (inString.toInt());
Serial.println(readString); //print to serial monitor for debuging Serial.println(inString); //print to serial monitor for debuging Serial.println(Strng); //print to serial monitor for debuging Serial.println(readString.substring(5,6)); //print to serial monitor for debuging
readString = ""; client.stop();
} } } } if((Strng == 30) && (digitalRead(7) == HIGH)) { digitalWrite(7, LOW); // set pin 7 high Strng = '0'; } if((Strng == 31) && (digitalRead(7) == LOW)) { digitalWrite(7, HIGH); // set pin 7 low Strng = '0'; }
if((Strng == 40) && (digitalRead(8) == HIGH)) { digitalWrite(8, LOW); Strng = '0'; } if((Strng == 41) && (digitalRead(8) == LOW)) { digitalWrite(8, HIGH); Strng = '0'; } if(Strng ==32) { if(currentAcc0 == 1) { digitalWrite(8, LOW); // set pin 7 high } if(currentAcc0 == 8) { delay(500); digitalWrite(8, HIGH); // set pin 7 high Strng = '0'; } } if(Strng ==33) { if(currentAcc0 == 1) { digitalWrite(8, LOW); // set pin 7 high } if(currentAcc0 == 7) { delay(400); digitalWrite(8, HIGH); // set pin 7 high Strng = '0'; } } if(Strng ==34) { if(currentAcc0 == 1) { digitalWrite(8, LOW); // set pin 7 high } if(currentAcc0 == 6) { delay(500); digitalWrite(8, HIGH); // set pin 7 high Strng = '0'; } } if(Strng ==35) { if(currentAcc0 == 1) { digitalWrite(8, LOW); // set pin 7 high } if(currentAcc0 == 5) { delay(500); digitalWrite(8, HIGH); // set pin 7 high Strng = '0'; } }
if(Strng ==36) { if(currentAcc0 == 1) { digitalWrite(8, LOW); // set pin 7 high } if(currentAcc0 == 4) { delay(300); digitalWrite(8, HIGH); // set pin 7 high Strng = '0'; } } currentAcc0=sqrt(out_filtro);Serial.print("Corrente: ");Serial.println(currentAcc0); }…
rial : 1 valor : 7
Agora se vc deixar configurado com uma das outras 3 opções, se vc digitar 7 e der enter, terá um resultado diferente:
Serial : 1 valor : 7
Serial : 1 valor : 0
Por que? A própria opção já te dá a dica: é como se vc tivesse dado um ENTER a mais. Assim sendo, o primeiro ENTER que vc deu manualmente enviou o número 7. Mas o ENTER extra enviado pelo serial monitor resultou no valor 0.
Aquele Serial: 1 indica que houve algo na serial, pois vc pediu o comando serial.available()
Em resumo: deixe o serial monitor em NO LINE ENDING (NENHUM FINAL DE LINHA) e seja feliz
Por curiosidade: experimente enviar o A1B2C3 e dê enter e veja o resultado. Há descarte de letras e após cada número vê-se que houve um enter automárico…