Olá a todos, encontrei um código na net que é o que necessito porém sou iniciante nessa área e não estou conseguindo alterar para ampliar o código.

O código é para ler arquivos CSV em um cartão de memória e separar os valores que estão separados entre as virgulas e coloca-los em variáveis separadas.

Esse código foi escrito para ler e separar o primeiro campo e o segundo campo entre as virgulas criando uma variável com os dados do primeiro campo sendo X e o segundo campo como Y

O que esta dentro do cartão se parece com isso:

-5
-5
-5

230, -1, -1, -1, -1,
242, -1, -1, -1, -1,
254, -1, -1, -1, -1,
-5
-5
-5
-5
-1, -1, 0, -1, -1,
-1, -1, 63, -1, -1,
-1, -1, 127, -1, -1,
-1, -1, 190, -1, -1,
-1, -1, 254, -1, -1,
-5
-5
-5

O que eu pretendo alterar no código é para ler e criar mais variáveis em vez de só 2 e não estou conseguindo.

Tentei essas alterações mas não obtive exito.

//bool readVals(long* v1, long* v2) {
bool readVals(long* v1, long* v2, long* v3, long* v4) {

*******************************************************************

// long x, y;

long x, y, w, z;

*******************************************************************

while (readVals(&x, &y, &w, &z)) {
Serial.print("x: ");
Serial.println(x);
Serial.print("y: ");
Serial.println(y);
Serial.print("w: ");
Serial.println(w);
Serial.print("z: ");
Serial.println(z);
Serial.println();
}

*******************************************************************

Se alguém com mais experiencia puder ajudar ficarei muito grato.

 

Exibições: 440

Anexos

Responder esta

Respostas a este tópico

Esse codigo pode te ajudar, eu criei para remover e separar valores, teste ele primeiro para ver o funcionamento modifique e poste para vermos o resultado!!

{"L6":"0","L3":"0","L4":"1","L5":"0","L2":"0","L1":"1","ON":"1","E1":"1","E2":"1"}

segue o codigo: limpaJson.ino

String sincronizacao = "{\"TL\":70170,\"L1\":0,\"L2\":1,\"L3\":0,\"L4\":1,\"L5\":0,\"L6\":1,\"E1\":0,\"E2\":0}";

void setup() {
Serial.begin(115200);
sincroniza ();
}

void loop() {}

void sincroniza (){
Serial.println(sincronizacao);
//limpa o json, removendo:{"}
for (int i=0; i <sincronizacao.length();++i){
char c = sincronizacao.charAt(i);
if(c=='{'){sincronizacao.remove(i, 1);i--;}
if(c=='"')sincronizacao.remove(i, 1);
if(c=='}')sincronizacao.remove(i, 1);
}

Serial.println(sincronizacao);
sincronizacao = sincronizacao+",";
//Define variaveis e valores e seta os mesmo!!
int goOn = 1; int pos1=0; int pos2 = sincronizacao.length();
while( goOn == 1 ) {
pos1 = sincronizacao.lastIndexOf(",", pos2);
pos2 = sincronizacao.lastIndexOf(",", pos1 - 1);
if( pos2 <= 0 ) goOn = 0;
String tmp = sincronizacao.substring(pos2 + 1, pos1);
String nome = tmp.substring(0,tmp.indexOf(":"));
String valor = tmp.substring(tmp.indexOf(":")+1);

Serial.println("nome: " + nome + " valor: " + valor);
//comparaçoes como essa:
//if (nome == "L1")digitalWrite(L1, valor.toInt());

if( goOn != 1) break;

}
}

limpaJson.ino

Olá Thiago boa noite.

Muito obrigado, posso dar uma olhada amanhã sim.

Mas não sei se chegou a ver o código que o Elcids postou e o mesmo esta me servindo maravilhosamente bem.

Está servindo como uma luva pois estou usando com 16 variáveis ( 16 colunas do arquivo )

Muito obrigado 

Olá a todos.

Ainda não postei o resultado pois como iniciante enfrentei e estou enfrentando alguns problemas de iniciante kkkkk.

Mas aos poucos a coisa vai andando.

Primeiro logo após entender um pouco os pontos do código do Elcids eu comecei a alterá-lo ao ponto em que eu precisava.

Legal essa parte já entendi e deixei mais ou menos no jeito.

Ai veio a outra parte que é introduzir o modulo PWM ( PCA9685 ) e descobri que eu não poderia utilizar diretamente o valor que eu recebo que é de 0 a 254 ai começou a briga mas depois de muita pesquisa achei a função map.

Nesse ponto confesso que demorei um pouco para entender o funcionamento da função map mas no final entendi e consegui transformar de 0 a 254 em 100 a 520.

Acredito que amanhã a tarde já devo ter alguma coisa.

Mais uma vez muito obrigado a todos.

Olá pessoal, bom dia.

Estou trabalhando no código e já consegui até implementar o modulo PCA9685 e aparentemente está tudo funcionando  mas ainda estou enfrentando dificuldades em implementar uma rotina para manter o ultimo valor valido do csv.

Exemplo:

O arquivo sempre terá um valor valido de 0 a 254 para cada canal na primeira linha.

Ao receber o valor -1 a rotina teria que manter o ultimo valor recebido.

Ao receber o valor -16 a rotina deveria preencher a linha com todos os últimos valores validos.

Não estou sabendo como fazer.

Estou anexando o código original do Elcids o código que eu modifiquei e o arquivo csv.

Se alguém puder ajudar sou grato.

Onde estiver um monte de xxxx é a parte que modifiquei ou adicionei.

converter_CSV_02.ino

meu_csv.ino

teste.csv

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço