Skip to content

Commit

Permalink
update workflows and example
Browse files Browse the repository at this point in the history
  • Loading branch information
Gitshaoxiang committed Dec 14, 2023
1 parent 568caa3 commit a38e2e4
Show file tree
Hide file tree
Showing 4 changed files with 257 additions and 2 deletions.
2 changes: 0 additions & 2 deletions .github/workflows/Arduino-Lint-Check.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
name: Arduino Lint Check
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
lint:
name: Lint Check
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# AtomS3 Library

[![Arduino Compile](https://github.com/m5stack/M5AtomS3/actions/workflows/arduino-action-atoms3-compile.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/arduino-action-stickc-plus-compile.yml)
[![Arduino Lint](https://github.com/m5stack/M5AtomS3/actions/workflows/Arduino-Lint-Check.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/Arduino-Lint-Check.yml)
[![Clang Format](https://github.com/m5stack/M5AtomS3/actions/workflows/clang-format-check.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/clang-format-check.yml)

English | [中文](README_cn.md)

<img src="https://static-cdn.m5stack.com/resource/docs/products/core/AtomS3/img-91894638-80df-4827-892e-cb8f50cf1041.jpg" alt="M5Atom Lite" width="350" height="350">
Expand Down
4 changes: 4 additions & 0 deletions README_cn.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# AtomS3 Library

[![Arduino Compile](https://github.com/m5stack/M5AtomS3/actions/workflows/arduino-action-atoms3-compile.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/arduino-action-stickc-plus-compile.yml)
[![Arduino Lint](https://github.com/m5stack/M5AtomS3/actions/workflows/Arduino-Lint-Check.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/Arduino-Lint-Check.yml)
[![Clang Format](https://github.com/m5stack/M5AtomS3/actions/workflows/clang-format-check.yml/badge.svg)](https://github.com/m5stack/M5AtomS3/actions/workflows/clang-format-check.yml)

中文 | [English](README_cn.md)

<img src="https://static-cdn.m5stack.com/resource/docs/products/core/AtomS3/img-91894638-80df-4827-892e-cb8f50cf1041.jpg" alt="M5Atom Lite" width="350" height="350">
Expand Down
249 changes: 249 additions & 0 deletions examples/AtomicBase/AtomicTFCard/AtomicTFCard.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
/**
* @file AtomicTFCard.ino
* @author SeanKwok ([email protected])
* @brief M5AtomS3 Atomic TFCard Base Test
* @version 0.1
* @date 2023-12-14
*
*
* @Hardwares: M5AtomS3 + Atomic TFCard Base + MicroSD Card
* @Platform Version: Arduino M5Stack Board Manager v2.0.9
* @Dependent Library:
* M5GFX: https://github.com/m5stack/M5GFX
* M5Unified: https://github.com/m5stack/M5Unified
* M5AtomS3: https://github.com/m5stack/M5AtomS3
*/

#include "M5AtomS3.h"
#include <Arduino.h>
#include <SPI.h>
#include "FS.h"
#include "SD.h"

#define SCK 7
#define MISO 8
#define MOSI 6

// Listing directory. 列出目录
void listDir(fs::FS &fs, const char *dirname, uint8_t levels) {
Serial.printf("Listing directory: %s\n", dirname);

File root = fs.open(dirname);
if (!root) {
Serial.println("Failed to open directory");
return;
}
if (!root.isDirectory()) {
Serial.println("Not a directory");
return;
}

File file = root.openNextFile();
while (file) {
if (file.isDirectory()) {
Serial.print(" DIR : ");
Serial.println(file.name());
if (levels) {
listDir(fs, file.name(), levels - 1);
}
} else {
Serial.print(" FILE: ");
Serial.print(file.name());
Serial.print(" SIZE: ");
Serial.println(file.size());
}
file = root.openNextFile();
}
}

// Creating Dir. 创建目录
void createDir(fs::FS &fs, const char *path) {
Serial.printf("Creating Dir: %s\n", path);
if (fs.mkdir(path)) {
Serial.println("Dir created");
} else {
Serial.println("mkdir failed");
}
}

// Removing Dir. 删除目录
void removeDir(fs::FS &fs, const char *path) {
Serial.printf("Removing Dir: %s\n", path);
if (fs.rmdir(path)) {
Serial.println("Dir removed");
} else {
Serial.println("rmdir failed");
}
}

// Reading file. 读取文件
void readFile(fs::FS &fs, const char *path) {
Serial.printf("Reading file: %s\n", path);

File file = fs.open(path);
if (!file) {
Serial.println("Failed to open file for reading");
return;
}

Serial.print("Read from file: ");
while (file.available()) {
Serial.write(file.read());
}
file.close();
}

// Writing file 写入文件
void writeFile(fs::FS &fs, const char *path, const char *message) {
Serial.printf("Writing file: %s\n", path);

File file = fs.open(path, FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing");
return;
}
if (file.print(message)) {
Serial.println("File written");
} else {
Serial.println("Write failed");
}
file.close();
}

// Appending to file 添加到文件
void appendFile(fs::FS &fs, const char *path, const char *message) {
Serial.printf("Appending to file: %s\n", path);

File file = fs.open(path, FILE_APPEND);
if (!file) {
Serial.println("Failed to open file for appending");
return;
}
if (file.print(message)) {
Serial.println("Message appended");
} else {
Serial.println("Append failed");
}
file.close();
}

// Renaming file 重命名文件
void renameFile(fs::FS &fs, const char *path1, const char *path2) {
Serial.printf("Renaming file %s to %s\n", path1, path2);
if (fs.rename(path1, path2)) {
Serial.println("File renamed");
} else {
Serial.println("Rename failed");
}
}

// Deleting file 删除文件
void deleteFile(fs::FS &fs, const char *path) {
Serial.printf("Deleting file: %s\n", path);
if (fs.remove(path)) {
Serial.println("File deleted");
} else {
Serial.println("Delete failed");
}
}

void testFileIO(fs::FS &fs, const char *path) {
File file = fs.open(path);
static uint8_t buf[512];
size_t len = 0;
uint32_t start = millis();
uint32_t end = start;
if (file) {
len = file.size();
size_t flen = len;
start = millis();
while (len) {
size_t toRead = len;
if (toRead > 512) {
toRead = 512;
}
file.read(buf, toRead);
len -= toRead;
}
end = millis() - start;
Serial.printf("%u bytes read for %u ms\n", flen, end);
file.close();
} else {
Serial.println("Failed to open file for reading");
}

file = fs.open(path, FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing");
return;
}

size_t i;
start = millis();
for (i = 0; i < 2048; i++) {
file.write(buf, 512);
}
end = millis() - start;
Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
file.close();
}
void setup() {
auto cfg = M5.config();
AtomS3.begin(cfg);

AtomS3.Display.setTextColor(GREEN);
AtomS3.Display.setTextDatum(middle_center);
AtomS3.Display.setTextFont(&fonts::FreeSerifItalic12pt7b);
AtomS3.Display.setTextSize(1);
AtomS3.Display.drawString("MicroSD", AtomS3.Display.width() / 2, 20);

SPI.begin(SCK, MISO, MOSI, -1);
if (!SD.begin()) {
Serial.println("Card Mount Failed");
return;
}
uint8_t cardType = SD.cardType();

if (cardType == CARD_NONE) {
Serial.println("No SD card attached");
return;
}

Serial.print("SD Card Type: ");
if (cardType == CARD_MMC) {
Serial.println("MMC");
} else if (cardType == CARD_SD) {
Serial.println("SDSC");
} else if (cardType == CARD_SDHC) {
Serial.println("SDHC");
} else {
Serial.println("UNKNOWN");
}

uint64_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.printf("SD Card Size: %lluMB\n", cardSize);

Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));

AtomS3.Display.drawString(String(SD.usedBytes() / (1024 * 1024)) + " / " +
String(SD.totalBytes() / (1024 * 1024)),
AtomS3.Display.width() / 2, 60);
AtomS3.Display.drawString("MB", AtomS3.Display.width() / 2, 100);

listDir(SD, "/", 0);
createDir(SD, "/mydir");
listDir(SD, "/", 0);
removeDir(SD, "/mydir");
listDir(SD, "/", 2);
writeFile(SD, "/hello.txt", "Hello ");
appendFile(SD, "/hello.txt", "World!\n");
readFile(SD, "/hello.txt");
deleteFile(SD, "/foo.txt");
renameFile(SD, "/hello.txt", "/foo.txt");
readFile(SD, "/foo.txt");
testFileIO(SD, "/test.txt");
}

void loop() {
}

0 comments on commit a38e2e4

Please sign in to comment.