使用DS18B20+OLED屏幕+Nano板子显示学号+姓名(中文取模)+温度
本文介绍了如何使用AI辅助工具(如deepseek)开发基于Arduino Nano、DS18B20温度传感器和0.96寸OLED屏的项目。主要内容包括:硬件连接配置(OLED通过I2C接口连接,DS18B20需加4.7K上拉电阻);代码框架搭建(使用Adafruit_GFX等必要库);中文显示实现(需预先取模生成字模数据);温度监测功能实现;以及多种动画效果设计(如滚动文字、状态机控制)。文章特
前言
作为一名嵌入式新手的情况下,我们该如何使用AI辅助帮助我们使用DS18B20+0.96OLED屏幕3.3v+Nano板子显示学号+姓名(中文取模)+温度+开机动画
提示:以下是本篇文章正文内容,下面案例可供参考
一、工具介绍
1.AI辅助工具:deepseek
2.IDE:arduino
3.硬件设备:DS18B20、0.96OLED屏幕(3.3v)、Nano核心开发板
4.任意中文取模工具或一些取模的在线网站
二、使用步骤
1.按照要求连线
OLED -> Arduino Nano
VCC -> 3.3V
GND -> GND
SDA -> A4
SCL -> A5
DS18B20 -> Arduino Nano
VCC -> 3.3V
GND -> GND
DATA -> D2 (需接4.7K上拉电阻)
2.在deepseek上先输入:使用DS18B20+0.96OLED屏幕3.3v+Nano板子显示学号+姓名(中文取模)+温度,并修改它的代码
代码如下(示例):
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// OLED配置
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// 温度传感器配置
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// 中文取模数据 (16x16像素)
const unsigned char a[] PROGMEM = {
//写入你自己的取模数据
};
//这里的取模数组不止一个
void setup() {
Serial.begin(9600);
// 初始化OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
// 初始化温度传感器
sensors.begin();
// 显示初始信息
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
// 显示学号
display.setCursor(0, 0);
display.println("ID: 20210001");//这里的学号更改成你自己的
// 显示姓名
display.setCursor(0, 20);
display.print("Name: ");
display.drawBitmap(48, 20, , 16, 16, WHITE); // 这里根据你自己的要求调节就好
// 显示温度标签
display.setCursor(0, 40);
display.print("Temperature: ");
display.display();
delay(2000);
}
void loop() {
// 获取温度
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// 清除温度显示区域
display.fillRect(0, 50, 128, 14, SSD1306_BLACK);
// 显示温度值
display.setCursor(0, 50);
display.print(tempC, 1);
display.print(" C");
display.display();
delay(1000); // 每秒更新一次
}
所需库:
Adafruit_GFX
Adafruit_SSD1306
OneWire
DallasTemperature
需要注意:第一:学号部分更改成你自己的。第二:姓名中文部分需要你自己取模并且将数据复制填入。第三:自己的姓名大小记得自己更改数字
3.显示效果如下
这里的姓名部分由于个人隐私问题我用方块代替。
4.接下来我们做动画部分(先确保你上面的姓名学号和温度都能显示正确)
把你已有的正确代码给deepseek,然后告诉它你想实现的动画部分的效果
比如:
学号滚动动画:
"ID: 20210001"在屏幕顶部上下滚动
滚动完成后进入下一动画状态
// 动画状态
enum AnimationState {
ID_ANIMATION,
NAME_LABEL_ANIMATION,
CHARACTER_SLIDE_ANIMATION,
TEMPERATURE_LABEL_ANIMATION,
TEMPERATURE_ANIMATION,
NORMAL_DISPLAY
};
AnimationState currentState = ID_ANIMATION;
// 动画参数
unsigned long lastUpdateTime = 0;
const int animationDelay = 50; // 动画帧延迟(ms)
// 学号动画
int idOffset = 0;
int idDirection = 1;
void animateID() {
// 学号滚动效果
display.setCursor(0, idOffset);
display.println("ID: 20210001");
idOffset += idDirection;
if (idOffset >= 10 || idOffset <= -5) {
idDirection *= -1;
}
// 切换到下一状态
if (idOffset == 0) {
currentState = NAME_LABEL_ANIMATION;
animationStep = 0;
}
}
按照这种方式你还可以给你的名字还有温度设置你想要的专属动画。这是一个很酷的东西,去用你的AI帮你实现吧。
总结
硬件连接配置
OLED屏幕连接Nano板: VCC接3.3V
GND接GND
SDA接A4
SCL接A5
DS18B20传感器连接: VCC接3.3V
GND接GND
DATA接D2(需加4.7K上拉电阻)
基础代码框架
安装必需库:
Adafruit_GFX
Adafruit_SSD1306
OneWire
DallasTemperature
核心代码结构:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
中文显示实现
使用取模工具生成16x16像素字模数据:
const unsigned char nameChar[] PROGMEM = {
0x00,0x40,0x00,0x80,0x01,0x00,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x10,
0x1F,0xF0,0x10,0x10,0x00,0x00,0x00,0x00
};
显示调用方法:
display.drawBitmap(x, y, nameChar, 16, 16, WHITE);
温度监测功能
传感器初始化和读取:
void setup() {
sensors.begin();
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
display.print(tempC, 1);
}
动画效果设计
状态机控制方案:
enum AnimState {
BOOT_ANIM,
SHOW_ID,
SHOW_NAME,
SHOW_TEMP
};
void handleAnimation() {
static unsigned long lastTime = 0;
if(millis() - lastTime > 100) {
switch(currentState) {
case BOOT_ANIM:
// 实现开机动画逻辑
break;
case SHOW_ID:
// 学号显示效果
break;
}
lastTime = millis();
}
}
滚动动画示例:
int scrollPos = 0;
void scrollText() {
display.fillRect(0,0,128,16,BLACK);
display.setCursor(0, scrollPos%16);
display.print("ID:20210001");
scrollPos++;
}
调试建议
硬件检查顺序:
先单独测试OLED显示英文文本
验证DS18B20温度读取数值
逐步添加中文显示和动画效果
常见问题处理:
屏幕无显示时检查I2C地址是否匹配
温度读数异常时检查上拉电阻连接
中文乱码时确认取模数据格式正确
通过AI辅助开发时,建议分模块验证功能,每次只添加一个新特性并进行测试。动画效果实现可先设计简单的移动效果,再逐步完善过渡动画。
更多推荐
所有评论(0)