(RESOLVIDO)Incremento no arduino a partir de um número

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!

Exibições: 1707

Responder esta

Respostas a este tópico

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.

Anexos

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

Anexos

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

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço