青少年科技创新大赛创新发明获奖作品《食堂点餐辅助系统》Word格式文档下载.docx
《青少年科技创新大赛创新发明获奖作品《食堂点餐辅助系统》Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《青少年科技创新大赛创新发明获奖作品《食堂点餐辅助系统》Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
![青少年科技创新大赛创新发明获奖作品《食堂点餐辅助系统》Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2022-10/12/09724252-f42a-4a58-9dab-3c643e717106/09724252-f42a-4a58-9dab-3c643e7171061.gif)
2、系统组成
RFID设备通讯总线
3、系统工作原理
通讯0:
连接方式:
USB串口线,通讯协议:
串口,9600比特率
通讯内容:
①I2C主控下发I2C通讯中收到的各个菜价给MiniPC;
②MiniPC上传点菜总价给I2C主控;
③I2C主控下发RFID读取到的或扣款后的卡内金额给MiniPC
通讯1:
网线POE供电,通讯协议:
I2C
①I2C主控接收I2C通讯总线中传来的各个菜价
②I2C主控向I2C通讯总线发送需要机械手点按的总价(或下发传菜指令,视需求而定)
③I2C主控向I2C通讯总线发送需要指示的菜品信息
通讯2:
机械手接收I2C通讯总线中传来的需要点按的总价(或传菜指令,视需求而定)
通讯3:
①价格显示调整及指示系统向I2C通讯总线发送各个菜价
②价格显示调整及指示系统接收I2C通讯总线传来的需要指示的菜品信息
通讯4:
二、子系统的实现
1、MiniPC点菜控制系统
硬件配置:
MiniPC主机,7寸触摸显示屏
如上图采用VB界面设计,增加定时器及串口通讯模块
代码如下:
Dimf(12)AsInteger
Dimprice(12)AsDouble
DimtmpAsString
Dimcombegin,jAsInteger
'
以下代码实现标签的颜色回到初始设置的颜色
PrivateSubCommand1_Click()
Fori=1To10
Lab1(i).BackColor=&
HFFFF&
f(i)=0
Next
Text1.Text=0
EndSub
PrivateSubCommand2_Click()
IfLab1
(1).BackColor=&
AndLab1
(2).BackColor=&
Then
ledstate="
0"
ElseIfLab1
(1).BackColor=&
HFF&
1"
2"
3"
EndIf
If(MSComm1.PortOpen=True)Then
MSComm1.Output=ledstate+Str(Text1.Text*10)
PrivateSubCommand3_Click()
MSComm1.CommPort=Combo1.Text
MSComm1.PortOpen=True
MSComm1.RThreshold=1
以下代码实现将Combo1文本框内文本存入1.txt以便下次打开时调用
OpenApp.Path&
"
\1.txt"
ForOutputAs#1
Print#1,Combo1.Text
Close#1
Combo1.Visible=False
Command3.Visible=False
PrivateSubForm_Load()
Lab1(i).Width=Lab1(9).Width
Lab1(i).Height=Lab1(9).Height
Lab1(i).Font.Size=Lab1(9).Font.Size
Lab1(i).Alignment=2
以下代码实现扫描可用串口端口并列到Combo1选择框内可供选择
Fori=1To16
MSComm1.CommPort=i
IfMSComm1.PortOpen=TrueThen'
先关闭串口
MSComm1.PortOpen=False
EndIf
OnErrorResumeNext
MSComm1.PortOpen=True
IfErr.Number<
>
8002Then
Combo1.AddItemi
Nexti
以下代码实现如果1.txt存在则读取1.txt文档内容并且写入Combo1文本框内
IfDir(App.Path&
)<
"
Then'
如果1.txt存在
OpenApp.Path&
ForInputAs#1
DoWhileNotEOF
(1)
Input#1,B
Combo1.Text=Combo1.Text&
B
Loop
Close#1
PrivateSubForm_Unload(CancelAsInteger)
IfMSComm1.PortOpen=TrueThen
PrivateSubLab1_Click(IndexAsInteger)
DimiAsInteger
i=Index
Iff(i)=0Then
f(i)=1
Text1.Text=Val(Text1.Text)+Val(Lab1(i).Caption)
ElseIff(i)=1Then
Text1.Text=Val(Text1.Text)-Val(Lab1(i).Caption)
PrivateSubdealWithData()'
处理缓存TMP
Dimstr_tmp()AsString
str_tmp=Split(tmp,"
|"
)
Fori=1ToUBound(str_tmp)
price(i)=Val(str_tmp(i-1))/10
PrivateSubMSComm1_OnComm()
If(MSComm1.CommEvent=comEvReceive)Then
DimdataAsString
data=MSComm1.Input
Fori=1ToLen(data)
DimchAsString
ch=Mid(data,i,1)
Ifch="
*"
CalldealWithData
tmp="
Else
tmp=tmp+ch
PrivateSubTimer1_Timer()
Lab1(i).Caption=price(i)
Ifprice(12)<
0Then
Text2.Text=price(12)'
余额
Text2.Text="
放卡后显示"
2、I2C主控,兼RFID刷卡系统
ArduinoNano控制板,RFID读卡模块
#include<
Wire.h>
#include"
RC522.h"
SPI.h>
EEPROM.h>
//4bytesSerialnumberofcard,the5bytesisverfiybytes
unsignedcharserNum[5];
unsignedcharstate_pre=1;
intBalance=3000;
//余额
intaddress=0;
Stringtotalprice="
;
intprice[12]={88,88,88,88,88,88,88,88,88,88,0,0};
//最后一位为向RFID发送的数据“余额”
charledstate;
//led状态,'
0'
为全关,'
1'
开左灯,'
2'
开右灯,'
3'
开两灯
voidRFIDwrite();
//函数声明
voidsetup(){
Wire.begin();
Serial.begin(9600);
Serial.println("
GO!
);
Serial.println();
pinMode(chipSelectPin,OUTPUT);
//Setdigitalpin10asOUTPUTtoconnectittotheRFID/ENABLEpin
digitalWrite(chipSelectPin,LOW);
//ActivatetheRFIDreader
SPI.begin();
MFRC522_Init();
//初始化RFID
}
voidloop()
{
intflag,address;
RFIDwrite();
///////////////////////////////////////////////////
//以下代码是扫描I2C总线通讯传过来的子设