LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Alentejo em 28 de Julho de 2009, 12:15
-
Ola bom dia!! eu gostaria que me podesem dar uma ajuda! Eu tou a tentar gravar um ficheiro no sd card e nesse ficheiro ter lá "Bom dia" e dps o consiga ver no hiperterminal!! Agradeço desde ja a vossa atensão!!abraços
-
http://www.roland-riegel.de/sd-reader/index.html
http://www.alfonsomartone.itb.it/kfmdxc.html
Pesquisa: http://www.google.pt/search?hl=pt-PT&q=read+sd+card+arduino&btnG=Pesquisa+do+Google&meta=&aq=f&oq=
-
Obrigado Ricardo!!Ja consigo escrever no cartao e ler atraves do hiperterminal!!Abraços
-
Obrigado Ricardo!!Ja consigo escrever no cartao e ler atraves do hiperterminal!!Abraços
naquilo que puder ir ajudando ;)
-
Ricardo sera possivel nós fazermos um ficheiro sem termos de o escrever no cartao? Isto é eu tou a utilizar o arduino onde tenho o sd card ligado a ele e queria por la ficheiros sem ter que os escrever no cartao!Obrigado
-
Ricardo sera possivel nós fazermos um ficheiro sem termos de o escrever no cartao? Isto é eu tou a utilizar o arduino onde tenho o sd card ligado a ele e queria por la ficheiros sem ter que os escrever no cartao!Obrigado
não entendi a pergunta...
queres por ficheiros no cartao sem ter de os escrever... nao entendo.
explica-te melhor...
-
As paginas que você me indicou eu consegui escrever e ler o conteudo de um ficheiro!!Mas esse ficheiro foi inserido por mim no proprio cartao do sd card!! O que eu pertendia era agora programar de modo a fazer ficheiros no sd card!! Percebeu?
-
Fiz esta montagem com o seguinte código:
#include <sd-reader_config.h>
#include <sd_raw.h>
#include <sd_raw_config.h>
int print_disk_info();
int sample();
int readDisk();
byte incomingByte;
void printWelcome();
long int address;
byte tempBytes[2];
void setup()
{
Serial.begin(9600);
delay(1000);
printWelcome();
if(!sd_raw_init())
{
Serial.println("MMC/SD initialization failed");
}
print_disk_info();
}
void loop()
{
int i;
if(Serial.available()>0)
{
incomingByte=Serial.read();
switch(incomingByte)
{
case 114:
readDisk();
break;
case 115:
sample();
break;
default:
break;
}
}
}
int sample()
{
int i,j;
int temp;
byte low;
byte high;
byte inByte;
Serial.println();
Serial.println();
Serial.println("Sampling..");
for(i=0;i<500;i=i+2)
{
if(Serial.available()>0)
{
inByte=Serial.read();
if(inByte==113) return 0;
}
temp=analogRead(0);
Serial.print(temp,DEC);
Serial.print(" ");
//Convert int to 2 bytes
low=temp&0xFF;
high=temp>>8;
// Serial.print(temp,DEC);
//Serial.print(low,DEC);
//Serial.print(high,DEC);
tempBytes[0]=low;
tempBytes[1]=high;
if(!sd_raw_write(i,tempBytes,2))
{
Serial.print("Write error");
}
//sd_raw_sync();
delay(5000);
Serial.println();
}
return 1;
}
int readDisk()
{
byte low;
byte high;
byte info[2];
int i;
int result;
Serial.println();
for(i=0;i<50;i=i+2)
{
sd_raw_read(i,info,2);
//Serial.print(info[0],DEC);
//Serial.print(" ");
//Serial.print(info[1],DEC);
low=info[0];
high=info[1];
result=high<<8;
//result<<8;
Serial.print(" ");
Serial.print(result+low,DEC);
Serial.print(" ");
}
}
void printWelcome()
{
Serial.println("------------------------");
Serial.println("Data sampling system");
Serial.println("send r to read disk");
Serial.println("send s to start sampling");
Serial.println("send q to stop sampling");
Serial.println("Ready.....");
Serial.println("-------------------------");
}
int print_disk_info()
{
struct sd_raw_info disk_info;
if(!sd_raw_get_info(&disk_info))
{
return 0;
}
Serial.println();
Serial.print("rev: ");
Serial.print(disk_info.revision,HEX);
Serial.println();
Serial.print("serial: 0x");
Serial.print(disk_info.serial,HEX);
Serial.println();
Serial.print("date: ");
Serial.print(disk_info.manufacturing_month,DEC);
Serial.println();
Serial.print(disk_info.manufacturing_year,DEC);
Serial.println();
Serial.print("size: ");
Serial.print(disk_info.capacity,DEC);
Serial.println();
Serial.print("copy: ");
Serial.print(disk_info.flag_copy,DEC);
Serial.println();
Serial.print("wr.pr.: ");
Serial.print(disk_info.flag_write_protect_temp,DEC);
Serial.print('/');
Serial.print(disk_info.flag_write_protect,DEC);
Serial.println();
Serial.print("format: ");
Serial.print(disk_info.format,DEC);
Serial.println();
Serial.print("free: ");
return 1;
}
Mas no entanto não consigo escrever nada no cartão SD porque mal inicio o HyperTerminal ele começa com o seguinte:
------------------------
Data sampling system
send r to read disk
send s to start sampling
send q to stop sampling
Ready.....
-------------------------
rev: 28
serial: 0x8F94BC8E
date: 1
7
size: 512229376
copy: 0
wr.pr.: 0/0
format: 0
free:
Sampling..
552
546
553
554
555
556
556
...e os números continuam e não param!!!
Alguém me pode dizer se isto é normal, caso não o que posso fazer para poder resolver esta situação?
-
Com o código que tens sim, é perfeitamente normal. Ele vai imprimir números cerca de 250 vezes, com 5 segundos de intervalo entre cada impressão:
for (i = 0; i < 500; i = i + 2)
{
(...)
temp = analogRead(0);
Serial.print(temp, DEC);
Serial.print(" ");
(...)
delay(5000);
Serial.println();
}
Só pára se carregares na tecla "q" minúscula (ascii 113; percebia-se logo se estivesse escrito 'q' em vez de 113), por causa desta parte:
if (Serial.available() > 0)
{
inByte = Serial.read();
if (inByte == 113) return 0;
}