查看“硬币存款机”的源代码
←
硬币存款机
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于这些用户组的用户使用:
用户
,labplus
您可以查看与复制此页面的源代码。
[[文件:硬币存款机.png|300px|缩略图|右 ]]<br /> == 概述 == 本作品可实现自动记录硬币存贮数量功能,支持断电记忆。使用时先根据制作说明将作品组装完整,然后 接上电源(9V电池或USB供电),打开主控板开关,放入硬币即可自动计数。硬币经过入口时,遮挡入口下 方光线传感器,用光线传感器遮挡次数记录放入硬币的数量;需要重置存款机时,遮挡光线传感器5秒, 数码管自动归零。DIY动手组装,锻炼动手能力,了解智能创意电子套件的使用,激发创新思维,增加学 习乐趣。 == 使用教程 == 程序控制流程:<br/> 1.通过光线传感器检测是否有硬币落下,当检测到硬币落下,计数器加1,并加数值写到EEPROM中,实现断电储存计数器。<br/> 2.当检测到光线传感器为暗时超过5秒,即将EEPROM中的计数器值清零。<br/> <br/> === <font size=3px>组装说明</font> === {|style="background-color:#FCF8E3;color:#8A6D3B;" |-style="vertical-align:center;" |[[File:点击下载.png|30px|center]] | #[[:File:硬币存款机装配.pdf ]] #[[:File:智能存钱罐制作说明.pdf]] |} <br/> [[File:硬币存款机_装配.png]] <br/> <br/> === <font size=3px>电子模块清单</font> === {| class="wikitable" border="0" cellpadding="2" width="20%" !模块名称||数量 |- |W1主控板||x1 |- |光线传感器||x1 |- |LED灯||x1 |- |数码管||x1 |} === <font size=3px>电子模块连接说明</font> === {| class="wikitable" |- ! 模块 !!引脚 !! 说明 |- | 光线传感器 || W1-A0/A1接口|| |- | LED灯||W1-3/11接口 || |- | 数码管||W1-I2C接口 || |} === <font size=3px>Arduino程序/图形化程序</font> === {|style="background-color:#FCF8E3;color:#8A6D3B;" |-style="vertical-align:center;" |[[File:点击下载.png|30px|center]] |[[:File:M0005_bank_SW_V1.2_Release.rar|硬币存款机Arduino程序包]] |} <pre style="color:blue"> #include "Wire.h" #include "TM1650.h" #include "EEPROM.h" #define Light_int A0 #define Led_out 3 typedef union { uint8_t byteData[2]; uint16_t intData; }BYTE_INT; BYTE_INT counct; unsigned int Light_sr = 0; int val,vall; int16_t temp = 0; TM1650 d; char line[] = {"----"}; unsigned long blanktime; unsigned char TEMP; void Display_LED(); void hexToBCD(int16_t val); char getTochar(uint8_t bcd); unsigned int getTime(unsigned long ntime); unsigned int number=0; /* 代表那个非常大的数字 */ unsigned char ge,shi,bai,qian,wan; int16_t DispData[5]; //数据缓冲数组 int ks=0; unsigned long flag=0; void setup() { // put your setup code here, to run once: Wire.begin(); // join i2c bus (address optional for master) d.init(); d.displayOff(); counct.byteData[0] = EEPROM.read(1); counct.byteData[1] = EEPROM.read(2); pinMode(Light_int,INPUT); pinMode(Led_out,OUTPUT); analogWrite(Led_out, 60); number = counct.intData; hexToBCD(counct.intData); d.displayString(line); d.setBrightness(2); d.displayOn(); Serial.begin(115200); } void loop() { Display_LED();//光存钱罐 } /********************************************************************************** * **********************************************************************************/ void hexToBCD(int16_t val) { int i; int16_t num = val; if (num > 999) num = 999; for (i=0; num > 99; i++) num -= 100; if(i != 0) line[1] = getTochar(i); else line[1] = ' '; for (i=0; num > 9; i++) num -= 10; line[2] = getTochar(i); line[3] = getTochar(num); line[0] = ' '; } /********************************************************************************** * **********************************************************************************/ char getTochar(uint8_t bcd) { char c; switch (bcd) { case 0: c = '0'; break; case 1: c = '1'; break; case 2: c = '2'; break; case 3: c = '3'; break; case 4: c = '4'; break; case 5: c = '5'; break; case 6: c = '6'; break; case 7: c = '7'; break; case 8: c = '8'; break; default: c = '9'; break; } return c; } /******************************************************************************************************** *时间获取函数 ********************************************************************************************************/ unsigned int getTime(unsigned long ntime) { if(millis() < ntime) { return ((unsigned int)((millis() + (~ntime) + 1))); } else { return ((unsigned int)((millis() - ntime))); } } void Display_LED() { Light_sr = analogRead(Light_int);//读取光线值 // Serial.println("1: ");//测试用 // Serial.println(Light_sr);//测试用 if(Light_sr<5) { delay(1); if(analogRead(Light_int)<5) { blanktime = millis(); while(Light_sr<30) { Light_sr = analogRead(Light_int); if((millis()-blanktime)>=5000) { number = 0; counct.intData = number; EEPROM.write(1,counct.byteData[0]); EEPROM.write(2,counct.byteData[1]); hexToBCD(number); d.displayString(line); d.displayOn(); delay(2000); ks = 0; break; } else { ks=1; } // Serial.println("2: "); //测试用 // Serial.println(Light_sr); //测试用 } } } if(ks) //环境变暗,即投下硬币 { ks = 0; number++; Serial.print("number:"); Serial.println(number); counct.intData = number; EEPROM.write(1,counct.byteData[0]); EEPROM.write(2,counct.byteData[1]); hexToBCD(number); d.displayString(line); d.displayOn(); } } </pre> == FAQ == == 版本历史记录 == {| border="1" cellspacing="0" align="left" cellpadding="0" width="60%" style="text-align:center;" |- style="text-align:center;background-color:#6fa8dc;color:#fffff;" !width="10%"|Version !!width="15%"| Date !! <small>新增/删除/修复</small> |- | V1.2|| || style="text-align:left"| |}
返回至
硬币存款机
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
软件
Labplus软件
mPython软件
Mixly集成盛思版
mpython_conn
教学套件
创客初级实验箱
创客初级实验箱进阶版
创客中级实验箱
创客中级实验箱Ⅱ
人工智能交互实验箱
桌面机器人
乐动魔盒
可穿戴作品电子套件
创意触摸板套装
乐动魔块中级套装
乐动魔块高级套装
bot:bit
编程造物套装
逻辑造物套装
人工智能套装
物联网套装
高中信息技术套装
掌控板初级套装
初中信息技术材料包
开源硬件教学套装
冲锋舟
造物
Arduino
乐动魔块(旧版)
Blue:bit电子积木
MicroBit系列
掌控板系列
AI摄像头V1.0
AI摄像头V2.0
1956
掌控魔盒
乐动掌控
乐动魔块
互动作品
森林奇遇记
创客森林
创客乐园
物联网演示系统
博物馆防盗演示实验系统
梦想舞台演示实验系统
智能家居演示实验系统
智能教室演示实验系统
智能停车场演示实验系统
DIY-木板系列
嘘寒问暖
硬币存款机
吼一声试试
斜不胜正灯
时光葫芦
旋转转盘
越光宝盒
治愈系萌犬
光明使者
避障机械车
DIY-亚克力系列
情绪机器人
创意七彩灯
温湿度机器人
留言机
游龙戏灯
三色时钟
光影精灵
光影时钟
智能应用系列
LED眼镜
32x16 RGB LED点阵屏
DIY环境温湿度显示系统
DIY创客空间访客记录仪
其他
金属结构件套装
耗材存取管理柜
更多
课程资源
常见问题解答
Arduino语法参考手册
链接
Labplus官网
STEAM创客教育平台
工具
链入页面
相关更改
特殊页面
页面信息