Commit 1d8c4ea5 authored by Béuren F. Bechlin's avatar Béuren F. Bechlin

Atualizado guia, faltando somente o exemplo de leitura e output na tela.

parent bc9dcd55
......@@ -11,12 +11,17 @@ http://cta.if.ufrgs.br
## Shield
---
---
## Programação
### Definicões e inclusões
Inicialmente inclua a biblioteca SD.h onde estará as funções e objetos necessários.
#include <SD.h>
```c++
#include <SD.h>
```
Então iremos definir as configurações do SPI (Serial Peripheral Interface). Por default usaremos:
......@@ -26,34 +31,160 @@ Então iremos definir as configurações do SPI (Serial Peripheral Interface). P
E ainda o para CS definiremos o pino 4.
#define CS_pin 4
```c++
#define CS_pin 4
```
### Inicializando comunicação
Ok, após essas definições de hardware poderemos prosseguir com o algoritmo para comunicação.
Para esse exemplo usaremos a comunicação serial com o computador para debug e mensagens.
void setup(){
// Iniciando comunicação serial
Serial.begin(9600);
// Mensagem de que está tentando iniciar a comunicação com cartão SD
Serial.print("Initializing SD card...");
```c++
#include <SD.h>
#define CS_pin 4
void setup(){
// Iniciando comunicação serial
Serial.begin(9600);
// Mensagem de que está tentando iniciar a comunicação com cartão SD
Serial.print("Initializing SD card...");
// Definindo o pino do CS como saída
// Além disso é necessário definir o pino 10, na maioria das placas Arduino, como saída
// ou pode haver problemas com as funções da biblioteca SD
pinMode(CS_pin, OUTPUT);
pinMode(10, OUTPUT);
// Definindo o pino do CS como saída
// Além disso é necessário definir o pino 10, na maioria das placas Arduino, como saída
// ou pode haver problemas com as funções da biblioteca SD
pinMode(CS_pin, OUTPUT);
pinMode(10, OUTPUT);
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println(" Card initialized.");
return;
}
Serial.println(" Card initialized.");
}
```
### Funções
Então, concluída a inicialização do cartão SD podemos manipulá-lo através das funções da biblioteca.
As funções mais usadas estão a seguir:
* SD.begin(cspin): inicializa a o cartão SD e a biblioteca no pino de comunicação *cspin* (chipselect). Returna TRUE caso sucesso e FALSE caso contrário.
* SD.exists(filename): verifica se o diretório ou arquivo *filename* existe, retornando TRUE caso sim e FALSE
caso contrário
* SD.open(filename, mode): abre o diretório ou arquivo *filename* do cartão SD com o modo identificado no segundo
argumento, podendo ser suprimido e então por default teremos o modo FILE_READ - byte. Em geral é atribuído um objeto
do tipo File para manipulação dos métodos da biblioteca. Além disso essa função cria o arquivo caso ele não exista.
1. FILE_READ: abre o arquivo como leitura, começando pelo início do arquivo.
2. FILE_WRITE: abre o arquivo como escrita, começando pelo fim do arquivo.
As próximas funções se referem a classe File, que é necessário para escrever/ler dados de arquivos.
```c++
File dataFile = SD.open("test/log.txt", FILE_WRITE);
```
* file.available(): checa se existe bytes (caracteres) para serem lidos do arquivo. Retorna o número de bytes disponíveis, int.
* file.write(data): escreve a *data* no arquivo, podendo ser byte, char, int ou string (char *). Retorna o número de bytes que
foram escritos.
* file.read(): lê um **único** byte do arquivo. Retorna o próximo byte (ou caracter) ou -1 se não haver mais caracteres a serem lidos.
Lembrando que para leitura de números é necessário um algoritmo para converter-los, já que a leitura é somente byte-a-byte.
* file.close(): fecha o arquivo e garante que todos os dados gravados anteriormente estão fisicamente salvos no cartão.
* file.size(): pega o tamanho do arquivo. Retorna o tamanho do arquivo em bytes.
* file.flush(): garante que todos os bytes escritos no arquivo serão salvos. Isso é feito automáticamente com *file.close()* mas
essa função não fecha a comunicação.
* file.position(): retorna a posição em que se encontra a leitura/escrita, análogo ao cursor, dentro do arquivo.
* file.seek(): determina a nova posição de leitura/escrita no arquivo. Deve estar entre 0 e o tamanho do arquivo(inclusive).
### Exemplos
#### Escrita
Exemplo simples de escrita um determinado arquivo.
```c++
#include <SD.h>
#define CS_pin 4
void setup(){
// Iniciando comunicação serial
Serial.begin(9600);
// Mensagem de que está tentando iniciar a comunicação com cartão SD
Serial.print("Initializing SD card...");
// Definindo o pino do CS como saída
// Além disso é necessário definir o pino 10, na maioria das placas Arduino, como saída
// ou pode haver problemas com as funções da biblioteca SD
pinMode(CS_pin, OUTPUT);
pinMode(10, OUTPUT);
// Verificando se é possível estabelecer comunicação
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println(" Card initialized.");
}
void loop(){
String dataString = " TESTING!!!";
// Abrindo arquivo
File dataFile = SD.open("test/log.txt", FILE_WRITE);
// Testando se o arquivo foi aberto com sucesso
if(dataFile){
dataFile.println(dataString);
dataFile.close();
Serial.println(dataString);
}
else{
Serial.println("Couldn't acess file.");
}
delay(1000);
}
```
#### Leitura
Exemplo da leitura de um arquivo e mostrando-o na tela através do serial.
```c++
#include <SD.h>
#define CS_pin 4
void setup(){
// Iniciando comunicação serial
Serial.begin(9600);
// Mensagem de que está tentando iniciar a comunicação com cartão SD
Serial.print("Initializing SD card...");
// Definindo o pino do CS como saída
// Além disso é necessário definir o pino 10, na maioria das placas Arduino, como saída
// ou pode haver problemas com as funções da biblioteca SD
pinMode(CS_pin, OUTPUT);
pinMode(10, OUTPUT);
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println(" Card initialized.");
}
void loop(){
DESENVOLVER
}
```
---
logo.png

48.7 KB

#include <SD.h>
#define CS_pin 10
//#define
#define CS_pin 4
void setup(){
// Iniciando comunicação serial
Serial.begin(9600);
// Mensagem de que está tentando iniciar a comunicação com cartão SD
Serial.print("Initializing SD card...");
// Definindo o pino do CS como saída
// Além disso é necessário definir o pino 10, na maioria das placas Arduino, como saída
// ou pode haver problemas com as funções da biblioteca SD
pinMode(CS_pin, OUTPUT);
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
pinMode(10, OUTPUT);
return;
// Verificando se é possível estabelecer comunicação
if (!SD.begin(CS_pin)) {
Serial.println("Card failed, or not present");
return;
}
Serial.println("card initialized.");
Serial.println(" Card initialized.");
}
void loop(){
String dataString = " TESTING!!!";
File dataFile = SD.open("log.txt", FILE_WRITE);
// Abrindo arquivo
File dataFile = SD.open("test/log.txt", FILE_WRITE);
// Testando se o arquivo foi aberto com sucesso
if(dataFile){
dataFile.println(dataString);
dataFile.close();
......@@ -27,8 +36,6 @@ void loop(){
}
else{
Serial.println("Couldn't acess file.");
}
}
delay(1000);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment