Wio Terminal 显示和存储模拟数据

概述
此示例演示了如何使用折线图功能在 Wio Terminal 上显示 Grove 光传感器的读数,就像串口绘图器一样!此外,光传感器数据还会存储在 SD 卡中。
特性
- 读取光传感器数值并绘制成折线图
所需的 Arduino 库
Arduino 说明
-
强烈建议在尝试此示例代码之前先阅读 折线图。
-
下载
LightReadings.ino
文件并通过Arduino IDE
上传到您的 Wio Terminal。确保您已安装所有库。 -
改变周围环境的亮度,观察折线图中的变化!
-
模拟读数可以在 SD 卡的
Readings.txt
文件中找到
代码
- 初始化 LCD 和模拟端口

如我们所见,Wio Terminal 有两个 Grove 端口,一个是默认的 I2C 端口,另一个是可配置的数字 D0、D1 或模拟 A0 和 A1 端口,以及 UART 端口。在这种情况下,需要模拟端口,因此定义为模拟输入。
同时,按如下方式初始化 SD 卡:
#include <SPI.h>
#include <Seeed_FS.h>
#include "SD/Seeed_SD.h"
#include"seeed_line_chart.h" //include the library
File myFile;
TFT_eSPI tft;
TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
#define max_size 30 //maximum size of data
doubles data; //Initilising a doubles type to store data
int brightness;
void setup() {
Serial.begin(115200);
if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) {
Serial.println("initialization failed!");
while(1);
}
pinMode(A0, INPUT);
tft.begin();
tft.setRotation(3);
spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
}
- 读取传感器数值和加载数据
void loop() {
spr.fillSprite(TFT_WHITE);
brightness = analogRead(A0);
int brightness = analogRead(LIGHT); //读取光传感器数值
if (data.size() == max_size) {
data.pop();//用于移除第一个读取的变量
}
data.push(brightness); //存储光传感器数值
saveData(); //将数据保存到SD卡
...
}
- 标题配置
请参考折线图获取更多信息。
//折线图标题的设置
auto header = text(0, 0)
.value("Light Sensor Readings")
.align(center)
.valign(vcenter)
.width(tft.width())
.thickness(2);
header.height(header.font_height() * 2);
header.draw(); //标题高度是字体高度的两倍
- 折线图配置
请参考折线图获取更多信息。
//折线图的设置
auto content = line_chart(20, header.height()); //(x,y) 折线图开始的位置
content
.height(tft.height() - header.height() * 1.5) //折线图的实际高度
.width(tft.width() - content.x() * 2) //折线图的实际宽度
.based_on(0.0) //y轴的起始点,必须是浮点数
.show_circle(false) //在每个点绘制圆圈,默认是开启的。
.value(data) //将数据传递给折线图
.color(TFT_RED) //设置线条的颜色
.draw();
spr.pushSprite(0, 0);
- 将数据写入SD卡
请参考从SD卡读取/写入获取更多信息。
void saveData(){
myFile = SD.open("Readings.txt",FILE_APPEND);
brightness = analogRead(A0);
Serial.println(brightness);
myFile.println(brightness);
myFile.close();
}
完整代码
##include <SPI.h>
#include <Seeed_FS.h>
#include "SD/Seeed_SD.h"
#include"seeed_line_chart.h" //包含库文件
File myFile;
TFT_eSPI tft;
TFT_eSprite spr = TFT_eSprite(&tft); // Sprite
#define max_size 30 //数据的最大大小
doubles data; //初始化一个doubles类型来存储数据
int brightness;
void setup() {
Serial.begin(115200);
if (!SD.begin(SDCARD_SS_PIN, SDCARD_SPI)) {
Serial.println("initialization failed!");
while(1);
}
pinMode(A0, INPUT);
tft.begin();
tft.setRotation(3);
spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
}
void loop() {
spr.fillSprite(TFT_WHITE);
brightness = analogRead(A0);
if (data.size() == max_size) {
data.pop();//这用于移除第一个读取的变量
}
data.push(brightness); //读取变量并存储在data中
saveData();
//折线图标题的设置
auto header = text(0, 0)
.value("光传感器读数")
.align(center)
.valign(vcenter)
.width(tft.width())
.thickness(2);
header.height(header.font_height() * 2);
header.draw(); //标题高度是字体高度的两倍
//折线图的设置
auto content = line_chart(20, header.height()); //(x,y) 折线图开始的位置
content
.height(tft.height() - header.height() * 1.5) //折线图的实际高度
.width(tft.width() - content.x() * 2) //折线图的实际宽度
.based_on(0.0) //y轴的起始点,必须是浮点数
.show_circle(false) //在每个点绘制圆圈,默认是开启的。
.value(data) //将数据传递给折线图
.color(TFT_RED) //设置线条的颜色
.draw();
spr.pushSprite(0, 0);
}
void saveData(){
myFile = SD.open("Readings.txt",FILE_APPEND);
brightness = analogRead(A0);
Serial.println(brightness);
myFile.println(brightness);
myFile.close();
}