Arquivo .ini como variaveis

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

dia = 0

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

config1 = 0
config2 = 1

Agradeço desde ja pela atenção :wink:

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

Vê esta biblioteca:

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

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 :slight_smile:

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 ...

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.

essa biblioteca IniFile apenas pega os valores

eu necessito gravar tbm dados no arquivo .ini;

Alguem sabe como?

sombravarvas:
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.

bubulindo:
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: GitHub - bblanchon/ArduinoJson: 📟 JSON library for Arduino and embedded C++. Simple and efficient.

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}

evil-noxx:
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.".

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

bubulindo:
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?

evil-noxx:
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.

bubulindo:
Fica bem e até à próxima.

Beijo grande

bubulindo:
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). :slight_smile:

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

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 :slight_smile: