Boa tarde pessoal,

Estou querendo pegar dados do sd card , que seria um arquivo txt normal , dois numeros, separados por virgula, e de alguma forma separar esses dois numeros em um array ou duas variaveis para que eu possa enviar para um servidor, tem como fazer essa varredura no txt e separar os dados?

Pessoal, alguem já fez algo do tipo?

obrigado!

Exibições: 2759

Responder esta

Respostas a este tópico

Opa, isso é fácil, você vai fazer a leitura dos dados similar ao de um arquivo csv.

Se voce tiver organizado os dados, separando eles melhor ainda, se eles tiverem todos grudados, você pode usar um substr para definir os campos.

Segue a referencia para ler o arquivo linha a linha.

http://www.melhorweb.com.br/artigo/704-Abrindo-arquivos-CSV-com-PHP...

luiz, perdão parceiro, mas a idéia é, acessar no arduino o sd card, abrir o txt, lá terá os seguintes numero:

24 ,  25  ,  26

23 ,  24  ,  24

o que queria, pegar exemplo na variavel valor:

valor = 24 e enviar

depois valor =25 e enviar

depois valor =26 e enviar

depois valor=23 e enviar assim até acabar os numeros...

*a parte de enviar estou sussegado*

é isso kkk Desculpa se não entendi muito bem o seu link hehe mas obrigado

Unhn, entendi. você não precisa de informações de data para manter um histórico nem nada?

Se for assim, ele sempre escreve essa quantidade de valores separados por virgula?

Se eu tiver entendido, e for isso, voce vai acessar os dados pelo arduino, quando essas informações estiverem na memória envie as informações utilizando a referencia desse outro link então: http://www.instructables.com/id/PART-1-Send-Arduino-data-to-the-Web...

Essa pessoa explicou bem como enviar os dados do arduino para uma variavel PHP, se essas informações que você exemplificou for uma matriz multidimensional, você pode pegar linha a linha, fazer um explode usando a virgula como limitador e gravar cada uma na posição desejada.

Porque a pior parte voce ja fez, agora é só passar as variaveis do arduino por metodo get ou post para a página PHP e tratar os dados e fazer deles o que bem entender.

eu estou tentando usar esse codigo:

/*
SD card read/write

This example shows how to read and write data to and from an SD card file
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** CLK - pin 13
** CS - pin 4

created Nov 2010
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe

This example code is in the public domain.

*/

#include <SPI.h>
#include <SD.h>

File myFile;

void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}


Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
pinMode(53, OUTPUT);

if (!SD.begin(4)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
/* myFile = SD.open("test.txt", FILE_WRITE);

// if the file opened okay, write to it:
if (myFile) {
Serial.print("Writing to test.txt...");
myFile.println("testing 1, 2, 3.");
// close the file:
myFile.close();
Serial.println("done.");
} else {
// if the file didn't open, print an error:
Serial.println("error opening test.txt");
}*/
String dado;
int i=0;

// re-open the file for reading:
myFile = SD.open("arquivo.txt");
if (myFile) {
Serial.println("arquivo.txt:");
// read from the file until there's nothing else in it:
while (myFile.available()) {
while (i<=4){
// Serial.write(myFile.read());
// Serial.write('1');
// Serial.write(myFile.seek(i));
dado += myFile.seek(i);
//Serial.println(myFile.peek());
// Serial.write( myFile.position());
}}
// close the file:
myFile.close();
Serial.print(dado);
} else {
// if the file didn't open, print an error:
Serial.println("error opening arquivo.txt");
}
}

void loop()
{
// nothing happens after setup
}

O QUE NAO ESTOU CONSEGUINDO É PEGAR ISSO NUMA VARIAVEL

no caso ele me mostraria isso que esta no sd card:

ele mostrarua dado = 32 \n

e depois eu queria saber como ele pula linha e pegaria o 2º numero que segue.

Cara, a linha que escreve dentro do arquivo é: myFile.println("testing 1, 2, 3.");

O conteúdo do seu sensor esta apenas aparecendo na tela, não está gravando no arquivo de texto.

Para você gravar o conteudo dos dados do sensor no arquivo vai precisar alterar para:

myFile.println(dado);

Para enviar os dados para o PHP vai precisar capturar as informações usando: variavel_para_PHP = myFile.read();

Coloque essas informações em uma variavel e envia pelo esquema do PHP usando o codigo, usei como exemplo "variavel_para_PHP":

#include <SPI.h>

#include <Ethernet.h>


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168, 254,8 };
byte server[] = { 192,168,254,4 };

// variaveis a serem usadas para gravação
int valor = 10;

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);

void setup() {
// start the Ethernet connection:
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(500);
Serial.print("connecting...");

// if you get a connection, report back via serial:
if (client.connect()) {

Serial.println("connected");
delay(00);
// Make a HTTP request:

}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}

void loop()
{
// if there are incoming bytes available
// from the server, read them and print them:
for (int i = 0; i < 3; i++){
if (client.connected()) {
client.print("GET http://servidor/pagina.php?dado_vindo_do_arduino=");
client.print(variavel_para_PHP);
client.print(" HTTP/1.1");
client.println();
}
}
Serial.println("disconnecting.");
client.stop();
for(;;)
;
}

Na sua página PHP, ela recebera por meio de querystring

usando:

Armazena a informação que vem do arduino em uma variavel de nome sugestivo que defini no codigo do arduino "dado_vindo_do_arduino"

<?php
   $variavel = $_GET['dado_vindo_do_arduino'];  //lendo a variavel enviada pelo arduino por get

//nesse ponto vou criar uma variavel $array, ela vai receber as informações do arduino, usando expressão regular para destrinchar a string em um array

$array = explode("\r\n", $variavel);

?>

Pronto, seus dados estão organizados no array, agora voce usa um laço e faz o que quiser com os dados que vieram do arduino.

Bom eu acho que é isso, vou até almoçar depois dessa, deu fome até, ehehehhehehe.

Boa sorte, espero que isso lhe ajude.

Luiz, vou te explicar , e desculpa se eu  nao to conseguindo passar o que realmente estou precisando. lembra os dados que tem no meu sd card: 

32 \n
23 \n
11 \n
11 \n
22 \n
33 \n
44 \n
55 \n
66 \n
77 \n
88 \n
99 \n
00 \n

bom, digamos que em determinado tempo que guardar o dado na linha 1 na variavel dado, entao:

dado = 32 \n

em determinado tempo eu quero pegar o dado na linha 2, e guardar tbm na variavel tbm, pq o dado que esta la antes o 32 \n ja foi despachado para o servidor, entao:

dado = 23 \n

e assim por diante ate chegar no ultimo dado.

Entendeu? eu quero abrir o sd, identificar as linhas e seus dados e guardar na variavel para manipula-las.

nada parceiro D:

a variavel variavel_para_PHP é de que tipo parceiro?

Eu não sei mais como te ajudar.

Sinto muito.

O que eu respondi na sexta devia ter funcionado.

Teoricamente o que eu quis dizer é que você abra o arquivo, copie todas as informações jogue dentro de uma variavel, passe ela por PHP usando o metodo GET e la dentro do PHP use a função explode, considerando que ele usa \n como delimitador de linha.

Deveria então servir para fazer um insert do vetor com os valores separados.

Parceiro?a variavel variavel_para_PHP é de que tipo parceiro?

att

Deve ser do tipo string mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço