229|0

47

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第4期】任务提交帖 [复制链接]

 

Hello大家好,我是空耳,非常高兴能参加这次的活动。

 

视频:【Follow me第二季第4期】Arduino® Nano RP2040 Connect活动项目总结

物料介绍

Nano RP2040 Connect  Nano RP2040 Connect | Arduino Documentation

 

Pico LCD 1.14 https://www.waveshare.com/wiki/Pico-LCD-1.14  

 

配置环境

这里采用Arduino开发环境

任务一

搭建环境并开启第一步Blink三色LED / 串口打印Hello DigiKey & EEWorld!

由于RGB led是连接在W-102模块上的,所以要控制led,需要先安装WiFiNINA库。

 

流程图:

 

全部代码如下:

#include <Adafruit_GFX.h>     // Core graphics library  
#include <Adafruit_ST7789.h>  // Hardware-specific library for ST7789  
#include <SPI.h>  
#include <WiFiNINA.h>  

#define TFT_CS  9        // Chip select control pin  
#define TFT_RST 7        // Reset pin (could connect to Arduino RESET pin)  
#define TFT_DC  8        // Data Command control pin  

#define TFT_MOSI 11  
#define TFT_SCLK 13  



Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);  

void setup(void) {  
  Serial.begin(115200);  
  Serial.print(F("Hello! ST7789 TFT Test"));  

  // Init LED RGB pins  
  pinMode(LEDR, OUTPUT);  
  pinMode(LEDG, OUTPUT);  
  pinMode(LEDB, OUTPUT);  

  // Turn off all LEDs initially  
  digitalWrite(LEDR, HIGH);  //RED
  digitalWrite(LEDG, HIGH);  //GREEN
  digitalWrite(LEDB, HIGH);  //BLUE

  // Initialize the TFT display  
  tft.init(135, 240);  // Init ST7789 240x135  
  tft.setRotation(3);  // Set rotation to horizontal  
  tft.fillScreen(ST77XX_BLACK); // Clear screen  

  Serial.println(F("Initialized"));  
  delay(1000);  
}  

void loop() {  
  // 串口打印  
  Serial.println("Hello DigiKey & EEWorld!");  

  // 清空屏幕  
  tft.fillScreen(ST77XX_BLACK);  

  // 使用红色显示文本  
  testdrawtext("Hello DigiKey & EEWorld!", ST77XX_RED);   
  digitalWrite(LEDR, HIGH);  
  digitalWrite(LEDG, LOW);  
  digitalWrite(LEDB, LOW);   
  delay(500);  

  // 使用绿色显示文本  
  testdrawtext("Hello DigiKey & EEWorld!", ST77XX_GREEN);  
  digitalWrite(LEDR, LOW);  
  digitalWrite(LEDG, HIGH);  
  digitalWrite(LEDB, LOW);   
  delay(500);  

  // 使用蓝色显示文本  
  testdrawtext("Hello DigiKey & EEWorld!", ST77XX_BLUE);   
  digitalWrite(LEDR, LOW);  
  digitalWrite(LEDG, LOW);  
  digitalWrite(LEDB, HIGH);  // BLUE LED on  
  delay(500);  
}  

// 显示文本的函数  
void testdrawtext(char *text, uint16_t color) {  
  tft.setCursor(0, 0); // 设置光标位置,适应横屏显示  
  tft.setTextColor(color); // 设置字体颜色  
  tft.setTextSize(3); // 设置文本大小  
  tft.setTextWrap(true); // 开启文本换行  
  tft.print(text); // 打印文本  
}

结果如下:

 

   

  视频:
VID_20241230_042039

任务二

学习IMU基础知识,调试IMU传感器,通过串口打印六轴原始数据。

本块开发板使用了STM的LSM6DSOXTR,具有3D数字加速度计和3D数字陀螺仪。需要额外安装一个库:LSM6DSOX

 

流程图:

 

源码:

#include <Arduino_LSM6DSOX.h>  

float Ax, Ay, Az; // 陀螺仪xyz轴数据  
float Gx, Gy, Gz; // 加速度计xyz轴数据  

void setup() {  
    Serial.begin(115200);  
    while (!Serial);  
    if (!IMU.begin()) {  
        Serial.println("Failed to initialize IMU!");  
        while (1);  
    }  
}  

void loop() {  
    if (IMU.accelerationAvailable()) {  
        IMU.readAcceleration(Ax, Ay, Az);  
        Serial.print("Acceleration: ");  
       
    }  
    if (IMU.gyroscopeAvailable()) {  
        IMU.readGyroscope(Gx, Gy, Gz);  
        Serial.print("Gyroscope: ");  
    }  
   printValues(Gx, Gy, Gz,Ax, Ay, Az); // 打印陀螺仪数据  
}  

void printValues(float gx, float gy, float gz,float ax, float ay, float az) {  
    Serial.print(gx);  
    Serial.print(',');  
    Serial.print(gy);  
    Serial.print(',');  
    Serial.print(gz); 
    Serial.print(','); 
    Serial.print(ax);  
    Serial.print(',');  
    Serial.print(ay);  
    Serial.print(',');  
    Serial.println(az); // 使用 println() 以避免手动添加换行  
}

结果展示:

 

视频:

VID_20241230_042644

任务三

学习PDM麦克风技术知识,调试PDM麦克风,通过串口打印收音数据和音频波形。

PDM麦克风,即采用脉冲密度调制(Pulse Density Modulation)技术的麦克风,是一种高效的数字音频信号处理方式,PDM麦克风的应用非常广泛,包括语音识别、音频采集、音频录制等领域。

流程图:

 

源码:

#include <PDM.h>  

static const char channels = 1; // 1个通道(单声道)  
static const int frequency = 16000; // 采样频率设置为16 kHz  
short sampleBuffer[512]; // 用于存储读取到的样本  
volatile int samplesRead = 0; // 使用volatile修饰,表示可被中断修改  

void setup() {  
    Serial.begin(115200);  
    while (!Serial);  

    PDM.onReceive(onPDMdata);  
    if (!PDM.begin(channels, frequency)) {  
        Serial.println("Failed to start PDM!");  
        while (1);  
    }  
}  

void loop() {  
    noInterrupts(); // 禁用中断  
    int samplesToRead = samplesRead; // 复制正在读取的样本数量  
    samplesRead = 0; // 重置样本计数  
    interrupts(); // 恢复中断  

    if (samplesToRead) {  
        for (int i = 0; i < samplesToRead; i++) {  
            Serial.println(sampleBuffer[i]); // 打印读取的样本  
        }  
    }  
}  

void onPDMdata() {  
    int bytesAvailable = PDM.available(); // 获取可用字节数  
    PDM.read(sampleBuffer, bytesAvailable); // 从 PDM 中读取字节到缓冲区  
    samplesRead = bytesAvailable / 2; // 每两个字节构成一个样本  
}

结果

 

视频:

VID_20241230_042827

心得体会

第一次接触arduino,感觉上手还挺容易的,就是不是很习惯,这个编译不知道为什么是真的慢,不知道是我的设置问题还是什么(这平台真没用过纯小白)。还有就是习惯了裸开发底层,对于这种调库的方式,虽然开发起来很快,但是容易造成对底层没有从分的了解,只有以后慢慢学习,慢慢深入。总的来说这一次的体验还是非常的不错,最后感谢eeworld和得捷举办的活动,我受益匪浅,希望以后能举办更多这样的活动!

 
所有任务源码: 任务提交.zip (2.78 KB, 下载次数: 3)
点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表