微信公众号
蘑菇云创造


微信交流群

之前在第二轮做了一个无人售卖机,上位机用的是电脑做的人脸支付功能。有了二哈(HUSKYLENS)之后,我的售卖机终于和放飞自我。摆脱了电脑的束缚,想怎么识别就怎么识别!本项目总体流程是:掌控板做上位机:药品的选择与人脸支付。通过mqtt协议发送到easyiot物联网平台!下位机arduino通过obloq物联网模块接收到的数据,做相应药品的出货。
上位机程序设计
/*!
* MindPlus
* mpython
*
*/
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_HuskyLens.h>
// 动态变量
volatile float mind_n_DangQianSuoZaiXuanXiang, mind_n_QueRenXuanZhongXuanXiang;
// 函数声明
void DF_TianChongJuXing(float mind_n_TianChongXuanXiang);
void DF_PanDuanXuanXiang(float mind_n_p0, float mind_n_p1);
// 静态常量
const String topics[5] = {"225lgQXWR","","","",""};
// 创建对象
DFRobot_Iot myIot;
DFRobot_HuskyLens huskylens;
// 主程序开始
void setup() {
mPython.begin();
myIot.wifiConnect("Erised_Teach", "erised88");
while (!myIot.wifiStatus()) {yield();}
myIot.init("iot.dfrobot.com.cn","6fqog7JZR","","efqoRn1WRz",topics,1883);
myIot.connect();
while (!myIot.connected()) {yield();}
mind_n_DangQianSuoZaiXuanXiang = 1;
mind_n_QueRenXuanZhongXuanXiang = 0;
huskylens.beginI2CUntilSuccess();
huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
}
void loop() {
display.fillScreen(0);
while (!(mind_n_QueRenXuanZhongXuanXiang>0)) {
DF_PanDuanXuanXiang((analogRead(P0)), (analogRead(P1)));
DF_TianChongJuXing(mind_n_DangQianSuoZaiXuanXiang);
yield();
}
display.fillScreen(0);
display.setCursor(20, 15);
display.print("开始人脸支付");
display.setCursor(20, 30);
display.print("请对准摄像头");
while (!(mind_n_QueRenXuanZhongXuanXiang==0)) {
huskylens.request();
if (huskylens.isLearned(1)) {
if (huskylens.isAppear(1,HUSKYLENSResultBlock)) {
myIot.publish(topic_0, mind_n_QueRenXuanZhongXuanXiang);
mind_n_QueRenXuanZhongXuanXiang = 0;
display.fillScreen(0);
display.setCursor(42, 22);
display.print("支付成功");
delay(1000);
}
}
yield();
}
}
// 自定义函数
void DF_TianChongJuXing(float mind_n_TianChongXuanXiang) {
if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
display.setCursor(94, 10);
display.print("药品1");
display.setCursor(100, 25);
display.print("5元");
display.rect(0, 0, 86, 64, false);
display.rect(2, 2, 40, 29, true);
display.setCursor(5, 8);
display.print("药品1");
display.rect(44, 2, 40, 29, false);
display.setCursor(49, 8);
display.print("药品2");
display.rect(2, 32, 40, 29, false);
display.setCursor(5, 37);
display.print("药品3");
display.rect(44, 32, 40, 29, false);
display.setCursor(49, 37);
display.print("药品4");
}
if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
display.setCursor(94, 10);
display.print("药品2");
display.setCursor(100, 25);
display.print("10元");
display.rect(0, 0, 86, 64, false);
display.rect(2, 2, 40, 29, false);
display.setCursor(5, 8);
display.print("药品1");
display.rect(44, 2, 40, 29, true);
display.setCursor(49, 8);
display.print("药品2");
display.rect(2, 32, 40, 29, false);
display.setCursor(5, 37);
display.print("药品3");
display.rect(44, 32, 40, 29, false);
display.setCursor(49, 37);
display.print("药品4");
}
if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
display.setCursor(94, 10);
display.print("药品3");
display.setCursor(100, 25);
display.print("15元");
display.rect(0, 0, 86, 64, false);
display.rect(2, 2, 40, 29, false);
display.setCursor(5, 8);
display.print("药品1");
display.rect(44, 2, 40, 29, false);
display.setCursor(49, 8);
display.print("药品2");
display.rect(2, 32, 40, 29, true);
display.setCursor(5, 37);
display.print("药品3");
display.rect(44, 32, 40, 29, false);
display.setCursor(49, 37);
display.print("药品4");
}
if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
display.setCursor(94, 10);
display.print("药品4");
display.setCursor(100, 25);
display.print("20元");
display.rect(0, 0, 86, 64, false);
display.rect(2, 2, 40, 29, false);
display.setCursor(5, 8);
display.print("药品1");
display.rect(44, 2, 40, 29, false);
display.setCursor(49, 8);
display.print("药品2");
display.rect(2, 32, 40, 29, false);
display.setCursor(5, 37);
display.print("药品3");
display.rect(44, 32, 40, 29, true);
display.setCursor(49, 37);
display.print("药品4");
}
}
void DF_PanDuanXuanXiang(float mind_n_p0, float mind_n_p1) {
if (((mind_n_p0>0) && (mind_n_p0<1800))) {
if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 1;
}
else {
if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 3;
}
}
}
else {
if (((mind_n_p0>2000) && (mind_n_p0<4100))) {
if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 2;
}
else {
if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 4;
}
}
}
if (((mind_n_p1>0) && (mind_n_p1<1900))) {
if ((mind_n_DangQianSuoZaiXuanXiang==1)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 3;
}
if ((mind_n_DangQianSuoZaiXuanXiang==2)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 4;
}
}
if (((mind_n_p1>2000) && (mind_n_p1<4100))) {
if ((mind_n_DangQianSuoZaiXuanXiang==3)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 1;
}
if ((mind_n_DangQianSuoZaiXuanXiang==4)) {
display.fillScreen(0);
mind_n_DangQianSuoZaiXuanXiang = 2;
}
}
}
if (((analogRead(P2))==0)) {
mind_n_QueRenXuanZhongXuanXiang = mind_n_DangQianSuoZaiXuanXiang;
}
}
下位机程序设计
/*!
* MindPlus
* uno
*
*/
#include <UNO_Obloq.h>
#include <SoftwareSerial.h>
// 动态变量
String mind_s_value;
// 静态常量
const String topics[5] = {"gsjELPXWR","","","",""};
// 创建对象
UNO_Obloq olq;
SoftwareSerial softSerial(2, 3);
// 主程序开始
void setup() {
softSerial.begin(9600);
olq.startConnect(&softSerial, "Erised_Teach", "erised88", "kkuQ6XoZR", "zzXweuTZRz", topics, "iot.dfrobot.com.cn", 1883);
}
void loop() {
if ((olq.available(olq.topic_0))) {
mind_s_value = olq.getMessage(olq.topic_0);
if ((mind_s_value=="1")) {
digitalWrite(4, HIGH);
analogWrite(5, 200);
delay(1000);
digitalWrite(4, HIGH);
analogWrite(5, 0);
}
if ((mind_s_value=="2")) {
digitalWrite(7, HIGH);
analogWrite(6, 200);
delay(1000);
digitalWrite(7, HIGH);
analogWrite(6, 0);
}
if ((mind_s_value=="3")) {
digitalWrite(8, HIGH);
analogWrite(9, 200);
delay(1000);
digitalWrite(8, HIGH);
analogWrite(9, 0);
}
if ((mind_s_value=="4")) {
digitalWrite(10, HIGH);
analogWrite(11, 200);
delay(1000);
digitalWrite(10, HIGH);
analogWrite(11, 0);
}
}
}