创客造 | 智能药盒
视频演示https://v.qq.com/x/page/j32264ktqrr.html
一、制作背景 在现实生活中,因遗忘没有按时服药的人很多,特别是老年人,他们不是忘了吃药就是不清楚吃几粒或什么时候吃,于是我就设计了这个服药提醒器,提醒他们服药的时间及服药的粒数。二、设计思路及功能 这个作品主要采用Arduino开发板、LED灯环、角度传感器、显示屏等设备制作而成。它的主要功能: 1、可以设置每种药的吃的数量、每天吃的次数以及饭前吃还是饭后吃等。 2、在OLED显示屏上显示每种药吃的次数,分别以早、中、晚等字样显示。 3、每种药吃得粒数及时间会在下面对应的LED灯上显示出来,饭前吃的从上部向下显示,吃几粒就亮几盏灯,灯光的颜色为绿色,饭后吃的从下部向上显示,吃几粒就亮几盏灯,灯光的颜色为蓝色。 4、为了节约用电,还设置了灯光和显示屏关闭的功能,通过旋转显示上的角度传感器来实现,往右旋转就关闭显示,往左转就打开显示效果。 5、闹钟功能,通过旋转闹钟上的角度传感器来实现闹钟的开启与关闭,转到左边开启闹钟,转到右边关门闹钟。如果开启了闹钟,那到了吃药时间,闹钟就会响起来。 6、为了区分吃了和未吃的药,我们可以按相应的按键,如吃了第一个格子中的药后,就按一下1号按键,那指示灯就会变暗,表示已吃了该药,在设定的时间亮度又会变亮回来。这里按了相应按键后也可以关闭闹钟,直到下次设定的闹钟时间。 7、此智能药盒还有配套的手机APP(Blynk),服药的各种设置自动同步到手机APP上,也可以在手机APP上远程对智能药盒进行设置,还可以在上面查看家人服药的情况。
三、硬件清单 掌控板 1 百灵鸽扩展板 1 8位WS28125050 RGB灯环 3 模拟角度传感器 2 杜邦线若干 椴木板切割部件
四、结构设计与搭建: 1、设计结构件图纸,并用激光切割机切割出来。
2、按下图把药盒组装起来。
3、把3个LED灯环分别固定在3个圆形的亚克力片上。
4、把两个角度传感器固定在面板的相应位置。
5、把灯环固定在面板上。
6、把掌控板的安装在面板相应位置。
7、把LED灯环和角度传感器与百灵鸽扩展板接好连线。
8、最后把面板固定在盒子上,这样安装部分就完成了。
五、程序编写 1、程序开始时运行一些初始化,如网络连接、连接到Blynk服务器、LED灯环设置等。程序截图如下:
2、智能药盒开机时要进行服药情况的设置,其中涉及到吃的粒数及吃的时间,它们是由两个角度传器来设置的,通过获取角度传感器的值来设置相应变量“药数量”、“药饭”的值,变量“药数量”、的值表示一次吃的粒数,“变量“药饭”如果为0表示饭前吃,为1表示饭后吃。程序截图如下:
3、按B按键2秒以上进入设置,先进行变量的初始化,再运行函数“设置”,函数“设置”的程序的作用是设置各种药的吃的粒数、时间及次数以及闹钟的设置,并把相应的数据传到Blynk服务器,这里只是列出了第一种药的设置程序,其它设置方法差不多,在这里就省略了。部分程序截图如下:
4、设置好后,通过读取P1上的角度传感器的值让屏幕显示服药情况信息或是闹钟设置情况或是关闭屏幕。显示服药信息程序中调用函数“药1”、“药2” 、“药3”的程序,函数“药1”、“药2” 、“药3”的程序基本相同,这里只列举了函数“药1”的程序,函数“药1”程序中主要是根据设置当中服药粒数、时间、次数的值让它们在显示屏相应位置显示出来,并让LED灯环的灯亮不同的颜色来指示吃几粒,饭前还是饭后吃,LED灯亮几颗就表示吃几粒,如果饭前吃就亮绿色,并从上部往下亮,如果饭后吃就亮蓝色,从下部往上亮。其中“时钟”函数是显示当前时间以及设置中设置的闹钟时间。程序截图如下:
5、当某种药吃了,我们可以通过按掌控板上的P、Y、T触摸键使LED指示亮变暗,表示该药已吃了,并把相应的信息发送给Blynk服务器,而到了一天当中的5点钟、9点钟和15点钟时,让LED亮度恢复原样,提供给下一时间段服药查看。 “闹钟”函数的作用是通过检测P2上的角度传感器的值来判断闹钟功能是否开启,并把相应的信息发送给Blynk服务器,如果开启了,那到指定的闹钟时间运行Blynk定时器中的程序。程序截图如下:
6、如果在手机BlynkAPP中对设置进行了更改,就需要读取相应的数据,程序截图如下:
7、由于整个程序比较长,所以全部程序用代码来呈现。全部代码如下:/*!
* MindPlus
* mpython
*
*/
#include <WiFi.h>
#include <MPython.h>
#include <TimeLib.h>
#include <WiFiClient.h>
#define BLYNK_PRINT Serial
#include <DFRobot_NeoPixel.h>
#include <BlynkSimpleEsp32.h>
#include <WidgetRTC.h>
// 动态变量
String mind_s_Yao1ShiJian, mind_s_Yao2ShiJian, mind_s_Yao3ShiJian, mind_s_YaoShiJian;
volatile float mind_n_Yao1ShuLiang, mind_n_Yao1Fan, mind_n_Yao2ShuLiang, mind_n_Yao2Fan,
mind_n_Yao3ShuLiang, mind_n_Yao3Fan, mind_n_SheZhi, mind_n_YaoFan,
mind_n_YaoShuLiang, mind_n_XianShi, mind_n_NaoZhong1, mind_n_NaoZhong2,
mind_n_NaoZhong3, mind_n_NaoZhong4, mind_n_NaoZhong5, mind_n_NaoZhong6,
mind_n_NaoZhongKaiGuan, mind_n_Yao1FuYaoZhuangTai, mind_n_Yao2FuYaoZhuangTai,
mind_n_Yao3FuYaoZhuangTai, mind_n_ShiZhongXianShi;
// 函数声明
void DF_YaoShuLiangDuQu();
void DF_FanQianFanHou();
void DF_Yao1();
void DF_Yao2();
void DF_Yao3();
void DF_NaoZhong();
void DF_SheZhi();
void DF_ShiZhong();
void myTimerEvent1();
// 创建对象
DFRobot_NeoPixel neoPixel_P13;
DFRobot_NeoPixel neoPixel_P14;
DFRobot_NeoPixel neoPixel_P15;
WidgetLED ledV16(V16);
WidgetLED ledV17(V17);
WidgetLED ledV18(V18);
WidgetRTC rtc;
BlynkTimer timer;
// 主程序开始
void setup() {
mPython.begin();
Serial.begin(9600);
Blynk.connectWiFi("zmg", "123456789");
Blynk.config("BO5a5saSNfm7GvfKI25MafRNjo8DFy9Q", "blynk.mixly.org", 8080);
setSyncInterval(10 * 60);
timer.setInterval(1000L, myTimerEvent1);
display.setCursor(20, 20);
display.print("正在连接Wi-Fi");
delay(1000);
delay(1000);
display.fillScreen(0);
display.setCursor(30, 20);
display.print("Wi-Fi 已连接");
mind_n_Yao1ShuLiang = 0;
mind_n_Yao1Fan = 0;
mind_s_Yao1ShiJian = "";
mind_n_Yao2ShuLiang = 0;
mind_n_Yao2Fan = 0;
mind_s_Yao2ShiJian = "";
mind_n_Yao3ShuLiang = 0;
mind_n_Yao3Fan = 0;
mind_s_Yao3ShiJian = "";
mind_n_SheZhi = 0;
mind_n_YaoFan = 0;
mind_n_YaoShuLiang = 0;
mind_n_XianShi = 0;
mind_n_NaoZhong1 = 0;
mind_n_NaoZhong2 = 0;
mind_n_NaoZhong3 = 0;
mind_n_NaoZhong4 = 0;
mind_n_NaoZhong5 = 0;
mind_n_NaoZhong6 = 0;
mind_n_NaoZhongKaiGuan = 0;
mind_n_Yao1FuYaoZhuangTai = 0;
mind_n_Yao2FuYaoZhuangTai = 0;
mind_n_Yao3FuYaoZhuangTai = 0;
mind_s_YaoShiJian = "";
neoPixel_P13.begin(P13, 8);
neoPixel_P13.setBrightness(255);
neoPixel_P13.clear();
neoPixel_P14.begin(P14, 8);
neoPixel_P14.setBrightness(255);
neoPixel_P14.clear();
neoPixel_P15.begin(P15, 8);
neoPixel_P15.setBrightness(255);
neoPixel_P15.clear();
display.fillScreen(0);
display.setCursor(33, 0);
display.print("智能药盒");
display.setCursor(0, 16);
display.print("药1:");
display.setCursor(0, 32);
display.print("药2:");
display.setCursor(0, 48);
display.print("药3:");
ledV16.setColor("#2550000");
ledV16.off();
ledV17.setColor("#2550000");
ledV17.off();
ledV18.setColor("#2550000");
ledV18.off();
}
void loop() {
Blynk.run();
DF_NaoZhong();
if ((mind_n_SheZhi==0)) {
if (((analogRead(P1))<1400)) {
if (((mind_n_XianShi==0) || (mind_n_XianShi==2))) {
mind_n_XianShi = 1;
}
}
else if ((2000<(analogRead(P1)))) {
if (((mind_n_XianShi==1) || (mind_n_XianShi==2))) {
mind_n_XianShi = 0;
}
}
else {
mind_n_XianShi = 2;
}
if ((mind_n_XianShi==2)) {
if ((mind_n_ShiZhongXianShi==0)) {
display.fillScreen(0);
mind_n_ShiZhongXianShi = 1;
}
DF_ShiZhong();
}
else if ((mind_n_XianShi==1)) {
mind_n_ShiZhongXianShi = 0;
display.fillScreen(0);
display.setCursor(33, 0);
display.print("智能药盒");
display.setCursor(0, 16);
display.print("药1:");
display.setCursor(0, 32);
display.print("药2:");
display.setCursor(0, 48);
display.print("药3:");
if ((mind_n_Yao1ShuLiang>0)) {
neoPixel_P13.clear();
DF_Yao1();
}
else {
neoPixel_P13.clear();
}
if ((mind_n_Yao2ShuLiang>0)) {
neoPixel_P14.clear();
DF_Yao2();
}
else {
neoPixel_P14.clear();
}
if ((mind_n_Yao3ShuLiang>0)) {
neoPixel_P15.clear();
DF_Yao3();
}
else {
neoPixel_P15.clear();
}
mind_n_XianShi += 2;
}
else if ((mind_n_XianShi==0)) {
display.fillScreen(0);
neoPixel_P13.clear();
neoPixel_P14.clear();
neoPixel_P15.clear();
mind_n_XianShi += 3;
}
else {
}
}
if ((touchPadP.isTouched())) {
if ((mind_n_Yao1FuYaoZhuangTai==0)) {
mind_n_Yao1FuYaoZhuangTai = 1;
ledV16.setColor("#0025500");
ledV16.on();
neoPixel_P13.setBrightness(10);
}
else {
mind_n_Yao1FuYaoZhuangTai = 0;
neoPixel_P13.setBrightness(255);
ledV16.setColor("#2550000");
ledV16.on();
}
delay(1000);
}
if ((touchPadY.isTouched())) {
if ((mind_n_Yao2FuYaoZhuangTai==0)) {
mind_n_Yao2FuYaoZhuangTai = 1;
ledV17.setColor("#0025500");
ledV17.on();
neoPixel_P14.setBrightness(10);
}
else {
mind_n_Yao2FuYaoZhuangTai = 0;
neoPixel_P14.setBrightness(255);
ledV17.setColor("#2550000");
ledV17.on();
}
delay(1000);
}
if ((touchPadT.isTouched())) {
if ((mind_n_Yao3FuYaoZhuangTai==0)) {
mind_n_Yao3FuYaoZhuangTai = 1;
neoPixel_P15.setBrightness(10);
ledV18.setColor("#0025500");
ledV18.on();
}
else {
mind_n_Yao3FuYaoZhuangTai = 0;
ledV18.setColor("#2550000");
ledV18.on();
neoPixel_P15.setBrightness(255);
}
delay(1000);
}
if ((buttonB.isPressed())) {
delay(2000);
if ((buttonB.isPressed())) {
mind_n_SheZhi = 1;
mind_n_Yao1ShuLiang = 0;
mind_n_Yao1Fan = 0;
mind_s_Yao1ShiJian = "";
mind_n_Yao2ShuLiang = 0;
mind_n_Yao2Fan = 0;
mind_s_Yao2ShiJian = "";
mind_n_Yao3ShuLiang = 0;
mind_n_Yao3Fan = 0;
mind_s_Yao3ShiJian = "";
mind_n_SheZhi = 0;
mind_n_YaoFan = 0;
mind_n_YaoShuLiang = 0;
mind_n_XianShi = 0;
mind_s_YaoShiJian = "";
DF_SheZhi();
}
}
if (((((hour()==5) || (hour()==9)) || (hour()==15)) && (minute()==0))) {
neoPixel_P13.setBrightness(255);
neoPixel_P14.setBrightness(255);
neoPixel_P15.setBrightness(255);
}
}
// 自定义函数
void DF_YaoShuLiangDuQu() {
if (((analogRead(P2))<100)) {
mind_n_YaoShuLiang = 0;
}
else if (((analogRead(P2))<600)) {
mind_n_YaoShuLiang = 1;
}
else if (((analogRead(P2))<1100)) {
mind_n_YaoShuLiang = 2;
}
else if (((analogRead(P2))<1600)) {
mind_n_YaoShuLiang = 3;
}
else if (((analogRead(P2))<2100)) {
mind_n_YaoShuLiang = 4;
}
else if (((analogRead(P2))<2600)) {
mind_n_YaoShuLiang = 5;
}
else if (((analogRead(P2))<3100)) {
mind_n_YaoShuLiang = 6;
}
else if (((analogRead(P2))<3600)) {
mind_n_YaoShuLiang = 7;
}
else {
mind_n_YaoShuLiang = 8;
}
}
void DF_FanQianFanHou() {
if (((analogRead(P1))<1900)) {
mind_n_YaoFan = 0;
}
else {
mind_n_YaoFan = 1;
}
}
void DF_Yao1() {
if ((mind_n_Yao1Fan==0)) {
if ((mind_n_Yao1ShuLiang==1)) {
neoPixel_P13.setRangeColor(0, 0, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==2)) {
neoPixel_P13.setRangeColor(0, 1, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==3)) {
neoPixel_P13.setRangeColor(0, 1, 0x00FF00);
neoPixel_P13.setRangeColor(7, 7, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==4)) {
neoPixel_P13.setRangeColor(0, 1, 0x00FF00);
neoPixel_P13.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==5)) {
neoPixel_P13.setRangeColor(0, 2, 0x00FF00);
neoPixel_P13.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==6)) {
neoPixel_P13.setRangeColor(0, 2, 0x00FF00);
neoPixel_P13.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==7)) {
neoPixel_P13.setRangeColor(0, 3, 0x00FF00);
neoPixel_P13.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao1ShuLiang==8)) {
neoPixel_P13.setRangeColor(0, 7, 0x00FF00);
}
}
else {
if ((mind_n_Yao1ShuLiang==1)) {
neoPixel_P13.setRangeColor(4, 4, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==2)) {
neoPixel_P13.setRangeColor(4, 5, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==3)) {
neoPixel_P13.setRangeColor(3, 5, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==4)) {
neoPixel_P13.setRangeColor(3, 6, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==5)) {
neoPixel_P13.setRangeColor(2, 6, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==6)) {
neoPixel_P13.setRangeColor(2, 7, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==7)) {
neoPixel_P13.setRangeColor(1, 7, 0x0000FF);
}
else if ((mind_n_Yao1ShuLiang==8)) {
neoPixel_P13.setRangeColor(0, 7, 0x0000FF);
}
}
display.setCursor(0, 16);
display.print("药1:");
display.setCursor(30, 16);
display.print(mind_n_Yao1ShuLiang);
if ((mind_n_Yao1Fan==0)) {
display.setCursor(45, 16);
display.print("饭前");
}
else {
display.setCursor(45, 16);
display.print("饭后");
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(80, 16);
display.print("早");
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(95, 16);
display.print("中");
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(110, 16);
display.print("晚");
}
}
void DF_Yao2() {
if ((mind_n_Yao2Fan==0)) {
if ((mind_n_Yao2ShuLiang==1)) {
neoPixel_P14.setRangeColor(0, 0, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==2)) {
neoPixel_P14.setRangeColor(0, 1, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==3)) {
neoPixel_P14.setRangeColor(0, 1, 0x00FF00);
neoPixel_P14.setRangeColor(7, 7, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==4)) {
neoPixel_P14.setRangeColor(0, 1, 0x00FF00);
neoPixel_P14.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==5)) {
neoPixel_P14.setRangeColor(0, 2, 0x00FF00);
neoPixel_P14.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==6)) {
neoPixel_P14.setRangeColor(0, 2, 0x00FF00);
neoPixel_P14.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==7)) {
neoPixel_P14.setRangeColor(0, 3, 0x00FF00);
neoPixel_P14.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao2ShuLiang==8)) {
neoPixel_P14.setRangeColor(0, 7, 0x00FF00);
}
}
else {
if ((mind_n_Yao2ShuLiang==1)) {
neoPixel_P14.setRangeColor(4, 4, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==2)) {
neoPixel_P14.setRangeColor(4, 5, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==3)) {
neoPixel_P14.setRangeColor(3, 5, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==4)) {
neoPixel_P14.setRangeColor(3, 6, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==5)) {
neoPixel_P14.setRangeColor(2, 6, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==6)) {
neoPixel_P14.setRangeColor(2, 7, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==7)) {
neoPixel_P14.setRangeColor(1, 7, 0x0000FF);
}
else if ((mind_n_Yao2ShuLiang==8)) {
neoPixel_P14.setRangeColor(0, 7, 0x0000FF);
}
}
display.setCursor(0, 32);
display.print("药2:");
display.setCursor(30, 32);
display.print(mind_n_Yao2ShuLiang);
if ((mind_n_Yao2Fan==0)) {
display.setCursor(45, 32);
display.print("饭前");
}
else {
display.setCursor(45, 32);
display.print("饭后");
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(80, 32);
display.print("早");
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(95, 32);
display.print("中");
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(110, 32);
display.print("晚");
}
}
void DF_Yao3() {
if ((mind_n_Yao3Fan==0)) {
if ((mind_n_Yao3ShuLiang==1)) {
neoPixel_P15.setRangeColor(0, 0, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==2)) {
neoPixel_P15.setRangeColor(0, 1, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==3)) {
neoPixel_P15.setRangeColor(0, 1, 0x00FF00);
neoPixel_P15.setRangeColor(7, 7, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==4)) {
neoPixel_P15.setRangeColor(0, 1, 0x00FF00);
neoPixel_P15.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==5)) {
neoPixel_P15.setRangeColor(0, 2, 0x00FF00);
neoPixel_P15.setRangeColor(6, 7, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==6)) {
neoPixel_P15.setRangeColor(0, 2, 0x00FF00);
neoPixel_P15.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==7)) {
neoPixel_P15.setRangeColor(0, 3, 0x00FF00);
neoPixel_P15.setRangeColor(5, 7, 0x00FF00);
}
else if ((mind_n_Yao3ShuLiang==8)) {
neoPixel_P15.setRangeColor(0, 7, 0x00FF00);
}
}
else {
if ((mind_n_Yao3ShuLiang==1)) {
neoPixel_P15.setRangeColor(4, 4, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==2)) {
neoPixel_P15.setRangeColor(4, 5, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==3)) {
neoPixel_P15.setRangeColor(3, 5, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==4)) {
neoPixel_P15.setRangeColor(3, 6, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==5)) {
neoPixel_P15.setRangeColor(2, 6, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==6)) {
neoPixel_P15.setRangeColor(2, 7, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==7)) {
neoPixel_P15.setRangeColor(1, 7, 0x0000FF);
}
else if ((mind_n_Yao3ShuLiang==8)) {
neoPixel_P15.setRangeColor(0, 7, 0x0000FF);
}
}
display.setCursor(0, 48);
display.print("药3:");
display.setCursor(30, 48);
display.print(mind_n_Yao3ShuLiang);
if ((mind_n_Yao3Fan==0)) {
display.setCursor(45, 48);
display.print("饭前");
}
else {
display.setCursor(45, 48);
display.print("饭后");
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(80, 48);
display.print("早");
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(95, 48);
display.print("中");
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(110, 48);
display.print("晚");
}
}
void DF_NaoZhong() {
if (((analogRead(P2))<1500)) {
mind_n_NaoZhongKaiGuan = 1;
}
else if ((2000<(analogRead(P2)))) {
mind_n_NaoZhongKaiGuan = 0;
}
else {
}
if ((mind_n_NaoZhongKaiGuan==1)) {
if ((mind_n_NaoZhong1>0)) {
if (((hour()==mind_n_NaoZhong1) && (minute()==0))) {
timer.run();
}
}
if ((mind_n_NaoZhong2>0)) {
if (((hour()==mind_n_NaoZhong2) && (minute()==0))) {
timer.run();
}
}
if ((mind_n_NaoZhong3>0)) {
if (((hour()==mind_n_NaoZhong3) && (minute()==0))) {
timer.run();
}
}
if ((mind_n_NaoZhong4>0)) {
if (((hour()==mind_n_NaoZhong4) && (minute()==0))) {
timer.run();
}
}
if ((mind_n_NaoZhong5>0)) {
if (((hour()==mind_n_NaoZhong5) && (minute()==0))) {
timer.run();
}
}
if ((mind_n_NaoZhong6>0)) {
if (((hour()==mind_n_NaoZhong6) && (minute()==0))) {
timer.run();
}
}
}
}
void DF_SheZhi() {
mind_n_SheZhi = 1;
mind_n_XianShi = 0;
display.fillScreen(0);
display.setCursor(0, 16);
display.print("服药时间:");
display.setCursor(0, 32);
display.print("服药数量:");
display.setCursor(0, 48);
display.print("服药次数:");
display.setCursor(33, 0);
display.print("药1设置");
rgb.write(-1, 0x000000);
rgb.write(0, 0xFF0000);
delay(300);
while (!(buttonA.isPressed())) {
DF_FanQianFanHou();
DF_YaoShuLiangDuQu();
display.setCursor(75, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_YaoShuLiang);
if ((mind_n_YaoFan==0)) {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭前");
}
else {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭后");
}
if ((touchPadH.isTouched())) {
if ((!((String(mind_s_Yao1ShiJian).indexOf(String("早")) != -1)))) {
mind_s_Yao1ShiJian = (String(mind_s_Yao1ShiJian) + String("早"));
}
}
if ((touchPadO.isTouched())) {
if ((!((String(mind_s_Yao1ShiJian).indexOf(String("中")) != -1)))) {
mind_s_Yao1ShiJian = (String(mind_s_Yao1ShiJian) + String("中"));
}
}
if ((touchPadN.isTouched())) {
if ((!((String(mind_s_Yao1ShiJian).indexOf(String("晚")) != -1)))) {
mind_s_Yao1ShiJian = (String(mind_s_Yao1ShiJian) + String("晚"));
}
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(60, 48);
display.print("早");
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(80, 48);
display.print("中");
}
if (((String(mind_s_Yao1ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(100, 48);
display.print("晚");
}
yield();
}
mind_n_Yao1Fan = mind_n_YaoFan;
mind_n_Yao1ShuLiang = mind_n_YaoShuLiang;
Blynk.virtualWrite(V0, mind_n_Yao1ShuLiang);
delay(500);
Blynk.virtualWrite(V2, mind_n_Yao1Fan);
delay(500);
Blynk.virtualWrite(V1, mind_s_Yao1ShiJian);
delay(500);
display.setCursor(33, 0);
display.print(" ");
display.setCursor(33, 0);
display.print("药2设置");
display.setCursor(60, 48);
display.print(" ");
rgb.write(-1, 0x000000);
rgb.write(1, 0xFF0000);
delay(300);
while (!(buttonA.isPressed())) {
DF_FanQianFanHou();
DF_YaoShuLiangDuQu();
display.setCursor(75, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_YaoShuLiang);
if ((mind_n_YaoFan==0)) {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭前");
}
else {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭后");
}
if ((touchPadH.isTouched())) {
if ((!((String(mind_s_Yao2ShiJian).indexOf(String("早")) != -1)))) {
mind_s_Yao2ShiJian = (String(mind_s_Yao2ShiJian) + String("早"));
}
}
if ((touchPadO.isTouched())) {
if ((!((String(mind_s_Yao2ShiJian).indexOf(String("中")) != -1)))) {
mind_s_Yao2ShiJian = (String(mind_s_Yao2ShiJian) + String("中"));
}
}
if ((touchPadN.isTouched())) {
if ((!((String(mind_s_Yao2ShiJian).indexOf(String("晚")) != -1)))) {
mind_s_Yao2ShiJian = (String(mind_s_Yao2ShiJian) + String("晚"));
}
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(60, 48);
display.print("早");
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(80, 48);
display.print("中");
}
if (((String(mind_s_Yao2ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(100, 48);
display.print("晚");
}
yield();
}
mind_n_Yao2Fan = mind_n_YaoFan;
mind_n_Yao2ShuLiang = mind_n_YaoShuLiang;
Blynk.virtualWrite(V3, mind_n_Yao2ShuLiang);
delay(500);
Blynk.virtualWrite(V5, mind_n_Yao2Fan);
delay(500);
Blynk.virtualWrite(V4, mind_s_Yao2ShiJian);
delay(500);
display.setCursor(33, 0);
display.print(" ");
display.setCursor(33, 0);
display.print("药3设置");
display.setCursor(60, 48);
display.print(" ");
rgb.write(-1, 0x000000);
rgb.write(2, 0xFF0000);
delay(300);
while (!(buttonA.isPressed())) {
DF_FanQianFanHou();
DF_YaoShuLiangDuQu();
display.setCursor(75, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_YaoShuLiang);
if ((mind_n_YaoFan==0)) {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭前");
}
else {
display.setCursor(75, 16);
display.print(" ");
display.setCursor(75, 16);
display.print("饭后");
}
if ((touchPadH.isTouched())) {
if ((!((String(mind_s_Yao3ShiJian).indexOf(String("早")) != -1)))) {
mind_s_Yao3ShiJian = (String(mind_s_Yao3ShiJian) + String("早"));
}
}
if ((touchPadO.isTouched())) {
if ((!((String(mind_s_Yao3ShiJian).indexOf(String("中")) != -1)))) {
mind_s_Yao3ShiJian = (String(mind_s_Yao3ShiJian) + String("中"));
}
}
if ((touchPadN.isTouched())) {
if ((!((String(mind_s_Yao3ShiJian).indexOf(String("晚")) != -1)))) {
mind_s_Yao3ShiJian = (String(mind_s_Yao3ShiJian) + String("晚"));
}
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("早")) != -1))) {
display.setCursor(60, 48);
display.print("早");
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("中")) != -1))) {
display.setCursor(80, 48);
display.print("中");
}
if (((String(mind_s_Yao3ShiJian).indexOf(String("晚")) != -1))) {
display.setCursor(100, 48);
display.print("晚");
}
yield();
}
mind_n_Yao3Fan = mind_n_YaoFan;
mind_n_Yao3ShuLiang = mind_n_YaoShuLiang;
delay(300);
Blynk.virtualWrite(V6, mind_n_Yao3ShuLiang);
delay(500);
Blynk.virtualWrite(V8, mind_n_Yao3Fan);
delay(500);
Blynk.virtualWrite(V7, mind_s_Yao3ShiJian);
delay(500);
rgb.write(-1, 0x000000);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟1设置");
display.setCursor(20, 32);
display.print("闹钟1时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong1 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong1==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong1);
delay(200);
}
yield();
}
delay(1000);
Blynk.virtualWrite(V9, mind_n_NaoZhong1);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟2设置");
display.setCursor(20, 32);
display.print("闹钟2时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong2 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong2==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong2);
delay(200);
}
yield();
}
delay(1000);
Blynk.virtualWrite(V10, mind_n_NaoZhong2);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟3设置");
display.setCursor(20, 32);
display.print("闹钟3时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong3 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong3==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong3);
delay(200);
}
yield();
}
delay(1000);
Blynk.virtualWrite(V11, mind_n_NaoZhong3);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟4设置");
display.setCursor(20, 32);
display.print("闹钟4时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong4 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong4==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong4);
delay(200);
}
yield();
}
delay(1000);
Blynk.virtualWrite(V12, mind_n_NaoZhong4);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟5设置");
display.setCursor(20, 32);
display.print("闹钟5时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong5 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong5==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong5);
delay(200);
}
yield();
}
delay(1000);
Blynk.virtualWrite(V13, mind_n_NaoZhong5);
display.fillScreen(0);
display.setCursor(33, 0);
display.print("闹钟6设置");
display.setCursor(20, 32);
display.print("闹钟6时间:");
while (!(buttonA.isPressed())) {
mind_n_NaoZhong6 = (floor(((analogRead(P2)) / 170)));
if ((mind_n_NaoZhong6==0)) {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print("关闭");
delay(200);
}
else {
display.setCursor(85, 32);
display.print(" ");
display.setCursor(85, 32);
display.print(mind_n_NaoZhong6);
delay(200);
}
yield();
}
display.fillScreen(0);
mind_n_XianShi = 1;
mind_n_SheZhi = 0;
Blynk.virtualWrite(V14, mind_n_NaoZhong6);
delay(500);
}
void DF_ShiZhong() {
display.setCursor(3, 0);
display.print(month());
display.setCursor(15, 0);
display.print("月");
display.setCursor(25, 0);
display.print(day());
display.setCursor(38, 0);
display.print("日");
display.setCursor(52, 0);
display.print(hour());
display.setCursor(65, 0);
display.print("时");
if ((second()==0)) {
display.setCursor(76, 0);
display.print(" ");
}
display.setCursor(76, 0);
display.print(minute());
display.setCursor(89, 0);
display.print("分");
display.setCursor(101, 0);
display.print(second());
display.setCursor(115, 0);
display.print("秒");
display.setCursor(3, 16);
display.print("闹钟1:");
if ((mind_n_NaoZhong1==0)) {
display.setCursor(40, 16);
display.print("无");
}
else {
display.setCursor(40, 16);
display.print(mind_n_NaoZhong1);
}
display.setCursor(70, 16);
display.print("闹钟2:");
if ((mind_n_NaoZhong2==0)) {
display.setCursor(106, 16);
display.print("无");
}
else {
display.setCursor(106, 16);
display.print(mind_n_NaoZhong2);
}
display.setCursor(3, 32);
display.print("闹钟3:");
if ((mind_n_NaoZhong3==0)) {
display.setCursor(40, 32);
display.print("无");
}
else {
display.setCursor(40, 32);
display.print(mind_n_NaoZhong3);
}
display.setCursor(70, 32);
display.print("闹钟4:");
if ((mind_n_NaoZhong4==0)) {
display.setCursor(106, 32);
display.print("无");
}
else {
display.setCursor(106, 32);
display.print(mind_n_NaoZhong4);
}
display.setCursor(3, 48);
display.print("闹钟5:");
if ((mind_n_NaoZhong5==0)) {
display.setCursor(40, 48);
display.print("无");
}
else {
display.setCursor(40, 48);
display.print(mind_n_NaoZhong5);
}
display.setCursor(70, 48);
display.print("闹钟6:");
if ((mind_n_NaoZhong6==0)) {
display.setCursor(106, 48);
display.print("无");
}
else {
display.setCursor(106, 48);
display.print(mind_n_NaoZhong6);
}
}
// 事件回调函数
BLYNK_CONNECTED() {
rtc.begin();
}
void myTimerEvent1() {
buzz.play(JUMP_UP, Once);
buzz.play(JUMP_DOWN, Once);
buzz.play(POWER_UP, Once);
buzz.play(POWER_DOWN, Once);
delay(500);
}
BLYNK_WRITE(V0) {
mind_n_Yao1ShuLiang = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V1) {
mind_s_Yao1ShiJian = param.asStr();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V2) {
mind_n_Yao1Fan = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V3) {
mind_n_Yao2ShuLiang = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V4) {
mind_s_Yao2ShiJian = param.asStr();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V5) {
mind_n_Yao2Fan = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V6) {
mind_n_Yao3ShuLiang = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V7) {
mind_s_Yao3ShiJian = param.asStr();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V8) {
mind_n_Yao3Fan = param.asFloat();
mind_n_XianShi = 1;
}
BLYNK_WRITE(V9) {
mind_n_NaoZhong1 = param.asFloat();
}
BLYNK_WRITE(V10) {
mind_n_NaoZhong2 = param.asFloat();
}
BLYNK_WRITE(V11) {
mind_n_NaoZhong3 = param.asFloat();
}
BLYNK_WRITE(V12) {
mind_n_NaoZhong4 = param.asFloat();
}
BLYNK_WRITE(V13) {
mind_n_NaoZhong5 = param.asFloat();
}
BLYNK_WRITE(V14) {
mind_n_NaoZhong6 = param.asFloat();
}
BLYNK_WRITE(V15) {
mind_n_NaoZhongKaiGuan = param.asFloat();
}
六、Blynd手机APP设置 1、第一步登陆账号,如果是第一次使用需要先进行注册,如下图所示“Login”为登陆,Create New Account ”为注册,输入账号密码进行登陆。
2、登陆成功后,点击“NewProject”上面的+号新建项目,输入并选择相应的内容后,点击“Create Project”按钮。
3、点击右上角的六边形可以进入项目设置界面,在最下方也可以看到授权码的信息,把这里的授权码复制到程序中的授权码位置中。
4、点击添加组件,在组件列表中选择“LED”组件,再修改组件中各项参数,设置好后点右上角“OK”确定,再长按LED组件移到相应位置,见下图。
5、用同样的方法添加一个“TextInput”组件,见下图。
6、按下图所示再添加两个“LED”组件和“Text Input”组件,“LED”组件引脚分别为V17、V18。
7、按下图所示添加6个“Numeric Input”组件,组件名称分别为闹钟1……闹钟6、引脚分别为V9至V14,引脚值范围为0至24。
8、按下图所示添加1个“Styled Button”组件,设置好组件各项参数及位置。
9、按下图所示添加1个“RTC Settings”组件,设置好组件各项参数及位置。
10、按下图所示添加1个“Numeric Input”组件,置好组件各项参数及位置。
11、按下图所示添加1个“Text Input”组件,置好组件各项参数及位置。
12、按下图所示添加1个“Styled Button”组件,设置好组件各项参数及位置。
13、按同样的方法添加好第二格、第三格服务的相关组件,最后效果如下图。
blynk移动端的组件设置完成后,最后我们点击右上角的“三角”形就可以用运行这个程序了。
七、项目小结 此次“智能药盒”项目创意来源生活,在一定程度上能解决家里老人忘记服药的现象,在项目的制作过程中本人也学到了许多知识和技术,特别是Blynk的使用。此作品必须连上网络才可以使用,如果家里没有网络,作品就运行不了,而且使用掌控板和百灵鸽扩展板后成本有点高,下次打算再做一个不基于网络的“智能药盒”,主控使用Arduino,成本也会低很多。 感谢分享,Mark一下 感谢分享,又学到了 太牛了,项目很棒 太牛了
页:
[1]