MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Arduinoの基礎 - SDカードのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Arduinoの基礎 - SDカード
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == SDライブラリ == ==== SDライブラリのインストール ==== Arduinoでは、SDライブラリは標準で組み込まれているためインストールは不要である。<br> <br> SDライブラリがインストールされているかどうかを確認する場合は、Arduino IDEのメイン画面から[ツール] - [ライブラリを管理]を選択して、検索欄で<u>"SD"</u>と検索する。<br> <u>"SD by Arduino"</u>ライブラリが既にインストールされているかどうかを確認する。<br> <br> ==== SDライブラリの注意点 ==== 全ての操作において、以下に示すような注意が必要である。<br> <br> * ファイル名は、8.3形式 (8文字 + 拡張子3文字) が推奨される。 * パスの区切りには、<code>/</code> (スラッシュ) を使用する。 * 書き込み操作の後は、必ず、<code>close</code>メソッドを実行する。 <br> ==== SDライブラリの使用 ==== <u>"SD.h"</u>をインクルードする。<br> <br> <syntaxhighlight lang="c++"> #include <SD.h> </syntaxhighlight> <br> ==== SDカードの初期化 ==== SDカードの初期化を行う。<br> なお、チップセレクトピンの指定は不要である。<br> <br> * 戻り値 ** true **: 初期化成功 ** false **: 初期化失敗 <br> <syntaxhighlight lang="c++"> if (!SD.begin()) { Serial.println("初期化失敗"); } </syntaxhighlight> <br> ==== ファイルまたはディレクトリの存在確認 ==== 指定されたファイルまたはディレクトリが存在するかどうかを確認する。<br> <br> <syntaxhighlight lang="c++"> SD.exists(const char *path) </syntaxhighlight> <br> * 引数 *: パス名 * 戻り値 ** true **: 存在する ** false **: 存在しない <br> <syntaxhighlight lang="c++"> // 使用例 if (SD.exists("data.txt")) { Serial.println("ファイルが存在します"); } </syntaxhighlight> <br> ==== ファイルのオープン ==== 指定されたファイルを開く。<br> <br> <syntaxhighlight lang="c++"> SD.open(const char *filename, uint8_t mode = FILE_READ) </syntaxhighlight> <br> * 引数 ** filename **: ファイル名 ** mode **: オープンモード (省略可) * FILE_READ ** 読み取り専用 (デフォルト) ** FILE_WRITE **: 読み書き可能 * 戻り値 *: Fileクラスのオブジェクト <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt", FILE_READ); </syntaxhighlight> <br> ==== ディレクトリの作成 ==== 新しいディレクトリを作成する。<br> <br> <syntaxhighlight lang="c++"> SD.mkdir(const char *path) </syntaxhighlight> <br> * 引数 *: 作成するディレクトリのパス * 戻り値 ** true **: 作成成功 ** false **: 作成失敗 <br> <syntaxhighlight lang="c++"> // 使用例 SD.mkdir("data_folder"); </syntaxhighlight> <br> ==== ファイル / ディレクトリの削除 ==== 指定されたファイルまたはディレクトリを削除する。<br> <br> <syntaxhighlight lang="c++"> SD.remove(const char *path) </syntaxhighlight> <br> * 引数 *: 削除対象のパス * 戻り値 ** true **: 削除成功 ** false **: 削除失敗 <br> <syntaxhighlight lang="c++"> // 使用例 SD.remove("old_data.txt"); </syntaxhighlight> <br> ==== ディレクトリの削除 (空のディレクトリのみ) ==== 空のディレクトリを削除する。<br> <br> <syntaxhighlight lang="c++"> SD.rmdir(const char *path) </syntaxhighlight> <br> * 引数 *: 削除するディレクトリのパス * 戻り値 ** true **: 削除成功 ** false **: 削除失敗 <br> <syntaxhighlight lang="c++"> // 使用例 SD.rmdir("hoge_directory"); </syntaxhighlight> <br> ==== Fileクラス ==== ===== 読み取り可能なバイト数の確認 ===== 読み取り可能な残りバイト数を返す。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.available() </syntaxhighlight> <br> * 戻り値 *: 読み取り可能なバイト数 (0の場合は読み取り終了) <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt"); while (dataFile.available()) { byte data = dataFile.read(); } </syntaxhighlight> <br> ===== 1バイトの読み取り ===== ファイルから1バイトのデータを読み取る。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.read() </syntaxhighlight> <br> * 戻り値 *: 読み取ったバイト値 (-1の場合は読み取り失敗) <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt"); int data = dataFile.read(); </syntaxhighlight> <br> ===== データの書き込み ===== ファイルにデータを書き込む。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.write(const uint8_t *buf, size_t size) </syntaxhighlight> <br> * 引数 ** buf **: 書き込むデータのバッファ ** size **: 書き込むバイト数 * 戻り値 *: 書き込んだバイト数 <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt"); byte data[] = {0x41, 0x42, 0x43}; dataFile.write(data, 3); </syntaxhighlight> <br> ===== ファイルサイズの取得 ===== ファイルサイズを返す。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.size() </syntaxhighlight> <br> * 戻り値 *: ファイルサイズ (バイト単位) <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt"); unsigned long fileSize = dataFile.size(); </syntaxhighlight> <br> ===== ファイルポインタの移動 ===== ファイル内の指定位置にポインタを移動する。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.seek(unsigned long pos) </syntaxhighlight> <br> * 引数 *: 移動先の位置 (バイトオフセット) * 戻り値 ** true **: 移動成功 ** false **: 移動失敗 <br> <syntaxhighlight lang="c++"> // 使用例 File dataFile = SD.open("data.txt"); // 100バイト目に移動 dataFile.seek(100); </syntaxhighlight> <br> ===== ファイルを閉じる ===== 開いているファイルを閉じる。<br> <br> なお、既に閉じているファイルに対して<code>close</code>メソッドを実行しても、エラーは発生しない。<br> ただし、ファイルが開いているかどうかを確認して後に<code>close</code>メソッドを実行することを推奨する。<br> <br> <syntaxhighlight lang="c++"> File dataFile = SD.open("data.txt"); dataFile.close() </syntaxhighlight> <br><br> == 使用例 : ファイルの読み込み == <syntaxhighlight lang="c++"> #include <SD.h> void setup() { Serial.begin(9600); while (!Serial); // シリアルポートの準備待ち // SDカードの初期化 if (!SD.begin()) { Serial.println("SDカードの初期化に失敗"); while (1); } // ファイルを開く File dataFile = SD.open("data.txt"); // 読み込むファイル名を指定 if (dataFile) { // ファイルの内容を読み込んでシリアルモニタに表示 while (dataFile.available()) { Serial.write(dataFile.read()); } dataFile.close(); } else { Serial.println("ファイルのオープンに失敗"); } } void loop() { // ...略 } </syntaxhighlight> <br><br> == 使用例 : ファイルの書き込み == <syntaxhighlight lang="c++"> #include <SD.h> File dataFile; void setup() { // シリアル通信の初期化 (9600[bps]) Serial.begin(9600); while (!Serial); // シリアルポートが準備できるまで待機 // SDカードの初期化処理 if (!SD.begin()) { Serial.println("SDカードの初期化に失敗"); while (1); // エラーが発生した場合は処理を停止 } Serial.println("SDカードの初期化に成功"); // ファイルを書き込みモードで開く // FILE_WRITEを指定する場合、ファイルが存在しない場合は新規作成されて、存在する場合は末尾に追記される dataFile = SD.open("data.txt", FILE_WRITE); if (dataFile) { Serial.println("ファイルのオープンに成功"); // ファイルにデータを書き込む dataFile.println("テストデータ1"); dataFile.println("テストデータ2"); // 数値データを書き込む場合 (例 : アナログピンの値を読み取る) int sensorValue = analogRead(A0); dataFile.print("センサー値: "); dataFile.println(sensorValue); // 日時データを書き込む場合 dataFile.print("書き込み時刻 : "); dataFile.print("2024/12/22 "); dataFile.println("15:30:00"); // ファイルを閉じる dataFile.close(); Serial.println("ファイルの書き込みが完了"); } else { // ファイルのオープンエラー Serial.println("ファイルのオープンに失敗"); } } void loop() { // 例1 : センサデータのロギング dataFile = SD.open("log.txt", FILE_WRITE); if (dataFile) { int value = analogRead(A0); dataFile.println(value); dataFile.close(); } delay(1000); // 1秒間隔でログを記録 // 例2 : RTCライブラリを使用してタイムスタンプを書き込む if (dataFile) { dataFile.print(now.timestamp()); dataFile.print(","); dataFile.println(sensorValue); dataFile.close(); } } </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Arduino]]
Arduinoの基礎 - SDカード
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse