Go Down

Topic: Arquivo .ini como variaveis (Read 314 times) previous topic - next topic

Apr 06, 2015, 07:10 pm Last Edit: Apr 06, 2015, 07:36 pm by sombravarvas
Olá

Quero utilizar um módulo de cartão SD no arduino para gravar algumas variáveis todas "int" que serão carregadas ao iniciar.
 
uma dela é a variavel q vai guardar o valor dia, para que o programa no caso haver uma falta de luz reiniciar de onde parou;


Como vocês me aconselham fazer?  normalmente utilizamos um arquivo .ini na programação



Eu vejo a maioria dos projetos e tutoriais apenas gravação de dados em arquivo.txt ou leitura de string desses arquivos.


exemplo

Dados.ini
Code: [Select]
dia = 0

variavel1 = 11
variavel2 = 12
variavel3 = 15
variavel4 = 20
variavel5 = 22

config1 = 0
config2 = 1




Agradeço desde ja pela atenção  ;)

evil-noxx

Nunca fiz nada disto em arduino, mas parece boa ideia usar um formato standard.

Vê esta biblioteca:
https://github.com/stevemarple/IniFile

Tem um exemplo com todas as funcionalidades.

Um aparte, acho que o formato .ini não leva ";" no fim de cada linha, mas sim no inicio de cada comentario

#2
Apr 06, 2015, 07:35 pm Last Edit: Apr 06, 2015, 07:36 pm by sombravarvas
evil-noxx

agradeço a ajuda irei ler sobre o IniFile

e verdade é sem ;

mas no costume de terminar uma linha de comando com ; eu acabei colocando sem perceber :)

HugoPT

Porque nao gravares isso antes na eeprom?Nao precisas de adicionar harware só para fazeres isso.
A eeprom é uma memoria nao volatil que mesmo apos o arduino perder a energia fica gravada e podes voltar a ler no proximo arranque se assim desejares.
Pensa nesta memoria como um pequeno disco rigido dentro de cada arduino.Esta lá sempre é so usar ...

http://arduino.cc/en/Reference/EEPROM

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

HugoPT

Agradeço a ajuda

Já li sobre, mas como esses valores serão alterados de tempo em tempo, e eles que vão determinar como o programa irá funcionar.

Com o cartão SD fica mais fácil manipular esses dados.

https://github.com/stevemarple/IniFile


essa biblioteca IniFile apenas pega os valores

eu necessito gravar tbm dados no arquivo .ini;



Alguem sabe como?

uma dela é a variavel q vai guardar o valor dia, para que o programa no caso haver uma falta de luz reiniciar de onde parou;
De que te serve o dia sem as horas?
Será alguma das outras variáveis a hora e talvez minutos?

Nota que a EEPROM não lida bem com muitos ciclos de escrita e se vais estar a actualizar tempo na EEPROM, é melhor arranjares outra solução.
Dito isto, o tempo terá de vir de algum lado e se for dum DS1307, podes usar a memória interna do mesmo para guardar hora/minutos, etc...

Quanto a guardar valores em ficheiros .ini... será a mesma coisa que escrever num ficheiro, não?? Uma coisa que podes pensar é que se guardares os dados em formato binário, não vais precisar de converter strings... coisa que, pelo que sei de .ini files, não será o caso.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

evil-noxx

De que te serve o dia sem as horas?
Será alguma das outras variáveis a hora e talvez minutos?

Nota que a EEPROM não lida bem com muitos ciclos de escrita e se vais estar a actualizar tempo na EEPROM, é melhor arranjares outra solução.
Dito isto, o tempo terá de vir de algum lado e se for dum DS1307, podes usar a memória interna do mesmo para guardar hora/minutos, etc...

Quanto a guardar valores em ficheiros .ini... será a mesma coisa que escrever num ficheiro, não?? Uma coisa que podes pensar é que se guardares os dados em formato binário, não vais precisar de converter strings... coisa que, pelo que sei de .ini files, não será o caso.
O sombravarvas foi bem explicito quando disse que não vai usar EEPROM, mas sim um cartão SD.
Um ficheiro .ini tem uma sintax, não é como escrever num ficheiro arbitrario.
Já reparei que gostas muito de dar respostas incompletas, ou até mesmo responder sem dizer nada de jeito...

Anyway, realmente essa biblioteca só lê ficheiros ini, e implementar a parte de escrita não é trivial.
Sugiro então que procures outro formato, como por exemplo JSON

Uma biblioteca que lê e escreve no formato JSON: https://github.com/bblanchon/ArduinoJson

A principal desvantagem de usar JSON será não ser tão facil de editar à mão, mas tirando isso é semelhante. Tambem tens pares {variavel: valor}


O sombravarvas foi bem explicito quando disse que não vai usar EEPROM, mas sim um cartão SD.
Um ficheiro .ini tem uma sintax, não é como escrever num ficheiro arbitrario.
Já reparei que gostas muito de dar respostas incompletas, ou até mesmo responder sem dizer nada de jeito...
Tu por acaso importas-te de ler o resto do post? Reparaste que houve quem tenha dado a hipótese da EEPROM e que a definição do conteúdo das variáveis não diz nada acerca do que vão conter?

Eu dou respostas tão completas quanto as perguntas... Quando alguém chega aqui, deixa um excerto de código com variáveis chamadas de variavel1, variavel2, variavel3, esperas que faça todo um projecto com prós e contras de cada solução?

Um ficheiro .ini tem uma sintaxe... mas não deixa de ser um ficheiro de texto... o json também tem uma sintaxe... mas não deixa de ser um ficheiro de texto...

O ATmega328, tem 2kB de RAM... logo fazer seja o que for com texto (quando na realidade apenas se pretende guardar variáveis em formato binário), e andar a converter texto e/ou comparar texto é um desperdício.
Claro que aqui entra o requisito que não foi referido de "estas variáveis tem de ser passíveis de ser alteradas com um computador"... mas como o mesmo não foi especificado, a solução de escrever para um ficheiro em formato binário ainda é a mais robusta.

Mas claro... eu só digo parvoíces e tu és o senhor que tudo sabe de microcontroladores, logo espero que ninguém ouça o que estou a dizer... e sinceramente que o próximo post de quem iniciou a thread não seja "o meu Arduino faz reset por ele próprio.".

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Evil-nox e bubulindo

obrigado pelas respostas

irei pesquisar sobre JSON



bubulindo

sobre a variável dia é apenas o que me interessa.

as outras variáveis são temperaturas, 

um exemplo é

q

if dia (>=0 e <=3) {

tempDesejada = variavel1
}

if dia (>=4 e <=7) {

tempDesejada = variavel2
}


assim por diante.

é um controle de temperatura diário q dependendo os dias rodando ele irá controlar para que fique em uma temperatura diferente.


e esses valores serão alterados pelo usuário quase sempre antes de iniciar o Arduino.

Por isso penso em um cartão SD e não EEPROM. 

Pensei em .INI pois estou acostumado a utilizar esses arquivos para configuração em Java.


eu não me expliquei melhor para o post não ficar muito longo.

mas agradeço novamente as informações




evil-noxx

Mas claro... eu só digo parvoíces e tu és o senhor que tudo sabe de microcontroladores, logo espero que ninguém ouça o que estou a dizer... e sinceramente que o próximo post de quem iniciou a thread não seja "o meu Arduino faz reset por ele próprio.".

Desta passa, mas que seja a ultima vez

E como vais saber que o dia está correcto? Ou que começa à meia noite?

As temperaturas são inicializadas pelo Arduino? Ou queres fazer isso directamente no cartão?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Desta passa, mas que seja a ultima vez
Que seja a última vez que... Quê?

Respondo na mesma medida ao que me dizem?

Tens cerca de 4000 posts dos meus para ver e perceber que quem vem aqui e dá informação acerca do que pretende e do que já tem feito, recebe sempre informação,e ajuda de volta. Agora, ao fim de tanto tempo, chateia quando alguém vem aqui, deixa uma mensagem meia critpica sem qualquer indicação do que pretende e temos de ser nós a pescar por informação.

Neste caso, não sei o que te levou a comentar acerca da inutilidade do meu post ou de estar pela metade... Que queres que faça, escreva aqui o código para guardar dados em binário?
Mas pronto, é impossível agradar a todos... Principalmente a quem julga que sabe mais.

Fica bem e até à próxima.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).


#14
Apr 08, 2015, 09:50 pm Last Edit: Apr 08, 2015, 09:56 pm by sombravarvas
E como vais saber que o dia está correcto? Ou que começa à meia noite?

As temperaturas são inicializadas pelo Arduino? Ou queres fazer isso directamente no cartão?
Esqueci de falar q alem do modulo SD tem o de RTC (SD1307). :)


o problema mesmo esta em manipular dados dentro de um arquivo no cartão SD


Eu estou pensando em fazer em arquivo.txt mesmo

estou lendo sobre a função

seekSet();  mas ainda não entendi, como ela funciona realmente para alterar a variável dentro do arquivo. 
Eu estou procurando um exemplo para fazer algu assim...

dados.txt
Code: [Select]

temp=18
dia=1
tempAtual=20



nesse caso, alterar apenas o valor 1 da variável dia. por outro que esta na variavel "calculoDia" q controla os dias do arduino ligado :)





Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy