在本文中,我们将制作arduino天气时钟,它将告诉我们时间,日期和温度。 lm35传感器将为我们提供温度,ds3231将告诉我们日期和时间,我们将使用oled显示温度,日期和时间。
电路图
首先,将oled与arduino连接。 oled通过spi和i2c通信与arduino配合使用,但我们使用spi通信连接它。 arduino上的spi引脚分别为引脚8,9,10,11和13. oled与arduino的连接如下:
连接cs将oled连接到arduino的10个。
将oled的dc连接到arduino的第9针。
connect oled的res到arduino的第8针。
将oled的d1连接到arduino的第11针。
将oled的d0连接到arduino的引脚13.
将oled的vcc连接到arduino的5v引脚。
将oled的gnd连接到arduino的gnd引脚。
然后,将ds3231模块与arduino连接。 ds3231模块通过i2c通信与arduino配合使用。 arduino上用于i2c通信的引脚是sda和scl。按如下方式将ds3231模块连接到arduino:
将ds3231的gnd连接到arduino的gnd引脚。
将ds3231的vcc连接到arduino的5v引脚。
将oled的sda连接到arduino上的a4。
将oled上的scl连接到arduino上的a5引脚。
最后,将lm35传感器与arduino连接。将lm35的左侧引脚连接到arduino上的5v,中间引脚连接到arduino上的a0,左侧引脚连接到arduino上。
代码说明
首先,我们为ds3231模块和oled添加了库。与用于oled的其他库相比,oled的adafruit库具有更多功能。
#include#包括接下来,我们定义了连接ds3231模块和oled的引脚。 ds3231模块通过i2c通信与arduino配合使用,因此我们使用了arduino的sda和scl引脚。
oled通过spi通信与arduino配合使用。因此,我们初始化了用于spi通信的引脚8,9,10,11,13。之后,我们初始化了lm35传感器引脚和其他变量。
ds3231 rtc(sda,scl);
#define oled_mosi 11
#define oled_clk 13
#define oled_dc 9
#define oled_cs 10
#define oled_reset 8adafruit_ssd1306显示(oled_mosi,oled_clk,oled_dc,oled_reset,oled_cs);
const int sensor_pin = a0;
float temp;
float output;
在设置功能中,我们将lm35传感器引脚声明为输入,因为arduino将从传感器获取输入。然后我们将命令发送到ds3231和oled以开始与arduino通信。
pinmode(sensor_pin,input); rtc.begin(); display.begin(ssd1306_switchcapvcc); 以下行在代码中进行了注释,但如果您是第一次使用ds3231模块并且想要设置日期,日期和时间,则取消注释这些行并进行设置。
//rtc.setdow(星期三);//将星期设置为星期日//rtc.settime(19,02,0);//将时间设置为12:00:00(24小时格式)//rtc.setdate(7,12,1917);//将日期设置为2017年6月6日然后我们在oled上打印“天气时钟”5秒钟。
display.cleardisplay(); display.settextcolor(white); display。 settextsize(2); display.setcursor(0,0); display.print(“weather”); display.setcursor(0,17); display.print(“clock”); display.display(); delay(5000 ); 在循环函数中,我们从lm35读取并计算温度。然后我们得到时间和日期并打印在oled上。
output = analogread(sensor_pin); temp =(output * 500)/1023; display.cleardisplay(); display.settextsize(2); display .setcursor(20,0); display.print(rtc.gettimestr()); display.settextsize(1); display.setcursor(0,15); display.print(rtc.getdatestr()); display.settextsize( 1); display.setcursor(70,15); display.print(rtc.getdowstr());
完整的arduino代码
#include #include ds3231 rtc(sda,scl); #define oled_mosi 11 #define oled_clk 13 #define oled_dc 9 #define oled_cs 10#define oled_reset 8adafruit_ssd1306 display(oled_mosi,oled_clk,oled_dc,oled_reset,oled_cs); const int sensor_pin = a0; float temp; float output; void setup(){pinmode(sensor_pin,input); rtc.begin(); display.begin(ssd1306_switchcapvcc);//rtc.setdow(wednesday);//将星期设置为星期日//rtc.settime(19,02,0);//将时间设置为12:00:00(24小时格式)//rtc.setdate(7,12,1917);//将日期设置为6月6日,2017display.cleardisplay(); display.settextcolor(white); display.settextsize(2); display.setcursor(0,0); display.print(“weather”); display.setcursor (0,17); display.print(“clock”); display.display(); delay(5000);} void loop(){output = analogread(sensor_pin); temp =(output * 500)/1023; display .cleardisplay(); display.settextsize(2); display.setcursor(20,0); display.print(rtc.gettimestr()); display.settextsize(1); display.setcursor(0,15);显示。打印(rtc.getdatestr()); display.settextsize(1); display.setcursor(70,15); display.print(rtc.getdowstr()); display.settextsize(1); display.setcursor(20,25 ); display.print(“temp:”); display.print(temp); display.print(“c”); display.display();延迟(1000);}
OPPO Enco Free真无线耳机有哪些值得期待的地方
三大运营商同时参加TD-LTE测试
印制电路板设计中手工设计和自动设计相互对比
美国apex公司网站主页
为什么齐纳二极管可以做稳压管?
Arduino天气时钟的制作教程
涨幅惊人!爆iPad Pro OLED的价格可能涨价超5000元
直击现场 丨 西井科技参加第二十届上海知识产权国际论坛
5G技术难题仍是手机厂商需要克服的问题
了解不同类型的半导体封装
鲸吞电源管理IC厂Volterra,美信意欲何为?
APS计划排产软件提升企业精细化运营管控
2023上半年三星电子在华销售额大幅下降超12万亿韩元
MSP430仿真器使用常见问题
英特尔:AI×5G×智能边缘推动智能进入新的发展拐点
2020PC市场有哪些期待? 5G离PC还有些距离
Imagination与O3DF合作加速硬件产品开发
英飞凌推出用于物联网和流媒体设备的AIROC™ Wi-Fi 6/6E和Bluetooth® 5.2组合系列
中国电信携手京东集团在数字经济时代背景下加强“互联网+采购”合作
小米MIUI8、魅族Flyme6、EMUI5.0,哪个国产安卓最高水平?