言
基于STM32的智能点餐系统,主控使用STM32F103C8T6核心板
- 针对传统就餐点餐流程出现的问题,进行需求分析,对点餐流程和功能模块 进行分析,设计一款以单片机为主控器的智能点餐系统。该系统结合红外线传感器、嵌入式芯片、无线传感器、语音模块等设备,把点餐数据传输到服务器。
- 智能餐厅由手机终端APP与智能管理终端机两部分组成,拥有实时的快餐制作的流程、提前预约、支持线上线下支付、实时评价、建议采集等功能,从而减少人力成本,方便客户享受快节奏、高品质的就餐点餐服务。
一、功能要求:
- 基于单片机系统设计点餐系统,
- 实现前台点餐,后台可以看到
- 实现后台做好菜品,前台可以收到通知
二、代码思路
- 打开定时器2,作为系统运行时间;
- esp8266每2.5S刷新一次;
- dht11每1s刷新一次;
- OLED每2s刷新一次;
三、硬件说明
- 系统启动后,会有“MyPro”这个WiFi,用手机网络助手连接上,
- ip地址:192.168.1.1 ,端口8080
- 引脚连接:
ESP8266: EN B0
RST B1
RX B10
TX B11
OLED: D0 PA5(SCL1)
D1 PA7(SDA1)
RES PB7
DC PA4
CS PA6
- @attention 1、提供给ESP8266的电压(3-4v)或者电流不够时,连接wifi会失败
- 实验平台:STM32C8T6核心板
四、代码以及框图等资料
//前台代码
int main(void)
{
while(1)
{
while(systeminit)
{
//OLED_Clear();
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES:
OLED_Clear();
table();
table_num++;
break;
case KEY2_PRES:
OLED_Clear();
table_num--;
table();
break;
case KEY1_PRES:
systeminit=0;
OLED_ShowString(20,6,"Waiting...",16);
delay_ms(1000);
OLED_Clear();
show_page1();
break;
case KEY0_PRES:
break;
}
}
else delay_ms(2);
}
//以下是选菜界面
.
.
.
.
.
//以下是更新数量,标题,价格
if(!jiezhang)
{
show_caption();
switch(page)
{
case 1:
OLED_ShowNum(74,3,food1,1,16);
OLED_ShowNum(74,6,food2,1,16);
OLED_ShowNum(110,3,food1_m,2,16);
OLED_ShowNum(110,6,food2_m,2,16);
break;
case 2:
OLED_ShowNum(74,3,food3,1,16);
OLED_ShowNum(74,6,food4,1,16);
OLED_ShowNum(110,3,food3_m,2,16);
OLED_ShowNum(110,6,food4_m,2,16);
break;
case 3:
OLED_ShowNum(74,3,food5,1,16);
OLED_ShowNum(74,6,food6,1,16);
OLED_ShowNum(110,3,food5_m,2,16);
OLED_ShowNum(110,6,food6_m,2,16);
break;
}
}
//以下是按键
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES:
if(page==1)
{
switch(choose)
{
case 1 :
food1++;
send_dat(1);
//ESP8266_SendString ( DISABLE, send_str1, strlen ( send_str1 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food2++;
send_dat(2);
//ESP8266_SendString ( DISABLE, send_str2, strlen ( send_str2 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==2)
{
switch(choose)
{
case 1 :
food3++;
send_dat(3);
//ESP8266_SendString ( DISABLE, send_str3, strlen ( send_str3 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food4++;
send_dat(4);
//ESP8266_SendString ( DISABLE, send_str4, strlen ( send_str4 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==3)
{
switch(choose)
{
case 1 :
food5++;
send_dat(5);
//ESP8266_SendString ( DISABLE, send_str5, strlen ( send_str5 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food6++;
send_dat(6);
//ESP8266_SendString ( DISABLE, send_str6, strlen ( send_str6 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
break;
case KEY2_PRES:
if(page==1)
{
switch(choose)
{
case 1 :
food1--;
send_dat(7);
//ESP8266_SendString ( DISABLE, send_str7, strlen ( send_str7 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food2--;
send_dat(8);
//ESP8266_SendString ( DISABLE, send_str8, strlen ( send_str8 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==2)
{
switch(choose)
{
case 1 :
food3--;
send_dat(9);
//ESP8266_SendString ( DISABLE, send_str9, strlen ( send_str9 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food4--;
send_dat(10);
//ESP8266_SendString ( DISABLE, send_str10, strlen ( send_str10 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
else if(page==3)
{
switch(choose)
{
case 1 :
food5--;
send_dat(11);
//ESP8266_SendString ( DISABLE, send_str11, strlen ( send_str11 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
case 2 :
food6--;
send_dat(12);
//ESP8266_SendString ( DISABLE, send_str12, strlen ( send_str12 ), ( ENUM_ID_NO_TypeDef ) 0 );
break;
}
}
break;
case KEY1_PRES:
page++;
if(page>3)page=1;
if(page==1)
{
show_page1();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
break;
}
else if(page==2)
{
show_page2();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
else if(page==3)
{
show_page3();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
break;
case KEY0_PRES:
page--;
if(page<1)page=3;
if(page==3)
{
show_page1();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
break;
}
else if(page==2)
{
show_page2();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
else if(page==3)
{
show_page3();
//if(choose==1) OLED_ShowString(68,3,"*",16);
//else if(choose==2)OLED_ShowString(68,6,"*",16);
}
break;
}
}
else delay_ms(2);
//以下是按键
.
.
.
.
.
.
//以下是ESP8266向PC发送数据,每1s发送一次
if(esp_flag==1)
{
esp_flag=0;
//LED=!LED;
//类似于c语言中向屏幕打印的printf
//这里是将第二、三个参数打印到第一个参数的字符串中
ESP8266_SendString ( DISABLE, send_str, strlen ( send_str ), ( ENUM_ID_NO_TypeDef ) 0 );
}
//以下是接收ESP8266数据
strEsp8266_Fram_Record .Data_RX_BUF [ strEsp8266_Fram_Record .InfBit .FramLength ]='\0';
revStr=strEsp8266_Fram_Record .Data_RX_BUF;
if(strstr(revStr, ":c"))
continue;
strtok(revStr, ":");
revStr=strtok(NULL, ":");
// 这里判断缓存内
if(revStr!=NULL)
{
if(*revStr=='M')
{
OLED_Clear();
food1_change=!food1_change;
show_page1();
}
else if(*revStr=='N')
{
OLED_Clear();
food2_change=!food2_change;
show_page1();
}
}
}
}
}
void show_caption(void)
{
//名称、数量、价格
OLED_ShowCHinese(2,0,46);
OLED_ShowCHinese(18,0,47);
OLED_ShowCHinese(48,0,48);
OLED_ShowCHinese(64,0,49);
OLED_ShowCHinese(96,0,44);
OLED_ShowCHinese(112,0,45);
}
void Show_Chinese(void)
{
OLED_ShowCHinese(0,3,8);
OLED_ShowCHinese(18,3,11);
OLED_ShowCHinese(64,3,9);
OLED_ShowCHinese(82,3,11);
OLED_ShowCHinese(0,6,10);
OLED_ShowCHinese(18,6,11);
OLED_ShowCHinese(64,6,12);
OLED_ShowCHinese(82,6,13);
}
void show_page1()
{
OLED_Clear();
show_caption();
//鱼香肉丝/麻婆豆腐
if(food1_change>=1)
{
OLED_ShowCHinese(0 ,3,8);
OLED_ShowCHinese(18,3,9);
OLED_ShowCHinese(36,3,10);
OLED_ShowCHinese(54,3,11);
}
else
{
OLED_ShowCHinese(0 ,3,34);
OLED_ShowCHinese(18,3,35);
OLED_ShowCHinese(36,3,36);
OLED_ShowCHinese(54,3,37);
}
//辣子鸡丁/红烧茄子
if(food2_change>=1)
{
OLED_ShowCHinese(0 ,6,12);
OLED_ShowCHinese(18,6,13);
OLED_ShowCHinese(36,6,14);
OLED_ShowCHinese(54,6,15);
}
else
{
OLED_ShowCHinese(0 ,6,40);
OLED_ShowCHinese(18,6,41);
OLED_ShowCHinese(36,6,42);
OLED_ShowCHinese(54,6,43);
}
}
void show_page2()
{
OLED_Clear();
show_caption();
OLED_ShowCHinese(0 ,3,16);
OLED_ShowCHinese(18,3,17);
OLED_ShowCHinese(36,3,18);
OLED_ShowCHinese(54,3,19);
OLED_ShowCHinese(0 ,6,20);
OLED_ShowCHinese(18,6,21);
OLED_ShowCHinese(36,6,22);
OLED_ShowCHinese(54,6,23);
}
void show_page3()
{
OLED_Clear();
show_caption();
OLED_ShowCHinese(0 ,3,24);
OLED_ShowCHinese(18,3,25);
OLED_ShowCHinese(36,3,26);
OLED_ShowCHinese(54,3,27);
OLED_ShowCHinese(0 ,6,28);
OLED_ShowCHinese(18,6,29);
OLED_ShowCHinese(36,6,30);
OLED_ShowCHinese(54,6,31);
}
void show_page4()
{
OLED_Clear();
//点餐系统
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(16,0,1);
OLED_ShowCHinese(96,0,6);
OLED_ShowCHinese(112,0,7);
//x号总价
OLED_ShowNum(2,3,table_num,3,16);
OLED_ShowCHinese(32,3,39);
OLED_ShowCHinese(50,3,32);
OLED_ShowCHinese(68,3,33);
OLED_ShowString(94,3,":",16);
count=food1*food1_m + food2*food2_m + food3*food3_m + food4*food4_m + food5*food5_m + food6*food6_m;
OLED_ShowNum(84,3,count,4,16);
}
void table()
{
.
.
.
.
完整代码可进群免费领取。
嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!
点击这里找小助理0元领取:扫码进群领资料
日,风靡魔都的网红美食“南大门一米蒸”首次登陆杭州,而且第一家就开在阿里巴巴食堂。阿里巴巴总部西溪园区又再次成为许多人的“网红打卡景点”。
阿里内网帖引来上万人关注,“哪款糕点最好吃”、“哪款颜值最高”一时成为热议话题。
征服上万人的胃,菜单每月推新
在阿里巴巴西溪园区内,共有5个食堂,一日三餐都安排得明明白白。据行政同学统计,阿里人一年吃掉的大米将近495吨,鸡蛋一年消耗302万个,面粉32.5万斤。
而食堂引入的供应商来自北京、深圳、台湾等全国各地,口味几乎涵盖了南北方等各种风味。以2号食堂为例,这里有19个档口,每个档口按地区分有油麻地、户部巷、城隍庙、磁器口、簋街、南锣鼓巷、回民坊……光听这名字就像是走遍了中国美食地图。
不仅品种丰富,还每月都有新品推出,如同一款APP产品得不时更新版本,有助于提升用户活跃度和新鲜感。例如前期《长安十二时辰》电视剧的热播,带火了一波西安美食,其中最受关注的就是张小敬吃的水盆羊肉,8月12号食堂就会上线“长安十二风味”,其中就有呼声最高的“水盆羊肉”。
拿铁和肉包更搭,撸串和代码更配
夏天来临,“深夜食堂”在园区一角悄然开张,撸串、剥虾,啃个钵钵鸡、喝瓶北冰洋,让这夏天的夜晚瞬间有了灵魂。据统计,光顾这里的80%都是程序员,看来“撸代码”和“撸串”还真有异曲同工之妙。妹子们在这季节最爱的,则是健康瘦身餐。粗粮、蔬菜,加些牛肉、鸡肉或是鱼、虾,营养又健康,这几款限量套餐在食堂一上线后就广受好评,现在每天都有四五百人提前一天在钉钉群内进行预订。
在食堂以外,阿里还引入了更多商业配套,比如咖啡馆,星巴克和Costa,充分满足了咖啡爱好者的日常消费和社交需求。星巴克已经一跃成为全国同等规模园区门店的销量之王,一年能卖出43.2万杯,最受欢迎的是拿铁,每卖出7杯中必有一杯拿铁。同样每天门庭若市的,还有园区的“甘其食”包子铺,每年光鲜汁肉包就能卖出近20万个。
黑科技加持,吃饭也可以很酷
作为一家科技公司,阿里巴巴的食堂必然有黑科技加持。“报我的名字买单”这句话在这里不适用,替代的是“扫我的脸买单”。在阿里智慧餐厅,餐线打完菜后不用排队等工作人员来计算、刷卡,只需将托盘放在自助收银台上,1秒内就可以完成结算和刷脸支付的全流程。这个AI结算技术还是阿里程序员自发进行研究开发的,让吃饭这件事变得有点酷。
排队买饭和工作一样讲效率,餐厅为此特别引入了无人餐柜服务,阿里人无需到现场排队,只要提前在手机点餐,下单时可选择立即就餐或其他时间就餐,然后到食堂凭号取餐即可,省时省力,可以称得上是食堂界的“饿了么”服务。
在外界看来,阿里园区多的是开会、敲代码、评审会、聊需求等工作情景,殊不知这里也是充满了人间烟火气。正如同阿里人常挂在嘴边的“快乐工作、认真生活”,对于吃这件小事,他们好像一点儿都不凑合。
上游新闻·重庆商报记者 韦玥
于android的餐厅智能点餐
一、项目介绍
?商家:
(1)登陆功能:商家通过自己的账号密码登陆系统进行店铺管理
(2)菜品信息发布:商家可以发布菜品相关信息供顾客选择
(3)查询功能:商家通过订单号查询到该笔订单所有信息
(4)修改功能:商家可以对菜品的相关信息进行增删查改相关的操作
(5)结算功能:可设置优惠笔目,在结算时自动计算并得出金额
?顾客:
(1)注册功能:顾客可以扫描商家提供的点餐二维码信息进入点餐界面进行点餐
(2)下单功能:顾客可以在下单页面查看菜品信息、包括价格、优惠信息等,并可以对已点菜肴进行增减
(3)评价功能:顾客在用餐后进行评价,讲对菜的口味、价位、服务等相关信息反馈给商家
(4)积分功能:在消费后可获得积分,并展示积分明细
客户点餐、评价等功能实现。界面清晰流畅,程序运行稳定。
二、运行环境
1:客户端使用Android stuido进行开发;
2:服务端后台使用Myeclipse2014进行开发;
3:mysql数据库进行数据存储;
4:需要jdk1.7以上
5:使用雷电模拟器或者Androidstuio自带的模拟器进行运行
三、使用技术
总体设计逻辑和思路:
1:先设计数据库表文件
2:写服务端jsp页面以及写api接口给客户端提供数据
3:完成后台服务端的数据交互,也就是jsp页面数据的存储和显示
4:进行客户端页面的开发;
5:进行客户端对api接口的调用,也就是获取数据库的数据以及在客户端进行显示
移动端:
1:使用android原生控件以及xml布局文件来完成界面的显示
2:使用java代码完成功能的数据和逻辑交互
3:使用http网络请求完成数据的请求;
4:使用json数据解析完成客户端数据的回调和显示
服务端后台:
1:使用mysql完成数据的存储
2:使用jdbc完成数据库和代码的逻辑交互
3:使用jsp完成网页数据的显示
4:使用java代码完成api接口的编写以及以及数据的回调