collapse

* Links de Robótica

* Posts Recentes

URGENTE - display de 7 segmentos com backpack por Hugu
[Ontem às 20:02]


Preços e fabricantes de pcb por Sérgio_Sena
[Ontem às 10:20]


Palavras Cruzadas por Njay
[Ontem às 02:24]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


Apresentação por TigPT
[17 de Setembro de 2017, 07:31]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]


Preparar bancada de testes por jm_araujo
[14 de Setembro de 2017, 10:24]


Mitos: mudança da ilumação tradicional p/ iluminação a LEDs? por LVirtual
[14 de Setembro de 2017, 07:46]

Autor Tópico: gravar numero de telefone na eeprom  (Lida 2752 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline sergiotux

  • Mini Robot
  • *
  • Mensagens: 19
gravar numero de telefone na eeprom
« em: 27 de Setembro de 2013, 17:32 »
por favor,

sou péssimo em programação e por isso peço a ajuda de vocês.

como posso fazer para gravar um numero longo, como o de um telefone, na eeprom e depois ler o numero para uma variável?

já tentei várias coisas e não tive sucesso.

Muito obrigado  a todos.

sérgio

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.389
  • Helpdesk do sitio
Re: gravar numero de telefone na eeprom
« Responder #1 em: 27 de Setembro de 2013, 17:57 »
O que é que já tentaste, que micro-controlador estás a usar, que eeprom(interna ou externa), linguagem de programação?
Avr fanboy

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.122
  • NERD!
Re: gravar numero de telefone na eeprom
« Responder #2 em: 27 de Setembro de 2013, 17:57 »
Estás a falar de arduino?
Se sim, depende de se tens o numero guardado com um long:
http://www.google.pt/search?q=arduino+store+long+in+eeprom
ou como uma string:
http://www.google.pt/search?q=arduino+store+string+in+eeprom

em ambos os casos, esta solução é catita e é referenciado nos dois casos anteriores:

http://playground.arduino.cc/Code/EEPROMWriteAnything

(é catita em termos de utilização... headers com código fazem morrer gatinhos :'( )
Edit: exceto em C++ para templates... desta vez não morreu nenhum gatinho....
« Última modificação: 27 de Setembro de 2013, 18:04 por jm_araujo »

Offline sergiotux

  • Mini Robot
  • *
  • Mensagens: 19
Re: gravar numero de telefone na eeprom
« Responder #3 em: 27 de Setembro de 2013, 20:30 »
Obrigado por ajudar;;;

Estiou usando o Arduino (atmega328p)

Tentei os dois códigos abaixo, sendo que o codigo 1 escreve na eeprom numeros diferentes...não estou entendendo porque, exemplo:

0  escreve 49
1  escreve 50
2  escreve 51
3  escreve 52
...

E também nao sei como juntar em uma variável só

# --- CODIGO 1

#include <EEPROM.h>

int c;

void setup(){
  Serial.begin(9600);
  escreve_numero("123456789",0);
  ler(0,12);
//  le_numero(0,1);

}

void escreve_numero(char *n, unsigned pos)
{
    for (; *n; n++, pos++) {
      Serial.print(pos);Serial.print(" : ");Serial.println(*n);
      EEPROM.write(pos, *n);
}
    EEPROM.write(pos, '\0');
    Serial.println("gravado");
//    Serial.println(EEPROM.read(9));
}


void ler(int ini, int fim)
{
    for (int x=ini; x<fim; x++) {
      Serial.print(x);Serial.print(" : ");
      int c = EEPROM.read(x);
      Serial.println(c);
  }
}

/*
void le_numero(char *n, unsigned pos)
{
    do {
       int c = EEPROM.read(pos++);
       *n++ = c;
    } while (c != '\0');
}
*/

void loop(){}

#--- Fim código 1

E no código 2 só funciona se eu utilizar 9999 no numero, se eu por 999999999 ele "estoura"...

#--- CODIGO 2

#include <EEPROM.h>
 
 
void setup()
{
  Serial.begin(9600);
 
  { // Escreve
    uint32_t telefone = 9999;
 
    byte a = (telefone >> 24) & 0xff;
    byte b = (telefone >> 16) & 0xff;
    byte c = (telefone >> 8) & 0xff;
    byte d = (telefone) & 0xff;
 
    EEPROM.write(0, a);
    EEPROM.write(1, b);
    EEPROM.write(2, c);
    EEPROM.write(3, d);
  }
 
  { // Lê
    byte a =  EEPROM.read(0);
    byte b =  EEPROM.read(1);
    byte c =  EEPROM.read(2);
    byte d =  EEPROM.read(3);
 
    uint32_t telefone =  (a << 24) | (b << 16) | (c << 8) | d;
 
    Serial.println(telefone);
  }
}
 
void loop() { }

#--- FIM CODIGO 2

Obrigado a todos....

Sérgio

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.389
  • Helpdesk do sitio
Re: gravar numero de telefone na eeprom
« Responder #4 em: 27 de Setembro de 2013, 20:37 »
Porque estás a ler directamente da EEPROM, ou melhor a biblioteca print do arduino acha-se muito esperta e passa os valores hex para decimal, 48 é ASCCI para 0, 49 é ASCCI para 1 e por ai adiante..
Avr fanboy

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.122
  • NERD!
Re: gravar numero de telefone na eeprom
« Responder #5 em: 27 de Setembro de 2013, 20:40 »
Tentei os dois códigos abaixo, sendo que o codigo 1 escreve na eeprom numeros diferentes...não estou entendendo porque, exemplo:

0  escreve 49
1  escreve 50
2  escreve 51
3  escreve 52
Faz exactamente o que tens no código. O código ascii do carater "1" é 49, o do careter "2" é 50, e por aí fora.
Escreves chars com caracteres Ascii e estás a ler ints.

Offline sergiotux

  • Mini Robot
  • *
  • Mensagens: 19
Re: gravar numero de telefone na eeprom
« Responder #6 em: 27 de Setembro de 2013, 21:21 »
Senso e JM_Araujo, muito obrigado por me esclarecer e ajudar...

troquei
int c = EEPROM.read(x); por
char c = EEPROM.read(x);

e está ok,
Posso pedir mais uma ajuda?

Como faço para ler os dados da eeprom e jogar para uma variável?
minha ideia é usar essa variável para enviar SMS via shild.

Obrigado

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.122
  • NERD!
Re: gravar numero de telefone na eeprom
« Responder #7 em: 28 de Setembro de 2013, 13:49 »
Vê o ultimo link que te enviei, tem mais de 1 solução:
http://playground.arduino.cc/Code/EEPROMWriteAnything

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 526
Re: gravar numero de telefone na eeprom
« Responder #8 em: 28 de Setembro de 2013, 18:09 »
Basta usares EEPROM.read() para cada byte que queres ler e guardar esses bytes todos como char[] ou char*.
char[] ou char*, para se comportar como String, o último byte tem de ter valor 0 decimal.

Offline sergiotux

  • Mini Robot
  • *
  • Mensagens: 19
Re: gravar numero de telefone na eeprom
« Responder #9 em: 30 de Setembro de 2013, 20:50 »
Obrigado JM_Araujo, tinha visto sim, mas meu programa já tá muito grande e eu não posso utilizar bibliotecas.
Rglove, não entendi bem o que vc falou...pode me mostrar como fazer?

Seguem abaixo o programa como está agora, graças a ajuda de todos...

#include <EEPROM.h>

int c;

char *numero= "11999999999";

void setup(){
  Serial.begin(9600);
  escreve_numero(numero,1);
  int a = 1;
  int b = 12; 
  ler(a,b);
//  le_numero(0,1);

}

void escreve_numero(char *n, unsigned pos)
{
    for (; *n; n++, pos++) {
      Serial.print(pos);Serial.print(" : ");Serial.println(*n);
      EEPROM.write(pos, *n);
}
    EEPROM.write(pos, '\0');
    Serial.println("------");
}


void ler(int ini, int fim)
{
    for (int x=ini; x<fim; x++) {
      Serial.print(x);Serial.print(" : ");
      char c = EEPROM.read(x);
      Serial.println(c);
    }
}

/*
void le_numero(char *n, unsigned pos)
{
    do {
       int c = EEPROM.read(pos++);
       *n++ = c;
    } while (c != '\0');
}
*/

void loop(){}


Obrigado