Arduino读写SD卡的例子
清单15-1 项目42的代码
//项目42
/
清单15-1 项目42的代码
//项目42
/
/sdfatlib的例子,Bill Greiman写的SD读写实例
#include <SdFat.h>
#include <SdFatUtil.h>
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
//在Flash存储器中存储错误字符串,节省RAM空间
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
PgmPrint("error: ");
#include <SdFat.h>
#include <SdFatUtil.h>
Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
//在Flash存储器中存储错误字符串,节省RAM空间
#define error(s) error_P(PSTR(s))
void error_P(const char* str) {
PgmPrint("error: ");
SerialPrintln_P(str);
if (Code()) {
PgmPrint("SD error: ");
Serial.Code(), HEX);
Serial.print(',');
Serial.Data(), HEX);
}
while(1);
}
//向文件写一个回车或换行符号
void writeCRLF(SdFile& f) {
f.write((uint8_t*)"\r\n", 2);
}
/
if (Code()) {
PgmPrint("SD error: ");
Serial.Code(), HEX);
Serial.print(',');
Serial.Data(), HEX);
}
while(1);
}
//向文件写一个回车或换行符号
void writeCRLF(SdFile& f) {
f.write((uint8_t*)"\r\n", 2);
}
/
/写一个无符号数到文件
void writeNumber(SdFile& f, uint32_t n) {
uint8_t buf[10];
uint8_t i = 0;
do {
i++;
buf[sizeof(buf) - i] = n%10 + '0';
n /= 10;
} while (n);
f.write(&buf[sizeof(buf) - i], i);
}
//写字符串到文件
void writeString(SdFile& f, char *str) {
uint8_t n;
void writeNumber(SdFile& f, uint32_t n) {
uint8_t buf[10];
uint8_t i = 0;
do {
i++;
buf[sizeof(buf) - i] = n%10 + '0';
n /= 10;
} while (n);
f.write(&buf[sizeof(buf) - i], i);
}
//写字符串到文件
void writeString(SdFile& f, char *str) {
uint8_t n;
for (n = 0; str[n]; n++);
f.write((uint8_t *)str, n);
}
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("Type any character to start");
while (!Serial.available());
//初始化SD卡在一半的通信速度避免使用面包板造成总线错误
//如果你的卡可以使用全速执行
if (!card.init(SPI_HALF_SPEED)) error("card.init failed");
//初始化FAT卷标
f.write((uint8_t *)str, n);
}
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("Type any character to start");
while (!Serial.available());
//初始化SD卡在一半的通信速度避免使用面包板造成总线错误
//如果你的卡可以使用全速执行
if (!card.init(SPI_HALF_SPEED)) error("card.init failed");
//初始化FAT卷标
if (!volume.init(&card)) error("volume.init failed");
//打开根目录
if (!root.openRoot(&volume)) error("openRoot failed");
//生成一个新文件
char name[] = "TESTFILE.TXT";
file.open(&root, name, O_CREAT | O_EXCL | O_WRITE);
//在这里放当天的日期时间
file.timestamp(2, 2010, 12, 25, 12, 34, 56);
//写10行数据到文件
for (uint8_t i = 0; i < 10; i++) {
writeString(file, "Line: ");
//打开根目录
if (!root.openRoot(&volume)) error("openRoot failed");
//生成一个新文件
char name[] = "TESTFILE.TXT";
file.open(&root, name, O_CREAT | O_EXCL | O_WRITE);
//在这里放当天的日期时间
file.timestamp(2, 2010, 12, 25, 12, 34, 56);
//写10行数据到文件
for (uint8_t i = 0; i < 10; i++) {
writeString(file, "Line: ");
writeNumber(file, i);
writeString(file, " Write test.");
writeCRLF(file);
}
//关闭文件并强制写所有数据到SD卡
file.close();
Serial.println("File Created");
//打开文件
if (file.open(&root, name, O_READ)) {
Serial.println(name);
}
else{
error("file.open failed");
writeString(file, " Write test.");
writeCRLF(file);
}
//关闭文件并强制写所有数据到SD卡
file.close();
Serial.println("File Created");
//打开文件
if (file.open(&root, name, O_READ)) {
Serial.println(name);
}
else{
error("file.open failed");
}
Serial.println();
int16_t character;
while ((character =&ad()) > 0) Serial.print((char)character);
Serial.println("\nDone");
}
void loop() { }
米多(68173331) 19:16:34
《Arduino从基础到实践》中的一个例子
Serial.println();
int16_t character;
while ((character =&ad()) > 0) Serial.print((char)character);
Serial.println("\nDone");
}
void loop() { }
米多(68173331) 19:16:34
《Arduino从基础到实践》中的一个例子
米多(68173331) 19:17:57
Arduino接互联网的例子
输入清单17-1中的代码。
清单17-1 项目46的代码
//项目46——David A. Mellis和 Tom Igoe编写的基于Arduino的网页服务器例子
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
//定义要用来从传感器中读取数据的数字引脚
#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 12
float tempC, tempF;
//生成一个oneWire实例连接任意单线设备(不仅仅是 Maxim/Dallas温度传感器)
OneWire oneWire(ONE_WIRE_BUS);
//传递oneWire引用给Dallas温度传感器
DallasTemperature sensors(&oneWire);
#include <OneWire.h>
#include <DallasTemperature.h>
//定义要用来从传感器中读取数据的数字引脚
#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 12
float tempC, tempF;
//生成一个oneWire实例连接任意单线设备(不仅仅是 Maxim/Dallas温度传感器)
OneWire oneWire(ONE_WIRE_BUS);
//传递oneWire引用给Dallas温度传感器
DallasTemperature sensors(&oneWire);
//存储元件地址的数组
DeviceAddress insideThermometer = { 0x10, 0x7A, 0x3B, 0xA9, 0x01, 0x08, 0x00, 0xBF };
DeviceAddress outsideThermometer = { 0x10, 0xCD, 0x39, 0xA9, 0x01, 0x08, 0x00, 0xBE};
byte mac[] = { 0x48, 0xC2, 0xA1, 0xF3, 0x8D, 0xB7 };
byte ip[] = { 192,168,0, 104 };
//建立80端口服务器
Server server(80);
void setup()
{
//开始Ethernet通信服务
Ethernet.begin(mac, ip);
server.begin();
//使用传感器
sensors.begin();
//设置精度
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
}
//从传感器中获得温度的函数
void getTemperature(DeviceAddress deviceAddress)
{
tempC =&TempC(deviceAddress);
tempF = DallasTemperature::toFahrenheit(tempC);
}
void loop()
//使用传感器
sensors.begin();
//设置精度
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
}
//从传感器中获得温度的函数
void getTemperature(DeviceAddress deviceAddress)
{
tempC =&TempC(deviceAddress);
tempF = DallasTemperature::toFahrenheit(tempC);
}
void loop()
{
questTemperatures();
//监听客户机的输入
Client client = server.available();
arduino字符串转数组 if (client) {
//从客户机发出的一个HTTP请求要结束于一个空行符号
boolean BlankLine = true;
while (ted()) {
if (client.available()) {
char c =&ad();
//如果行是空的并且行结尾是换行符 '\n',说明到了HTTP请求的结尾
if (c == '\n' && BlankLine) {
getTemperature(insideThermometer);
questTemperatures();
//监听客户机的输入
Client client = server.available();
arduino字符串转数组 if (client) {
//从客户机发出的一个HTTP请求要结束于一个空行符号
boolean BlankLine = true;
while (ted()) {
if (client.available()) {
char c =&ad();
//如果行是空的并且行结尾是换行符 '\n',说明到了HTTP请求的结尾
if (c == '\n' && BlankLine) {
getTemperature(insideThermometer);
client.println("HTTP/1.1 200 OK"); //标准HTTP响应
client.println("Content-Type: textml\n");
client.println("<html><head><META HTTP-EQUIV=""refresh""CONTENT= ""5"">\n");
client.println("<title>Arduino Web Server</title></head>");
client.println("<body>\n");
client.println("<h1>Arduino Web Server</h1>");
client.println("<h3>Internal Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
getTemperature(outsideThermometer);
client.println("<h3>External Temperature</h3>");
client.println("Content-Type: textml\n");
client.println("<html><head><META HTTP-EQUIV=""refresh""CONTENT= ""5"">\n");
client.println("<title>Arduino Web Server</title></head>");
client.println("<body>\n");
client.println("<h1>Arduino Web Server</h1>");
client.println("<h3>Internal Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
getTemperature(outsideThermometer);
client.println("<h3>External Temperature</h3>");
client.println("Temp C:");
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
break;
}
if (c == '\n') {
//开始一个新行
BlankLine = true;
}
else if (c != '\r') {
//有一个字符在当前行中
client.println(tempC);
client.println("<br/>");
client.println("Temp F:");
client.println(tempF);
client.println("<br/>");
break;
}
if (c == '\n') {
//开始一个新行
BlankLine = true;
}
else if (c != '\r') {
//有一个字符在当前行中
BlankLine = false;
}
}
}
//允许浏览器有时间接收数据
delay(10);
//停止客户机
client.stop();
}
}
}
}
}
//允许浏览器有时间接收数据
delay(10);
//停止客户机
client.stop();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论