Boa noite pessoal!
Já faz um tempo que não trabalho com a programação arduino e estou com uma pequena dúvida.
estou elaborando um contador de pulsos e preciso que ele incremente a partir de um numero maior que zero.
No meu caso criei uma variável: int conta = 0;
declarando essa variável a contagem é feita normalmente:
if ( digitalRead(BI9) == HIGH )
{
(delay(90));
if ( digitalRead(BI9) == LOW )
{
conta++;
Serial.println(conta);
delay (1000);
}
}
Achei que mudando o valor da variável para o numero que preciso (no meu caso 35000), ou seja:
int conta = 35000; o programa começaria a incrementar a partir dai... mas não funcionou...
Poderiam me ajudar?
Obrigado!
Tags:
Sim está declarada fora do loop...
Boa noite KJ.
Se você quer com Arduíno contar a partir de 35000, você basicamente tem 3 possibilidades. (Sem usar float)
Usando unsigned int = 35000, conta de 35000 até 65.535,
e ai retorna ao zero e continua contado até novamente 65.535 .
Usando long = 35000, conta de 35000 até 2.147.483.647,
e ai retorna ao zero e continua contado até novamente 2.147.483.647.
Usando unsigned long = 35000, conta de 35000 até 4.294.967.295,
e ai retorna ao zero e continua contado até novamente 4.294.967.295.
RV
Então... usei: long conta=35000
mas começa a contar do zero...;
KJ
anexa um arquivo com o seu sketch completo.
Não cole na área de texto do tópico.
RV
realmente ha um problema com o código mas não compreendo...
montei um código só pra fazer a contagem mesmo e funcionou...
arquivo .ino esta anexado.
realmente ha um problema com o código mas não compreendo...
montei um código só pra fazer a contagem mesmo e funcionou...
arquivo .ino esta anexado.
a variável conta e pra iniciar em zero mesmo...
e a variável consumo que preciso que inicie em 35000.
nesse código por exemplo ele não incrementa a partir de 35000
eu quero que inicie em 35000 porque quero acompanhar a medição feita mensalmente que já foi realizada e ja esta em 35000...
o meu proposito e fazer o monitoramento de um medidor de energia.
no medidor eu tenho a informação de que a cada 1000 pulsos equivalem a 1kw...
então criei a variável consumo pra incrementar cada pulso.
nas ultimas linhas do código dei println pra exibir o resultado da divisão dos pulsos por uma variável constant de valor 1000
client.println((float)consumo / constant, 3);
eu usei o float pra ser mostrado o valor quebrado na tela (com virgula).
dai nessa linha eu pego o valor da variável consumo que é 35000 mais os novos valores que estao sendo incrementados e divido pela variável constant que vale 1000 (os 1000 pulsos/kw)
Bom dia KJ,
analisando seu sketch encontrei o seguintes problemas.
1. Problemas com manuseio da variável consumo;
2. Limpeza EEPROM toda vez ao inciar o Arduíno.
Você usa a variável consumo para guardar os dados lidos.
Você modifica esta variável em 3 linhas:
1. Linha 13 ---> long consumo = 35000;
2. Linha 41 ---> consumo = EEPROM.read (0);
3. Linha 76 ---> consumo++;
A IDE do Arduíno define assim o tamanho das variáveis.
byte ou char === 1 byte;
int === 2 byte2;
long === 4 byte2;
Tamanho das variáveis usadas no sketch.
consumo --> long (4 bytes)
conta --> int (2 bytes)
Ao usar o método EEPROM.read (0); você lê somente um byte para sua variável, (O ultimo byte).
mas sua variável ( tamanho long) tem 4 bytes.
Só para teste fiz uma sketch gravando um long 35000 e em seguida imprimi o valor da variável,
e depois li a EEPROM e ai imprimi novamente. Primeiro imprimiu 35000 ( HEX 88B8)
e depois imprimiu 184 (HEX B8).
Agora vamos corrigir o seu sketch.
1. Linha 13 --> long consumo = 0; Aqui pode ser qq valor, pois você a modifica em seguida.
2. Linha 41 --> consumo = EEPROM.read (0); modificar para: EEPROM.get(0, consumo );
3. Linha 42 --> conta = EEPROM.read (1); modificar para: EEPROM.get(4, conta);
4. Linha 55 --> conta = EEPROM.write(1); modificar para: EEPROM.write(4, conta);
5. Linha 82 --> consumo = EEPROM.write(0); modificar para: EEPROM.put(0, consumo );
Acrescente esta linha após a linha 38:
6. Serial.println(consumo);
Acrescente estas linhas após o } da linha atual 40:
7. EEPROM.put(0, consumo );
8 . while(1) {}.
Em seguida carregue o Arduíno e rode o sketch somente uma vez .
A EPPROM será zerada e o valor 35000 será gravado na EEPROM a partir do endereço 0.
Acompanhe a limpeza pela serial.
Qdo terminar o Arduíno vai travar devido ao while(1) {}.
Em seguida volte ao seu sketch e coloque // (comentar linha) das linhas 37 até linha while(1) {} inclusive.
(itens 6, 7. e 8.)
Recarregue o seu sketch, e o problema deverá estar corrigido.
Tenho solicitado aos amigos que se minha ajudar te ajudar, que no natal distribua brinquedos
para crianças carentes, e post fotos destas crianças sorrindo, na galeria do LdG.
Att:
RV
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por