ternando.
A ideia é que cada chave acione sua respectiva saída sem causar interferência, alguém já passou por isso e tem uma ideia para me ajudar?
Grato pelo apoio!
//Saídas int E0 = 2;
int E1 = 3;
int E2 = 4;
int E3 = 5;
int E4 = 6;
int E5 = 7;
int E6 = 8;
int E7 = 9;
int E8 = 10;
int E9 = 11;
int E10 = 12;
int E11 = 13;
int E12 = 14;
int E13 = 15;
int E14 = 16;
int E15 = 17;
//Entradas const int S1 = 20;
const int S2 = 21;
const int S3 = 22;
const int S4 = 23;
const int S5 = 24;
const int S6 = 25;
const int S7 = 26;
const int S8 = 27;
const int S9 = 28;
const int S10 = 29;
const int S11 = 30;
const int S12 = 31;
const int S13 = 32;
const int S14 = 33;
const int S15 = 34;
const int S16 = 35;
int dado; //variável que receberá os dados da porta serial
//Ajuste de Debounce "S1" const long DEBOUNCE_DELAY0 = 100;
int leitura_anterior0 = 1;
int leitura_anterior_db0 = 1;
long time_ultimo_debounce0 = 0;
int debounce_0 = 1;
//Ajuste de Debounce "S2" const long DEBOUNCE_DELAY1 = 100;
int leitura_anterior1 = 1;
int leitura_anterior_db1 = 1;
long time_ultimo_debounce1 = 0;
int debounce_1 = 1;
//Ajuste de Debounce "S3" const long DEBOUNCE_DELAY2 = 100;
int leitura_anterior2 = 1;
int leitura_anterior_db2 = 1;
long time_ultimo_debounce2 = 0;
int debounce_2 = 1;
//Ajuste de Debounce "S4" const long DEBOUNCE_DELAY3 = 100;
int leitura_anterior3 = 1;
int leitura_anterior_db3 = 1;
long time_ultimo_debounce3 = 0;
int debounce_3 = 1;
void setup(){ Serial.begin(9600);//frequência da porta serial
//Saídas
pinMode(E0,OUTPUT);
pinMode(E1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(E3,OUTPUT);
pinMode(E4,OUTPUT);
pinMode(E5,OUTPUT);
pinMode(E6,OUTPUT);
pinMode(E7,OUTPUT);
pinMode(E8,OUTPUT);
pinMode(E9,OUTPUT);
pinMode(E10,OUTPUT);
pinMode(E11,OUTPUT);
pinMode(E12,OUTPUT);
pinMode(E13,OUTPUT);
pinMode(E14,OUTPUT);
pinMode(E15,OUTPUT);
//Entradas
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(S3,INPUT);
pinMode(S4,INPUT);
pinMode(S5,INPUT);
pinMode(S6,INPUT);
pinMode(S7,INPUT);
pinMode(S8,INPUT);
pinMode(S9,INPUT);
pinMode(S10,INPUT);
pinMode(S11,INPUT);
pinMode(S12,INPUT);
pinMode(S13,INPUT);
pinMode(S14,INPUT);
pinMode(S15,INPUT);
pinMode(S16,INPUT);
}
void loop(){
botao_0(); }
void botao_0(){
int leitura_atual0 = digitalRead(S1);
if (leitura_atual0 != leitura_anterior0 ) { time_ultimo_debounce0 = millis(); debounce_0 = 0; }
if ( (millis() - time_ultimo_debounce0) > DEBOUNCE_DELAY0 ) { debounce_0 = 1; }
if (debounce_0 = 1){ if (leitura_atual0 == 0 && leitura_anterior_db0 == 1){ digitalWrite(E0, !digitalRead(E0)); }
leitura_anterior_db0 = leitura_atual0; }
leitura_anterior0 = leitura_atual0;
botao_1(); }
void botao_1(){
int leitura_atual1 = digitalRead(S2);
if (leitura_atual1 != leitura_anterior1 ) { time_ultimo_debounce1 = millis(); debounce_1 = 0; }
if ( (millis() - time_ultimo_debounce1) > DEBOUNCE_DELAY1 ) { debounce_1 = 0; }
if (debounce_1 = 1){ if (leitura_atual1 == 0 && leitura_anterior_db1 == 1){ digitalWrite(E1, !digitalRead(E1)); }
leitura_anterior_db1 = leitura_atual1; }
leitura_anterior1 = leitura_atual1;
botao_2(); }
void botao_2(){
int leitura_atual2 = digitalRead(S3);
if (leitura_atual2 != leitura_anterior2 ) { time_ultimo_debounce2 = millis(); debounce_2 = 0; }
if ( (millis() - time_ultimo_debounce2) > DEBOUNCE_DELAY2 ) { debounce_2 = 0; }
if (debounce_2 = 1){ if (leitura_atual2 == 0 && leitura_anterior_db2 == 1){ digitalWrite(E2, !digitalRead(E2)); }
leitura_anterior_db2 = leitura_atual2; }
leitura_anterior2 = leitura_atual2;
botao_3(); }
void botao_3(){
int leitura_atual3 = digitalRead(S4);
if (leitura_atual3 != leitura_anterior3 ) { time_ultimo_debounce3 = millis(); debounce_3 = 0; }
if ( (millis() - time_ultimo_debounce3) > DEBOUNCE_DELAY3 ) { debounce_3 = 0; }
if (debounce_3 = 1){ if (leitura_atual3 == 0 && leitura_anterior_db3 == 1){ digitalWrite(E3, !digitalRead(E3)); }
leitura_anterior_db3 = leitura_atual3; }
leitura_anterior3 = leitura_atual3;
delay(10); if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(E0,HIGH);
break;
case 2:
digitalWrite(E0,LOW);
break;
case 3: digitalWrite(E1,HIGH);
break;
case 4:
digitalWrite(E1,LOW);
break;
case 5: digitalWrite(E2,HIGH);
break;
case 6:
digitalWrite(E2,LOW);
break;
case 7: digitalWrite(E3,HIGH);
break;
case 8:
digitalWrite(E3,LOW);
break;
case 9: digitalWrite(E4,HIGH);
break;
case 10:
digitalWrite(E4,LOW);
break;
case 11: digitalWrite(E5,HIGH);
break;
case 12:
digitalWrite(E5,LOW);
break;
case 13: digitalWrite(E6,HIGH);
break;
case 14:
digitalWrite(E6,LOW);
break;
case 15: digitalWrite(E7,HIGH);
break;
case 16:
digitalWrite(E7,LOW);
break;
case 17: digitalWrite(E8,HIGH);
break;
case 18:
digitalWrite(E8,LOW);
break;
case 19: digitalWrite(E9,HIGH);
break;
case 20:
digitalWrite(E9,LOW);
break;
case 21: digitalWrite(E10,HIGH);
break;
case 22:
digitalWrite(E10,LOW);
break;
case 23: digitalWrite(E11,HIGH);
break;
case 24:
digitalWrite(E11,LOW);
break;
case 25: digitalWrite(E12,HIGH);
break;
case 26:
digitalWrite(E12,LOW);
break;
case 27: digitalWrite(E13,HIGH);
break;
case 28:
digitalWrite(E13,LOW);
break;
case 29: digitalWrite(E14,HIGH);
break;
case 30:
digitalWrite(E14,LOW);
break;
case 31: digitalWrite(E15,HIGH);
break;
case 32:
digitalWrite(E15,LOW);
break;
case 33: digitalWrite(E0,HIGH);
digitalWrite(E1,HIGH);
digitalWrite(E2,HIGH);
digitalWrite(E3,HIGH);
digitalWrite(E4,HIGH);
digitalWrite(E5,HIGH);
digitalWrite(E6,HIGH);
digitalWrite(E7,HIGH);
digitalWrite(E8,HIGH);
digitalWrite(E9,HIGH);
digitalWrite(E10,HIGH);
digitalWrite(E11,HIGH);
digitalWrite(E12,HIGH);
digitalWrite(E13,HIGH);
digitalWrite(E14,HIGH);
digitalWrite(E15,HIGH);
break; case 34:
digitalWrite(E0,LOW);
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
digitalWrite(E3,LOW);
digitalWrite(E4,LOW);
digitalWrite(E5,LOW);
digitalWrite(E6,LOW);
digitalWrite(E7,LOW);
digitalWrite(E8,LOW);
digitalWrite(E9,LOW);
digitalWrite(E10,LOW);
digitalWrite(E11,LOW);
digitalWrite(E12,LOW);
digitalWrite(E13,LOW);
digitalWrite(E14,LOW);
digitalWrite(E15,LOW);
break;
} }
}…
ezes desliga uma e liga a outra com o acionamento de uma unica chave, o que deveria cada chave acionar sua respectiva saída como acontece na S1 e S2 que estão funcionando corretamente. outro comportamento que começou a ocorrer foi depois que adicionei a programação do Debounce delay para as chaves S3 e S4 fazendo as saídas E2 e E3 iniciarem já acionadas, Alguém já passou por isso e pode me dar uma dica! Abraço a todos !!!
//Saídas int E0 = 2;
int E1 = 3;
int E2 = 4;
int E3 = 5;
int E4 = 6;
int E5 = 7;
int E6 = 8;
int E7 = 9;
int E8 = 10;
int E9 = 11;
int E10 = 12;
int E11 = 13;
int E12 = 14;
int E13 = 15;
int E14 = 16;
int E15 = 17;
//Entradas
const int S1 = 20;
const int S2 = 21;
const int S3 = 22;
const int S4 = 23;
const int S5 = 24;
const int S6 = 25;
const int S7 = 26;
const int S8 = 27;
const int S9 = 28;
const int S10 = 29;
const int S11 = 30;
const int S12 = 31;
const int S13 = 32;
const int S14 = 33;
const int S15 = 34;
const int S16 = 35;
int dado; //variável que receberá os dados da porta serial
//Ajuste de Debounce "S1"
const long DEBOUNCE_DELAY0 = 100;
int leitura_anterior0 = 1;
int leitura_anterior_db0 = 1;
long time_ultimo_debounce0 = 0;
int debounce_0 = 1;
//Ajuste de Debounce "S2"
const long DEBOUNCE_DELAY1 = 100;
int leitura_anterior1 = 1;
int leitura_anterior_db1 = 1;
long time_ultimo_debounce1 = 0;
int debounce_1 = 1;
//Ajuste de Debounce "S3"
const long DEBOUNCE_DELAY2 = 100;
int leitura_anterior2 = 1;
int leitura_anterior_db2 = 1;
long time_ultimo_debounce2 = 0;
int debounce_2 = 1;
//Ajuste de Debounce "S4"
const long DEBOUNCE_DELAY3 = 100;
int leitura_anterior3 = 1;
int leitura_anterior_db3 = 1;
long time_ultimo_debounce3 = 0;
int debounce_3 = 1;
void setup(){ Serial.begin(9600);//frequência da porta serial
//Saídas
pinMode(E0,OUTPUT);
pinMode(E1,OUTPUT);
pinMode(E2,OUTPUT);
pinMode(E3,OUTPUT);
pinMode(E4,OUTPUT);
pinMode(E5,OUTPUT);
pinMode(E6,OUTPUT);
pinMode(E7,OUTPUT);
pinMode(E8,OUTPUT);
pinMode(E9,OUTPUT);
pinMode(E10,OUTPUT);
pinMode(E11,OUTPUT);
pinMode(E12,OUTPUT);
pinMode(E13,OUTPUT);
pinMode(E14,OUTPUT);
pinMode(E15,OUTPUT);
//Entradas
pinMode(S1,INPUT);
pinMode(S2,INPUT);
pinMode(S3,INPUT);
pinMode(S4,INPUT);
pinMode(S5,INPUT);
pinMode(S6,INPUT);
pinMode(S7,INPUT);
pinMode(S8,INPUT);
pinMode(S9,INPUT);
pinMode(S10,INPUT);
pinMode(S11,INPUT);
pinMode(S12,INPUT);
pinMode(S13,INPUT);
pinMode(S14,INPUT);
pinMode(S15,INPUT);
pinMode(S16,INPUT);
}
void loop(){
botao_0(); }
void botao_0(){
int leitura_atual0 = digitalRead(S1);
if (leitura_atual0 != leitura_anterior0 ) { time_ultimo_debounce0 = millis(); debounce_0 = 0; }
if ( (millis() - time_ultimo_debounce0) > DEBOUNCE_DELAY0 ) { debounce_0 = 1; }
if (debounce_0 = 1){ if (leitura_atual0 == 0 && leitura_anterior_db0 == 1){ digitalWrite(E0, !digitalRead(E0)); }
leitura_anterior_db0 = leitura_atual0; }
leitura_anterior0 = leitura_atual0;
botao_1();
}
void botao_1(){
int leitura_atual1 = digitalRead(S2);
if (leitura_atual1 != leitura_anterior1 ) { time_ultimo_debounce1 = millis(); debounce_1 = 0; }
if ( (millis() - time_ultimo_debounce1) > DEBOUNCE_DELAY1 ) { debounce_1 = 0; }
if (debounce_1 = 1){ if (leitura_atual1 == 0 && leitura_anterior_db1 == 1){ digitalWrite(E1, !digitalRead(E1)); }
leitura_anterior_db1 = leitura_atual1; }
leitura_anterior1 = leitura_atual1;
botao_2();
}
void botao_2(){
int leitura_atual2 = digitalRead(S3);
if (leitura_atual2 != leitura_anterior2 ) { time_ultimo_debounce2 = millis(); debounce_2 = 0; }
if ( (millis() - time_ultimo_debounce2) > DEBOUNCE_DELAY2 ) { debounce_2 = 0; }
if (debounce_2 = 1){ if (leitura_atual2 == 0 && leitura_anterior_db2 == 1){ digitalWrite(E2, !digitalRead(E2)); }
leitura_anterior_db2 = leitura_atual2; }
leitura_anterior2 = leitura_atual2;
botao_3();
}
void botao_3(){
int leitura_atual3 = digitalRead(S4);
if (leitura_atual3 != leitura_anterior3 ) { time_ultimo_debounce3 = millis(); debounce_3 = 0; }
if ( (millis() - time_ultimo_debounce3) > DEBOUNCE_DELAY3 ) { debounce_3 = 0; }
if (debounce_3 = 1){ if (leitura_atual3 == 0 && leitura_anterior_db3 == 1){ digitalWrite(E3, !digitalRead(E3)); }
leitura_anterior_db3 = leitura_atual3; }
leitura_anterior3 = leitura_atual3;
delay(10);
if(Serial.available() > 0){ //verifica se existe comunicação com a porta serial
dado = Serial.read();//lê os dados da porta serial
switch(dado){
case 1:
digitalWrite(E0,HIGH);
break;
case 2:
digitalWrite(E0,LOW);
break;
case 3: digitalWrite(E1,HIGH);
break;
case 4:
digitalWrite(E1,LOW);
break;
case 5:
digitalWrite(E2,HIGH);
break;
case 6:
digitalWrite(E2,LOW);
break;
case 7:
digitalWrite(E3,HIGH);
break;
case 8:
digitalWrite(E3,LOW);
break;
case 9:
digitalWrite(E4,HIGH);
break;
case 10:
digitalWrite(E4,LOW);
break;
case 11:
digitalWrite(E5,HIGH);
break;
case 12:
digitalWrite(E5,LOW);
break;
case 13:
digitalWrite(E6,HIGH);
break;
case 14:
digitalWrite(E6,LOW);
break;
case 15:
digitalWrite(E7,HIGH);
break;
case 16:
digitalWrite(E7,LOW);
break;
case 17:
digitalWrite(E8,HIGH);
break;
case 18:
digitalWrite(E8,LOW);
break;
case 19:
digitalWrite(E9,HIGH);
break;
case 20:
digitalWrite(E9,LOW);
break;
case 21:
digitalWrite(E10,HIGH);
break;
case 22:
digitalWrite(E10,LOW);
break;
case 23:
digitalWrite(E11,HIGH);
break;
case 24:
digitalWrite(E11,LOW);
break;
case 25:
digitalWrite(E12,HIGH);
break;
case 26:
digitalWrite(E12,LOW);
break;
case 27:
digitalWrite(E13,HIGH);
break;
case 28:
digitalWrite(E13,LOW);
break;
case 29:
digitalWrite(E14,HIGH);
break;
case 30:
digitalWrite(E14,LOW);
break;
case 31:
digitalWrite(E15,HIGH);
break;
case 32:
digitalWrite(E15,LOW);
break;
case 33: digitalWrite(E0,HIGH);
digitalWrite(E1,HIGH);
digitalWrite(E2,HIGH);
digitalWrite(E3,HIGH);
digitalWrite(E4,HIGH);
digitalWrite(E5,HIGH);
digitalWrite(E6,HIGH);
digitalWrite(E7,HIGH);
digitalWrite(E8,HIGH);
digitalWrite(E9,HIGH);
digitalWrite(E10,HIGH);
digitalWrite(E11,HIGH);
digitalWrite(E12,HIGH);
digitalWrite(E13,HIGH);
digitalWrite(E14,HIGH);
digitalWrite(E15,HIGH);
break; case 34:
digitalWrite(E0,LOW);
digitalWrite(E1,LOW);
digitalWrite(E2,LOW);
digitalWrite(E3,LOW);
digitalWrite(E4,LOW);
digitalWrite(E5,LOW);
digitalWrite(E6,LOW);
digitalWrite(E7,LOW);
digitalWrite(E8,LOW);
digitalWrite(E9,LOW);
digitalWrite(E10,LOW);
digitalWrite(E11,LOW);
digitalWrite(E12,LOW);
digitalWrite(E13,LOW);
digitalWrite(E14,LOW);
digitalWrite(E15,LOW);
break;
} }
}…
m C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/Device/ATMEL/sam3xa/include/sam3x8e.h:260:0, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/Device/ATMEL/sam3xa/include/sam3xa.h:44, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/Device/ATMEL/sam3.h:59, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/Device/ATMEL/sam.h:198, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/libsam/include/../chip.h:25, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/libsam/include/twi.h:44, from C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:25, from sketch_nov11a.ino:5:C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/CMSIS/Include/core_cm3.h:868:46: error: expected ')' before '*' token #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ ^sketch_nov11a.ino:6:11: note: in expansion of macro 'MPU'C:\Program Files (x86)\Arduino\hardware\arduino\sam\system/CMSIS/CMSIS/Include/core_cm3.h:868:46: error: expected ')' before '*' token #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ ^sketch_nov11a.ino:6:11: note: in expansion of macro 'MPU'sketch_nov11a.ino: In function 'void setup()':sketch_nov11a.ino:10:29: error: call of overloaded 'beginTransmission(MPU_Type*)' is ambiguoussketch_nov11a.ino:10:29: note: candidates are:In file included from sketch_nov11a.ino:5:0:C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:39:7: note: void TwoWire::beginTransmission(uint8_t) <near match> void beginTransmission(uint8_t); ^C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:39:7: note: no known conversion for argument 1 from 'MPU_Type*' to 'uint8_t {aka unsigned char}'C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:40:7: note: void TwoWire::beginTransmission(int) <near match> void beginTransmission(int); ^C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:40:7: note: no known conversion for argument 1 from 'MPU_Type*' to 'int'sketch_nov11a.ino: In function 'void loop()':sketch_nov11a.ino:17:29: error: call of overloaded 'beginTransmission(MPU_Type*)' is ambiguoussketch_nov11a.ino:17:29: note: candidates are:In file included from sketch_nov11a.ino:5:0:C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:39:7: note: void TwoWire::beginTransmission(uint8_t) <near match> void beginTransmission(uint8_t); ^C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:39:7: note: no known conversion for argument 1 from 'MPU_Type*' to 'uint8_t {aka unsigned char}'C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:40:7: note: void TwoWire::beginTransmission(int) <near match> void beginTransmission(int); ^C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:40:7: note: no known conversion for argument 1 from 'MPU_Type*' to 'int'sketch_nov11a.ino:20:31: error: invalid conversion from 'MPU_Type*' to 'int' [-fpermissive]In file included from sketch_nov11a.ino:5:0:C:\Program Files (x86)\Arduino\hardware\arduino\sam\libraries\Wire/Wire.h:46:13: error: initializing argument 1 of 'uint8_t TwoWire::requestFrom(int, int, int)' [-fpermissive] uint8_t requestFrom(int, int, int); ^Erro compilando.…
sso toda interface que for conectada no módulo não pode ultrapassar o nível de tensão de 3,3V - isso é muito importante pois, por exemplo, se conectar uma interface de 5V você queimará o seu chip !
Segundo as especificações do fabricante , a corrente máxima que um pino de saída (output) pode fornecer é de 12mA.Como precação sugiro não ultrapassar os 10 mA. Isto é, se ligar um Led (dependendo do consumo do Led), poderá danificar o chip também. Muito cuidado com o uso dos pinos de saida e entrada (GPIO_XX).
Link do Datasheet do Chip ESP8266EX:
https://www.adafruit.com/images/product-files/2471/0A-ESP8266__Data...
CHIP ESP8266EX ESP8266EX pinagem
Esses são os pinos de alimentação do Chip ESP8266EX.
Nos módulos ESP8266, esse pinos já estão devidamente conectados.
1) VDDA - Alimentação do circuito analógico +3,3V
3) VDDP3 - Alimentação do Amplificador de potência de RF +3,3V (esses pinos 3 e 4 são soldados juntos)
4) VDDP3 - Alimentação do Amplificador de potência de RF +3,3V
5) VDD_RTC - o datasheet informa = sem conexão
6) TOUT - Pino de medição do conversor analógico digital ADC - máximo 3,3V
11) VDDPST - fonte de alimentação do Digital I/O (1,8V~3,3V)
17) VDDPST - fonte de alimentação do Digital I/O (1,8V~3,3V)
29) VDDD - Alimentação do circuito analógico +3,3V (deve ser Digital e não analógico)
30) VDDA - Alimentação do circuito analógico +3,3V
31) RES12K - conexão de um resistor de 12K ohms ao terra
33) GND - terra
Essa tabela copiada do Datasheet do ESP8266EX demonstra o consumo de corrente nos vários modos de operação:
1) Modem-Sleep : nesse modo, o modem WIFI é desligado, mas a conexão WIFI é mantida sem a transmissão de dados.
2) Light-sleep : A CPU pode estar suspensa em aplicações como Switch de WIFI. Sem a transmissão de dados, o modem WIFI pode ser desligado e a CPU suspendida para economizar energia.
3) Deep-Sleep : Não precisa de conexão WIFI para ser mantido. Pode ser usado em aplicações com grande intervalo de tempo entre as transmissões.
…
#include "SIM900.h"#include "sms.h"#include <SoftwareSerial.h>SMSGSM sms;
char caracter1=-31; char caracter2=-22; char telefones[][14] = {"+556192659780", "+556184779956", 0}; int ledVermelho = 13; int ledVerde = 12; int ledAzul = 11; int PIRpino = 7; int PIR = 0; int IRpino = 0; int IR = 0; int ALTERNATIVOpino = 1; void sensor_infravermelho() {
for (int i = 0; (int)*telefones[i] != 0; i++) { if (sms.SendSMS(telefones[i], "Ha nova(s) correspondencia(s) na sua caixa de cor-reio residencial!")) {
Serial.print("\nSMS enviado para o numero: ");Serial.println(telefones[i]); Serial.print("H");Serial.print(caracter1);Serial.print(" nova(s) correspond");Serial.print(caracter2);Serial.println("ncia(s) na sua Caixa de Correio Residencial!");Serial.println("SMS OK");}}};
void sensor_presenca() {
for (int i = 0; (int)*telefones[i] != 0; i++) { if (sms.SendSMS(telefones[i], "A sua caixa de correio residencial foi aberta!")) { Serial.print("\nSMS enviado para o numero: ");Serial.println(telefones[i]); Serial.println("A sua caixa de correio residencial foi aberta!");Serial.println("SMS OK");}}};
void setup(){//Configuração dos pinos: OUTPUT saída, INPUT entradapinMode(ledVermelho, OUTPUT);pinMode(ledVerde, OUTPUT);pinMode(ledAzul, OUTPUT);pinMode(PIRpino, INPUT);pinMode(IRpino, INPUT);pinMode(ALTERNATIVOpino, INPUT);
//Conexão SerialSerial.begin(9600); //Taxa de dados 9600 bps (bytes por segundo)Serial.println("Conectando Shield IComSat SIM900 GSM/GPRS v1.1");if (gsm.begin(2400)){Serial.println("\nSTATUS = SISTEMA CARREGADO!"); }else Serial.println("\nSTATUS = SISTEMA COM PROBLEMA, FALHA NA REDE GSM!"); };void loop(){int IR = analogRead(IRpino); int PIR = digitalRead(PIRpino); if(IR > 500){ //Se o sensor "IR" for acionadoSerial.print("\nNova(s) correspond");Serial.print(caracter2);Serial.print("ncia(s) na caixa de correio!\n");sensor_infravermelho(); IR = analogRead(ALTERNATIVOpino);while(PIR == LOW){//Enquanto o sensor "PIR" não for acionadodigitalWrite(ledAzul, HIGH); PIR = digitalRead(PIRpino); digitalWrite(ledAzul, LOW);}
if(PIR == LOW){//Testa se a variável "PIR" é alta(5v), caso NÃO:digitalWrite(ledVermelho, LOW); digitalWrite(ledVerde, HIGH); }
else{digitalWrite(ledVermelho, HIGH); digitalWrite(ledVerde, LOW); Serial.println("\nA caixa de correio foi aberta!");sensor_presenca(); delay(30000);//tempo estimado para coleta das correspodências};
ERRO
Arduino: 1.6.8 (Windows 7), Placa:"Arduino/Genuino Uno"
C:\Users\Compútador\Desktop\sketch_may03a\sketch_may03a.ino: In function 'void sensor_infravermelho()':
C:\Users\Compútador\Desktop\sketch_may03a\sketch_may03a.ino:23:104: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Compútador\Desktop\sketch_may03a\sketch_may03a.ino: In function 'void sensor_presenca()':
C:\Users\Compútador\Desktop\sketch_may03a\sketch_may03a.ino:40:83: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
C:\Users\Compútador\Desktop\sketch_may03a\sketch_may03a.ino: In function 'void loop()':
sketch_may03a:94: error: expected '}' at end of input
sketch_may03a:94: error: expected '}' at end of input
exit status 1expected '}' at end of input
This report would have more information with"Show verbose output during compilation"option enabled in File -> Preferences.
DESDE JA AGRADEÇO A AJUDA DE TODOS.…
problemas com essa biblioteca antes mas acabei deixando pra la, agora preciso muito compilar esse codigo. Por favor me ajudem. Att William
obs: codigo erro abaixo
/usr/share/arduino/hardware/tools/avr/bin/avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega2560 -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -I/usr/share/arduino/hardware/arduino/cores/arduino -I/usr/share/arduino/hardware/arduino/variants/mega -I/usr/share/arduino/libraries/Wire -I/usr/share/arduino/libraries/LiquidCrystal -I/home/william/sketchbook/libraries/MenuSystem /tmp/build8103932391107466226.tmp/tesla_winder.cpp -o /tmp/build8103932391107466226.tmp/tesla_winder.cpp.o In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:259:21: warning: identifier ‘nullptr’ is a keyword in C++11 [-Wc++0x-compat] FormatValueFnPtr format_value_fn=nullptr); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:39:11: error: expected nested-name-specifier before ‘SelectFnPtr’ using SelectFnPtr = void (*)(MenuComponent* menu_component); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:45:37: error: ‘SelectFnPtr’ has not been declared MenuComponent(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:102:30: error: ‘SelectFnPtr’ has not been declared void set_select_function(SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:176:5: error: ‘SelectFnPtr’ does not name a type SelectFnPtr _select_fn; ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:32: error: ‘SelectFnPtr’ has not been declared MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:225:36: error: ‘SelectFnPtr’ has not been declared BackMenuItem(const char* name, SelectFnPtr select_fn, MenuSystem* ms); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:243:11: error: expected nested-name-specifier before ‘FormatValueFnPtr’ using FormatValueFnPtr = const String (*)(const float value); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:256:39: error: ‘SelectFnPtr’ has not been declared NumericMenuItem(const char* name, SelectFnPtr select_fn, ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:259:21: error: ‘FormatValueFnPtr’ has not been declared FormatValueFnPtr format_value_fn=nullptr); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:267:31: error: ‘FormatValueFnPtr’ has not been declared void set_number_formatter(FormatValueFnPtr format_value_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:292:5: error: ‘FormatValueFnPtr’ does not name a type FormatValueFnPtr _format_value_fn; ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:259:54: error: ‘nullptr’ was not declared in this scope FormatValueFnPtr format_value_fn=nullptr); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:307:28: error: ‘SelectFnPtr’ has not been declared Menu(const char* name, SelectFnPtr select_fn=nullptr); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:307:50: error: ‘nullptr’ was not declared in this scope Menu(const char* name, SelectFnPtr select_fn=nullptr); ^tesla_winder.ino:36:12: error: no matching function for call to ‘MenuSystem::MenuSystem()’tesla_winder.ino:36:12: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:361:5: note: MenuSystem::MenuSystem(const MenuComponentRenderer&) MenuSystem(MenuComponentRenderer const& renderer); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:361:5: note: candidate expects 1 argument, 0 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:359:7: note: MenuSystem::MenuSystem(const MenuSystem&) class MenuSystem { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:359:7: note: candidate expects 1 argument, 0 providedtesla_winder.ino:37:19: error: call to ‘Menu::Menu(const char*, int)’ uses the default argument for parameter 2, which is not yet definedtesla_winder.ino:38:19: error: call to ‘Menu::Menu(const char*, int)’ uses the default argument for parameter 2, which is not yet definedtesla_winder.ino:39:31: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:39:31: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:40:33: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:40:33: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:41:35: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:41:35: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:42:23: error: call to ‘Menu::Menu(const char*, int)’ uses the default argument for parameter 2, which is not yet definedtesla_winder.ino:43:39: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:43:39: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:44:38: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:44:38: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:45:41: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:45:41: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:46:40: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:46:40: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:47:37: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:47:37: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:48:28: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:48:28: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:49:19: error: call to ‘Menu::Menu(const char*, int)’ uses the default argument for parameter 2, which is not yet definedtesla_winder.ino:50:29: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:50:29: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:51:31: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:51:31: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:52:31: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:52:31: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:53:32: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:53:32: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:54:32: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:54:32: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:55:34: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:55:34: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:56:29: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:56:29: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:57:30: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:57:30: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:58:30: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:58:30: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:59:23: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:59:23: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:60:25: error: no matching function for call to ‘MenuItem::MenuItem(const char [20])’tesla_winder.ino:60:25: note: candidates are:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: MenuItem::MenuItem(const char*, int) MenuItem(const char* name, SelectFnPtr select_fn); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:195:5: note: candidate expects 2 arguments, 1 provided/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: MenuItem::MenuItem(const MenuItem&) class MenuItem : public MenuComponent { ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:188:7: note: no known conversion for argument 1 from ‘const char [20]’ to ‘const MenuItem&’tesla_winder.ino:157:20: error: no matching function for call to ‘LiquidCrystal::LiquidCrystal(int)’tesla_winder.ino:157:20: note: candidates are:In file included from tesla_winder.ino:5:0:/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:55:3: note: LiquidCrystal::LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t) LiquidCrystal(uint8_t rs, uint8_t enable, ^/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:55:3: note: candidate expects 6 arguments, 1 provided/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:53:3: note: LiquidCrystal::LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t) LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, ^/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:53:3: note: candidate expects 7 arguments, 1 provided/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:50:3: note: LiquidCrystal::LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t) LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, ^/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:50:3: note: candidate expects 11 arguments, 1 provided/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:47:3: note: LiquidCrystal::LiquidCrystal(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t) LiquidCrystal(uint8_t rs, uint8_t enable, ^/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:47:3: note: candidate expects 10 arguments, 1 provided/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:45:7: note: LiquidCrystal::LiquidCrystal(const LiquidCrystal&) class LiquidCrystal : public Print { ^/usr/share/arduino/libraries/LiquidCrystal/LiquidCrystal.h:45:7: note: no known conversion for argument 1 from ‘int’ to ‘const LiquidCrystal&’tesla_winder.ino: In function ‘void setup()’:tesla_winder.ino:230:55: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:230:55: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:231:49: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:231:49: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:232:51: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:232:51: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:235:65: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:235:65: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:236:67: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:236:67: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:237:67: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:237:67: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:238:69: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:238:69: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:239:58: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:239:58: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:240:52: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:240:52: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:243:40: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:243:40: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:244:46: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:244:46: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:245:46: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:245:46: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:246:48: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:246:48: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:247:44: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:247:44: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:248:46: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:248:46: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:249:44: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:249:44: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:250:42: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:250:42: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:251:42: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:251:42: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:252:42: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:252:42: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:253:42: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:253:42: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:255:41: error: no matching function for call to ‘Menu::add_item(MenuItem*, void (*)(MenuItem*))’tesla_winder.ino:255:41: note: candidate is:In file included from tesla_winder.ino:7:0:/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: void Menu::add_item(MenuItem*) void add_item(MenuItem* p_item); ^/home/william/sketchbook/libraries/MenuSystem/MenuSystem.h:310:10: note: candidate expects 1 argument, 2 providedtesla_winder.ino:257:6: error: ‘class MenuSystem’ has no member named ‘set_root_menu’tesla_winder.ino:259:7: error: ‘class LiquidCrystal’ has no member named ‘setBacklight’tesla_winder.ino:261:7: error: ‘class LiquidCrystal’ has no member named ‘setBacklight’tesla_winder.ino: In function ‘void displayMenu()’:tesla_winder.ino:525:47: error: ‘const class Menu’ has no member named ‘get_selected’tesla_winder.ino:527:34: error: ‘const class Menu’ has no member named ‘get_num_menu_components’tesla_winder.ino:528:31: error: ‘const class Menu’ has no member named ‘get_cur_menu_component_num’tesla_winder.ino:15:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:567:33: note: in expansion of macro ‘ENABLE’tesla_winder.ino:19:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:571:38: note: in expansion of macro ‘COIL_STEPS’tesla_winder.ino:20:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:575:38: note: in expansion of macro ‘COIL_INV’tesla_winder.ino:22:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:579:38: note: in expansion of macro ‘GUIDE_INV’tesla_winder.ino:21:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:583:38: note: in expansion of macro ‘GUIDE_STEPS’tesla_winder.ino:26:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:587:38: note: in expansion of macro ‘WIRE_SIZE’tesla_winder.ino:27:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:591:38: note: in expansion of macro ‘COIL_DIAM’tesla_winder.ino:28:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:595:38: note: in expansion of macro ‘COIL_HOME’tesla_winder.ino:29:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:599:38: note: in expansion of macro ‘COIL_CALC’tesla_winder.ino:30:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:603:38: note: in expansion of macro ‘COIL_RATIO’tesla_winder.ino:31:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:607:38: note: in expansion of macro ‘COIL_LEN’tesla_winder.ino:32:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:611:38: note: in expansion of macro ‘COIL_TURNS’tesla_winder.ino:33:21: warning: comparison with string literal results in unspecified behaviour [-Waddress]tesla_winder.ino:615:38: note: in expansion of macro ‘COIL_SPEED’tesla_winder.ino: In function ‘long int edit_long(long int)’:tesla_winder.ino:701:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino:728:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino: In function ‘float edit_float(float)’:tesla_winder.ino:848:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino:879:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino: In function ‘void menu_jog_coil(MenuItem*)’:tesla_winder.ino:1239:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino: In function ‘void menu_jog_guide(MenuItem*)’:tesla_winder.ino:1536:28: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino: In function ‘void menu_job_start(MenuItem*)’:tesla_winder.ino:1789:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]tesla_winder.ino:1758:8: warning: unused variable ‘end_job’ [-Wunused-variable]tesla_winder.ino:1780:17: warning: unused variable ‘loop_steps’ [-Wunused-variable]tesla_winder.ino: In function ‘void print_status(long int)’:tesla_winder.ino:1974:8: warning: unused variable ‘buf’ [-Wunused-variable]tesla_winder.ino:1975:8: warning: unused variable ‘buf2’ [-Wunused-variable]…
oderá utilizar, já que pode poupar tempo de desenvolvimento (claro, a simulação deve ser utilizado com critério, senão não tem sentido, e aí as pessoas vem dizer que a simulação não funciona ou não corresponde à realidade - mas na verdade são as pessoas que não sabem usar a simulação de forma adequada para que corresponda à realidade).
Veja o resultado:
(clique na figura para "zoom")
Alguns pontos importantes sobre esse resultado:
1) para o Sensor de Fluxo, foi utilizado um Gerador de Sinais, o qual está gerando uma onda quadrada na Frequência que o Sensor de Fluxo envia para o pino "2" do Arduino. No resultado da simulação mostrado na figura anterior, esta Frequência está em 217 Hz, o que no seu Sistema corresponde a 39.45 L/min (ou seja, o resultado de 217 / 5.5). Para alterar a Frequência, altere as propriedades do Gerador de Sinais, mudando o parâmetro "Frequência" (no circuito aparece com o nome "CLOCK"). Neste circuito, usei um Gerador que não permite alterar a Frequência enquanto a simulação está rodando. Mas existe uma imensidade de geradores disponíveis para o Proteus, que permitem mudar a Frequência durante a simulação. Vc pode usar qualquer um deles, o que será interessante porque vc verá a alteração da Vazão em "tempo real". Se vc não encontrar um Gerador assim, me avise que eu implemento um para vc.
2) no Osciloscópio usado na simulação, você pode ver os Pulsos gerados pelo Sensor de Fluxo. No Datasheet do Sensor que vc está utilizando, diz que o "duty cycle" é de 50%, e vc pode ver isso na onda mostrada, além é claro de conferir a Frequência e amplitude do Sinal gerado.
3) o Módulo I2C para LCD, está como o Hardware da plaquinha comercializada aos montes por aí. No entanto existem versões usando o PCF8574 e o PCF8574A. A diferença, é apenas a faixa de endereços I2C do Módulo. A plaquinha que tem o PCF8574 tem endereço default em 0x27, e a que tem o PCF8574A tem endereço default 0x3F. No módulo que implementei na simulação, você encontrará um "DIP Switch", onde pode mudar o endereço (baseado no endereço default), o que permite utilizar até 8 Módulos deste tipo, simultaneamente (cada um com um endereço diferente configurado no "DIP Switch").
4) O Terminal do Arduino está incluído, e pode ser usado exatamente como se usa na prática. Embora no seu código original ele não esteja sendo usado, achei conveniente deixá-lo ali, pois poderá ser útil para depuração na simulação.
Segue então o código e simulação correspondente: I2C_x_IRQ_00.zip
Observe que há duas pastas com arquivos de simulação: uma para quem está usando a plaquinha I2C com o PCF8574 (endereço base 0x27), e outra para quem está usando como o PCF8574A (endereço base 0x3F, que é o seu caso Hélio). Testei ambas, e funcionaram perfeitamente.
Mesmo assim uma observação: a simulação do I2C do Arduino no Proteus, tem uma certa sensibilidade à performance do computador onde está rodando. Se o seu computador tiver uma boa performance, não ocorrerá nenhuma falha (se tiver baixa performance, durante a simulação evite rodar outras programas pesados que requisitam uma certa performance do computador, evitando "competição" com o simulador).
Agora, falemos sobre o processo.
Vc disse que o código "I2C_Dispaly.ino" do RV, funcionou corretamente. E realmente deveria funcionar, pois da forma como está, irá medir corretamente a Vazão.
Veja Hélio: o que o Sistema precisa fazer, é medir a quantidade de Pulsos vindos do Sensor de Fluxo, em um certo período de tempo. Como isto está sendo medido durante 1 segundo, essa medição corresponde exatamente à Frequência dos Pulsos vindos do Sensor de Fluxo.
Vc disse que não entendeu como o RV conseguiu medir "sem ter habilitado e desabilitado a interrupção". Veja: o RV fez uma condicional com "if" onde ele espera (através do "millis"), que se passe 1 segundo. E quando se passa esse 1 segundo, ele simplesmente lê a contagem de pulsos que está na variável "contaPulso" e calcula a vazão. E depois, essa contagem "contaPulso" tem que ser zerada, para permitir reiniciar um novo ciclo de contagem. E para permitir que se conte novamente mais 1 segundo, ele usa o "millis" atual como uma referência para cronometrar mais 1 segundo a partir dessa contagem do "millis" atual.
No "background", as Interrupções estão sendo cadenciadas pelos pulsos vindos do sinal do Sensor de Fluxo. A cada novo pulso, uma nova Interrupção ocorre, e a cada Interrupção o contador "contaPulso" é incrementado. Assim após 1 segundo, terá sido contado exatamente a quantidade correspondente à Frequência dos Pulsos. Mas como o "if" do código do RV zera o "contaPulso" a cada segundo, então, cada vez que o código dentro do "if" for executado, lendo o "contaPulso" teremos exatamente a Frequência dos pulsos medida.
Então veja: tudo se resume a medir a quantidade de pulsos, dentro do período de 1 segundo. É isso que vc tentou fazer no seu código original, mas como as Interrupções estavam ficando desabilitadas quando vc acessava o LCD, isso acabava travavando o I2C do Arduino (como eu disse em post anterior, as Interrupções tem que estar habilitadas para o I2C funcionar). Siga a sequência de execução do código, que está na figura onde mostro as "setas na cor rosa", e vc verá exatamente isso acontecendo.
Assim o que precisa, é habilitar e desabilitar a IRQ (Interrup Request), de forma a detectar que passou 1 segundo, mas sem corromper o protocolo I2C. Nas alterações "brutas" (que foram inclusive usadas na simulação), é exatamente isso que faço. Pegue o código com as alterações "brutas", e siga a sequência de execução como mostrei na figura com as "setas na cor rosa", e verá isso.
Agora o dilema (será?): qual técnica usar?
A técnica que o RV usou, está perfeitamente correta. Mas é uma técnica usada para testes. É ótima para isso.
E a técnica "bruta", é simplesmente "bruta"!!!! A técnica "bruta" é muito "primitiva", e não permite flexibilidade alguma no código. Nem para testes eu usaria. Só usei para tentar demonstrar a vc, o problema que estava ocorrendo no seu código, que era o "travamento" do protocolo I2C.
Se vc estiver implementando algo mais profissional, então use uma metodologia de Amostragem (como a que eu usei e que está no arquivo "I2C_x_IRQ_02.zip" no meu primeiro post). Há diversas técnicas de amostragem. Eu usei uma bem simples ("Amostragem Síncrona"), pra evitar confundir os princípios básicos com elementos mais sofisticados, pois o objetivo era apenas conseguir uma medição correta, usando uma técnica de amostragem simples (mas posso te garantir que existem técnicas muito mais sofisticadas, "Assíncronas").
Então aqui vai uma sugestão: teste com o código que o RV postou (o "I2C_Dispaly.ino"). Então imediatamente a seguir, compile e teste com o código "bruto". Eu fiz isso exatamente assim, e funcionou perfeitamente. Se não funcionar, é porque alguma coisa "diferente" vc está fazendo, e só acompanhando isso ou conversando sobre o procedimento, pra descobrir o que é.
Espero ter ajudado.
Abrçs,
Elcids…
Adicionado por Elcids Chagas ao 15:31 em 16 julho 2019
2 programas de irrigação e o arduino nao esta realizando mais o processo. Para que nao fosse necessário usar delays eu estou calculando o tempo de ligar e desligar os setores e a bomba e deixando uma quantidade bem grande de if's para conferir as condições. Acho que pode ser nisso o problema:
O codigo esta muito grande, vou deixar ele em anexo mas vou citar o trecho que acredito ser o problema
void Bomba()//Tempo que a bomba ficará ligada{ delay(1000); while(tBomba >=1) { lcd.clear();lcd.setCursor(0,0);lcd.print("Tempo ");lcd.print(tBomba);lcd.print(" minutos"); lcd.setCursor(0,1);lcd.print("Enter");lcd.setCursor(7,1);lcd.print("(-)");lcd.setCursor(12,1);lcd.print("(+)"); delay(120); if(tBomba>60){tBomba=1;} if(digitalRead(bUp)==LOW){delay(70);tBomba++;} if(digitalRead(bDown)==LOW){delay(70);tBomba--;} if(digitalRead(bEnter)==LOW){delay(70);tB=tBomba;menu=0;tBomba=0;} if(digitalRead(bMode)==LOW){menu=0;tBomba=0;} //Vetores recebem horas e minutos e converte para minutos //Calculo Programa 1//Depois acrescenta o valor do tempo de bomba(tB)//Operação desliga bomba e valvula 4 //Retorna os valores para os vetores com o horario de desligar//Exemplo: Programa 1 - 6:30 com tempo de bomba 10min//Em minutos (6*60)+30+10=400minutos//Tranformando para desligar hora=400/60=6 e minuto=400%60=40
if(h[2]!=0 && h[1]!=0 && h[30]==0 && tB!=0){ h[34]=h[2];h[33]=h[1]; h[34]=h[34]*60;h[34]=h[34]+h[33]+(4*tB);h[33]=h[34]%60;h[34]=h[34]/60; h[8]=h[2];h[7]=h[1]; h[8]=h[8]*60;h[8]=h[8]+h[7]+tB;h[7]=h[8]%60;h[8]=h[8]/60;//1 tempo(desliga 1 e liga 2) h[10]=h[2];h[9]=h[1]; h[10]=h[10]*60;h[10]=h[10]+h[9]+(2*tB);h[9]=h[10]%60;h[10]=h[10]/60;//2 tempo(desliga 2 e liga 3) h[12]=h[2];h[11]=h[1]; h[12]=h[12]*60;h[12]=h[12]+h[11]+(3*tB);h[11]=h[12]%60;h[12]=h[12]/60;//3 tempo(desliga 3 e liga 4) //Calculo Programa 2 if(h[4]!=0 && h[3]!=0 && h[31]==0){ h[14]=h[4];h[15]=h[3]; h[14]=h[14]*60;h[14]=h[14]+h[15]+(4*tB);h[15]=h[14]%60;h[14]=h[14]/60;//Operação Desliga bomba e valvula 4 h[16]=h[4];h[17]=h[3]; h[16]=h[16]*60;h[16]=h[16]+h[17]+tB;h[17]=h[16]%60;h[16]=h[16]/60;//1 tempo(desliga 1 e liga 2) h[18]=h[4];h[19]=h[3]; h[18]=h[18]*60;h[18]=h[18]+h[19]+(2*tB);h[19]=h[18]%60;h[18]=h[18]/60;//2 tempo(desliga 2 e liga 3) h[20]=h[4];h[21]=h[3]; h[20]=h[20]*60;h[20]=h[20]+h[21]+(3*tB);h[21]=h[20]%60;h[20]=h[20]/60;//3 tempo(desliga 3 e liga 4) h[31]=1; //Calculo Programa 3 if(h[6]!=0 && h[5]!=0 && h[32]==0){ h[22]=h[6];h[23]=h[5]; h[22]=h[22]*60;h[22]=h[22]+h[23]+(4*tB);h[23]=h[22]%60;h[22]=h[22]/60;//Operação Desliga bomba e valvula 4 h[24]=h[6];h[25]=h[5]; h[24]=h[24]*60;h[24]=h[24]+h[25]+tB;h[25]=h[24]%60;h[24]=h[24]/60;//1 tempo(desliga 1 e liga 2) h[26]=h[6];h[27]=h[5]; h[26]=h[26]*60;h[26]=h[26]+h[27]+(2*tB);h[27]=h[26]%60;h[26]=h[26]/60;//2 tempo(desliga 2 e liga 3) h[28]=h[6];h[29]=h[5]; h[28]=h[28]*60;h[28]=h[28]+h[29]+(3*tB);h[29]=h[28]%60;h[28]=h[28]/60;//3 tempo(desliga 3 e liga 4) h[32]=1; } }//Fim if Programa 2 h[30]=1;tempo=1; }//Fim if Programa 1 }//Fim While}
if(d[0]=1){//Se apção todos os dias for selecionada //Horarios Para Programa 1 if(h[2]==RTCValues[4] && h[1]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,HIGH);digitalWrite(vs1,LOW);delay(70);}//Liga bomba e valvula 1 if(h[8]==RTCValues[4] && h[7]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);delay(70);}//Desliga Valvula 1 e liga Valvula 2 if(h[10]==RTCValues[4] && h[9]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);delay(70);}//Desliga Valvula 2 e liga Valvula 3 if(h[12]==RTCValues[4] && h[11]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);delay(70);}//Desliga Valvula 3 e liga Valvula 4 if(h[34]==RTCValues[4] && h[33]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);delay(70);}//Desliga bomba e desliga Valvula 4 //Horarios Para Programa 2 if(h[4]==RTCValues[4] && h[3]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1 if(h[16]==RTCValues[4] && h[17]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2 if(h[18]==RTCValues[4] && h[19]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3 if(h[20]==RTCValues[4] && h[21]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4 if(h[14]==RTCValues[4] && h[15]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4 //Horarios Para Programa 3 if(h[6]==RTCValues[4] && h[5]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba, HIGH);digitalWrite(vs1,LOW);}//Liga bomba e valvula 1 if(h[24]==RTCValues[4] && h[25]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs1,HIGH);digitalWrite(vs2,LOW);}//Desliga Valvula 1 e liga Valvula 2 if(h[26]==RTCValues[4] && h[27]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs2,HIGH);digitalWrite(vs3,LOW);}//Desliga Valvula 2 e liga Valvula 3 if(h[28]==RTCValues[4] && h[29]==RTCValues[5] && RTCValues[6]==0){digitalWrite(vs3,HIGH);digitalWrite(vs4,LOW);}//Desliga Valvula 3 e liga Valvula 4 if(h[22]==RTCValues[4] && h[23]==RTCValues[5] && RTCValues[6]==0){digitalWrite(bomba,LOW);digitalWrite(vs4,HIGH);}//Desliga bomba e desliga Valvula 4 }
As variaveis h[1]...h[6] Recebem os horarios de irrigação. Impares minutos e Pares horas…