- 2024-12-29
-
发表了主题帖:
【Follow me第二季第4期】任务提交
本帖最后由 xinz 于 2024-12-29 23:27 编辑
物料
所有任务使用的物料一致,在此统一说明;
全部物料清单:
物料名称
图片
Arduino Nano RP2040 Connect开发板
电脑(ubuntu20.04)
数据线
必做任务一
任务介绍
任务简介:搭建环境并开启Blink三色LED / 串口打印Hello DigiKey & EEWorld!
设计思路:首先在ubuntu上搭建arduino环境;然后在开发板点亮led,顺便串口打印过程信息,通过上位机监控。
软件流程图
Created with Rapha毛l 2.1.2开始设置LED的GPIO,模式为输出串口初始化,波特率为9600串口输出"Hello DigiKey & EEWorld!"蓝灯亮,串口打印"blue!",延时1s红灯亮,串口打印"red!",延时1s绿灯亮,串口打印"green!",延时1s
主要代码片段、功能展示及图文说明
搭建开发环境
最近装了一台ubunru电脑,刚好拿到任务,遂决定在ubuntu上体验一下开发arduino。
在ubuntu上安装arduino:官网下载了AppImage文件,勾选允许文件作为程序执行后双击,即可使用。
连接板子和电脑,找到串口,识别出板子,安装库,打开实例,点灯成功!工作里的单片机环境一个个老难伺候,arduino就是丝滑啊,管它占用 管它底层,好用就成!工程师的时间就不是成本吗?!看着小灯bulingbuling得闪还是很有意思的。再翻个串口的例程,编译,上传,打印!稍微改改,加上
Serial.println("Hello DigiKey & EEWorld!");
再把前面小灯的代码加上,上传!(编译也不用了,上传会自动编译的)好好好,第一个任务已经完成了,这。。(目瞪狗呆表情包)
到设置里改改,改成中文,字体调大,加上编译上传的输出信息,顺便看到了编译快捷键是Ctrl+r,上传快捷键是Ctrl+u,好好好,这下更舒服了,看着上传的进度条,赏心悦目。
看到还有RGB灯,遂想着把它也驱动。
安装库:驱动RGB需要安装一个库wifinina,详情可参考官方文档。安装库的时候可能会因为网络原因安装失败或者特别慢,我在这儿卡住了,安好久;尝试挂梯子改代理,失败;听闻网友拿手机有线共享网络给电脑可以,遂尝试,成功!前人的完成任务情况 。
点亮LED&串口打印
把示例代码揉一揉,差不多就出来啦,过程可以看流程图,代码如下:
#include <WiFiNINA.h>
void setup() {
pinMode(LEDR, OUTPUT);
pinMode(LEDG, OUTPUT);
pinMode(LEDB, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, LOW);
digitalWrite(LEDB, LOW);
Serial.begin(9600);
while (!Serial) {
;
}
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
Serial.println("Hello DigiKey & EEWorld!");
while (true){
digitalWrite(LEDB, HIGH);
Serial.println("blue!");
delay(1000);
digitalWrite(LEDB, LOW);
digitalWrite(LEDR, HIGH);
Serial.println("red!");
delay(1000);
digitalWrite(LEDR, LOW);
digitalWrite(LEDG, HIGH);
Serial.println("green!");
delay(1000);
digitalWrite(LEDG, LOW);
}
}
helloworld图片:
必做任务二:
任务介绍
项目简介:学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据;
设计思路:设计思路分为五步:初始化串口和 I2C 通信,验证传感器连接及 ID,配置加速度计和陀螺仪的量程与采样率,循环读取三轴数据(加速度与角速度),并通过串口输出调试信息。代码采用模块化设计,提供硬件错误检测与调试功能。
软件流程图
Created with Rapha毛l 2.1.2启动程序初始化串口通信 115200初始化 I2C 通信设置 I2C 时钟为 400kHz初始化 LSM6DSOX 传感器加速度计和陀螺仪是否启用成功?打印设备 ID 是否正确?打印设置加速度计量程设置陀螺仪量程设置加速度计采样率设置陀螺仪采样率进入循环是否有新的加速度数据?读取加速度数据打印加速度数据是否有新的陀螺仪数据?读取陀螺仪数据打印陀螺仪数据延时打印打印yesnoyesnoyesnoyesno
主要代码片段、功能展示及图文说明
代码如下:
#include "LSM6DSOXSensor.h"
LSM6DSOXSensor lsm6dsoxSensor = LSM6DSOXSensor(&Wire, LSM6DSOX_I2C_ADD_L);
void setup() {
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000);
lsm6dsoxSensor.begin();
if (lsm6dsoxSensor.Enable_X() == LSM6DSOX_OK && lsm6dsoxSensor.Enable_G() == LSM6DSOX_OK) {
Serial.println("Success enabling accelero and gyro");
} else {
Serial.println("Error enabling accelero and gyro");
}
uint8_t id;
lsm6dsoxSensor.ReadID(&id);
if (id != LSM6DSOX_ID) {
Serial.println("Wrong ID for LSM6DSOX sensor. Check that device is plugged");
} else {
Serial.println("Receviced correct ID for LSM6DSOX sensor");
}
lsm6dsoxSensor.Set_X_FS(2);
lsm6dsoxSensor.Set_G_FS(125);
lsm6dsoxSensor.Set_X_ODR(208.0f);
lsm6dsoxSensor.Set_G_ODR(208.0f);
}
void loop() {
// Read accelerometer
uint8_t acceleroStatus;
lsm6dsoxSensor.Get_X_DRDY_Status(&acceleroStatus);
if (acceleroStatus == 1) { // Status == 1 means a new data is available
int32_t acceleration[3];
lsm6dsoxSensor.Get_X_Axes(acceleration);
// Plot data for each axis in mg
Serial.print("AccelerationX="); Serial.print(acceleration[0]); Serial.print("mg, AccelerationY="); Serial.print(acceleration[1]); Serial.print("mg, AccelerationZ="); Serial.print(acceleration[2]); Serial.println("mg");
}
// Read gyroscope
uint8_t gyroStatus;
lsm6dsoxSensor.Get_G_DRDY_Status(&gyroStatus);
if (gyroStatus == 1) { // Status == 1 means a new data is available
int32_t rotation[3];
lsm6dsoxSensor.Get_G_Axes(rotation);
// Plot data for each axis in milli degrees per second
Serial.print("RotationX="); Serial.print(rotation[0]); Serial.print("mdps, RotationY="); Serial.print(rotation[1]); Serial.print("mdps, RotationZ="); Serial.print(rotation[2]); Serial.println("mdps");
}
delay(500);
}
串口打印图片:
必做任务三
任务简介:学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。
软件流程图
Created with Rapha毛l 2.1.2启动程序初始化串口通信 9600等待串口初始化完成设置 PDM 数据回调函数初始化 PDMPDM 是否初始化成功?进入主循环是否有新的音频样本?处理音频样本循环打印采集到的音频样本清除样本计数打印yesnoyes
主要代码片段、功能展示及图文说明
声音波形:
代码如下:
#include <MRI.h>
#include "LSM6DSOXSensor.h"
// Declare LSM6DSOX sensor. Sensor address can have 2 values LSM6DSOX_I2C_ADD_L (corresponds to 0x6A I2C address) or LSM6DSOX_I2C_ADD_H (corresponds to 0x6B I2C address)
// On Adafruit lsm6dsox sensor, LSM6DSOX_I2C_ADD_L is the default address
LSM6DSOXSensor lsm6dsoxSensor = LSM6DSOXSensor(&Wire, LSM6DSOX_I2C_ADD_L);
void setup() {
Serial.begin(115200);
Wire.begin();
// Default clock is 100kHz. LSM6DSOX also supports 400kHz, let's use it
Wire.setClock(400000);
// Init the sensor
lsm6dsoxSensor.begin();
// Enable accelerometer and gyroscope, and check success
if (lsm6dsoxSensor.Enable_X() == LSM6DSOX_OK && lsm6dsoxSensor.Enable_G() == LSM6DSOX_OK) {
Serial.println("Success enabling accelero and gyro");
} else {
Serial.println("Error enabling accelero and gyro");
}
// Read ID of device and check that it is correct
uint8_t id;
lsm6dsoxSensor.ReadID(&id);
if (id != LSM6DSOX_ID) {
Serial.println("Wrong ID for LSM6DSOX sensor. Check that device is plugged");
} else {
Serial.println("Receviced correct ID for LSM6DSOX sensor");
}
lsm6dsoxSensor.Set_X_FS(2);
lsm6dsoxSensor.Set_G_FS(125);
lsm6dsoxSensor.Set_X_ODR(208.0f);
lsm6dsoxSensor.Set_G_ODR(208.0f);
}
void loop() {
// Read accelerometer
uint8_t acceleroStatus;
lsm6dsoxSensor.Get_X_DRDY_Status(&acceleroStatus);
if (acceleroStatus == 1) { // Status == 1 means a new data is available
int32_t acceleration[3];
lsm6dsoxSensor.Get_X_Axes(acceleration);
// Plot data for each axis in mg
Serial.print("X="); Serial.print(acceleration[0]); Serial.print("mg, Y="); Serial.print(acceleration[1]); Serial.print("mg, Z="); Serial.print(acceleration[2]); Serial.println("mg");
}
// Read gyroscope
uint8_t gyroStatus;
lsm6dsoxSensor.Get_G_DRDY_Status(&gyroStatus);
if (gyroStatus == 1) { // Status == 1 means a new data is available
int32_t rotation[3];
lsm6dsoxSensor.Get_G_Axes(rotation);
// Plot data for each axis in milli degrees per second
Serial.print("X="); Serial.print(rotation[0]); Serial.print("mdps, Y="); Serial.print(rotation[1]); Serial.print("mdps, Z="); Serial.print(rotation[2]); Serial.println("mdps");
}
delay(500);
}
所有代码可到我的下载中心查看:https://bbs.eeworld.com.cn/my/home.php?cur=myhome&act=download
心得体会
习惯了裸开发单片机,猛得用arduino有种眩晕感:这就好了?虽然屏蔽了很多底层的细节,但是可以很快地验证一个方案是否可行,有舍有得吧,感觉还是值得的。想学一些新东西的时候,完全可以先调库爽一爽找找感觉,边用边学,再慢慢在其他板子上扣细节和底层。
-
加入了学习《任务提交》,观看 任务提交
-
上传了资料:
Follow me第二季第4期-任务二
-
上传了资料:
Follow me第二季第4期-任务一-helloworld!
-
上传了资料:
【Follow me第二季第4期】任务三-PDM打印声音波形,简单RGB显示
- 2024-12-28
-
加入了学习《 【Follow me第二季第4期】任务汇总》,观看 FM4