Arduino读写SD卡的例子

清单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: ");
  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);
}

/
/写一个无符号数到文件
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卷标
  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: ");
    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");
  }
  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);


//存储元件地址的数组
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()
{
  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("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') {
          //有一个字符在当前行中
          BlankLine = false;
        }
      }
    }
    //允许浏览器有时间接收数据
    delay(10);
    //停止客户机
    client.stop();
  }
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。