本帖最后由 ITEAD创易工作室 于 2015-3-11 09:41 编辑
Hello,小伙伴们好久不见了。在此先祝各位在2015年扬眉吐气,喜气洋洋!
这次带来的教程是使用Gboard做一个老人手机,一键拨打5个预设号码,可接听,可挂断。
或许你觉得现在的老人手机满大街都是,便宜到白送了。但是所谓的老人手机不过是按键大点,音量大点而已,操作按键还是那么多。
对于一些60岁以上的老人,特别是老太太,可能一辈子也没用过手机,打个电话还要叫老伴或者年轻人代劳。
当然,这只是我们的初衷,希望能给你带来不一样的想法。
制作很简单,先上我DIY的实物效果图。
需要准备的材料有:
将sim卡插入到Gboard背面的sim卡槽。硬件连接如下图所示:
按钮电子积木也是3pin的接口,这里没有画出G 和 V了。使用3pin杜邦线直接连接即可。
需要使用的库下载地址:http://pan.baidu.com/s/1o67eIy2 解压后放到libraries文件夹下面。如果libraries文件夹里面已经有以前下载过的sim900相关库文件,需要暂时删除或者压缩备份,以免有相同文件名冲突。
打开Arduino IDE软件。将以下代码复制黏贴到编辑框:
连接foca到电脑,选择board类型为“Arduino Duemilanove w/atmega328”,选择相应的串口。编译烧写。
代码上传完成了,DIY一个操作外壳吧。
最后使用电源适配器给Gboard供电即可。开机自启动sim900模块。其中一个按钮是用来挂断和接听电话的,一键两用。
插上麦克风和耳机就可以通话了。妈妈再也不用担心不会用智能手机打电话了!
升级版老人手机
继上一篇【给妈妈做的老人手机】发出后,很多小伙伴们觉得5个预设号码太少了,由此我们推出升级版本:【给妈妈做的NFC老人手机】
先上我DIY 的最终效果图:
需要的材料有:
另外因为涉及到用RDM8800给13.56MHz的白卡写入号码,建议购买两个RDM8800,这样可以方便后续添加联系人,只有一个的话需要重新搭建,比较麻烦。(上图硬件清单一套的价钱在300元左右,不包括sim卡和外设)
硬件连接如下图所示,分为写卡和读卡两部分:
写卡部分的硬件连接图:
直接使用的是串口通信。
读卡打电话部分的硬件连接图:
将sim卡插入到sim900模块背面的sim卡槽,foca达到5V的一边。按钮电子积木可以用3Pin杜邦线接到rdm8800,另外的G和V刚好可以给sim900模块供电。sim900模块也是直接用的串口通信。
打开Arduino IDE软件。连接foca到电脑,选择board类型为“Iteaduino Lite”,选择相应的串口。
首先给RDM8800烧写写入电话号码的代码: - [/align]
- #include <;PN532.h>
- #include <SPI.h>
- const int LED = 3;
- #define PN532_CS 10
- PN532 nfc(PN532_CS);
- int num_length=0;
- uint8_t writeBuffer[16];
- uint8_t written=0;
- #define NFC_DEMO_DEBUG 1
- void setup(void) {
- Serial.begin(9600);
- nfc.begin();
- nfc.SAMConfig();
-
- }
- void loop(void) {
- Serial.println("Enter your phone number!\n");
- while(!Serial.available());
- delay(500);
- while(Serial.available())
- {
- writeBuffer[num_length]= Serial.read();
- num_length++;
- }
- writeBuffer[num_length] = ';';
- num_length++;
- while(num_length!=16)
- {
- writeBuffer[num_length] = ' ';
- num_length++;
- }
- for(uint8_t i=0;i<16;i++)
- {
- Serial.write(writeBuffer[i]);
- }
- num_length=0;
- written = 0;
- Serial.println();
- uint32_t id;
- // look for MiFare type cards
- id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
- if (id != 0)
- {
- #ifdef NFC_DEMO_DEBUG
- Serial.print("Read card #");
- Serial.println(id);
- Serial.println();
- #endif
- uint8_t keys[]= {
- 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };
- if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //authenticate block 0x08
- {
- //if authentication successful
- if(written == 0) //Not written
- {
- written = nfc.writeMemoryBlock(1,0x08,writeBuffer); // Write writeBuffer[] to block 0x08
- if(written)
-
- #ifdef NFC_DEMO_DEBUG
- Serial.println("Write Successful");
- #endif
- }
-
-
-
- uint8_t block[16];
- //read memory block 0x08
- if(nfc.readMemoryBlock(1,0x08,block))
- {
- #ifdef NFC_DEMO_DEBUG
- Serial.println("Read block 0x08:");
- //if read operation is successful
- for(uint8_t i=0;i<16;i++)
- {
- //print memory block
- Serial.print(block[i],HEX);
- Serial.print(" ");
- }
- Serial.println();
- Serial.println();
- Serial.println();
- Serial.println();
- #endif
- }
- }
- //while(1);
- }
- else
- {
- Serial.println("can't find your card!");
-
- }
- }
- [align=left]
复制代码
代码上传完成后打开串口监视器,把卡放在天线板上,在输入框输入一个电话号码,回车,即可写入号码。换下一张卡,输入号码,回车。 接下来给另一套打电话的RDM8800烧写读卡代码,如果只有一套,需要重新接线和烧写代码: - [/align]
- #include <PN532.h>
- #include <SPI.h>
- #define delaytime 5000
- #define timeout1 5000
- #define timeout2 7000
- byte comm_buf[20];
- const int LED = 3;
- #define PN532_CS 10
- PN532 nfc(PN532_CS);
- //#define NFC_DEMO_DEBUG 1
- unsigned int frame_format;
- unsigned char id_buffer[10];
- uint32_t old_id;
- unsigned long lasttime=0;
- unsigned long prev_time=0;
- unsigned char r_buffer[30];
- void setup(void) {
- Serial.begin(9600);
- nfc.begin();
- nfc.SAMConfig();
- pinMode(LED,INPUT);
- delay(5000);
-
- lasttime = millis();
-
- }
- void loop(void) {
-
- uint32_t id;
- // look for MiFare type cards
- id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
-
-
- if (id != 0)
- {
- if(old_id != id)
- {
- old_id = id;
- while(Serial.available())
- Serial.read();
-
-
- uint8_t keys[]= { 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF };
- if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //authenticate block 0x08
- {
- //if authentication successful
- uint8_t block[16];
- //read memory block 0x08
- if(nfc.readMemoryBlock(1,0x08,block))
- {
- Serial.print("ATD");
- int a=0;
- while(block[a]!=' ')
- {
- Serial.write(block[a]);
- a++;
- }
- Serial.println();
- delay(200);
- }
-
- }
-
-
- }
- lasttime = millis();
-
- }
-
-
- if(millis() - lasttime > delaytime)
- {
- lasttime = millis();
- old_id=0;
- }
-
-
- if(digitalRead(LED)==0)
- {
- delay(100);
- while(!digitalRead(LED)==1);
- Serial.flush();
- //Serial.setTimeout(1000);
- Serial.println("AT+CPAS");
- if(Serial.find("+CPAS: 3"))
- {
- delay(100);
- Serial.println("ATA");
- }
- else
- {
- Serial.println("ATH");
- }
- delay(100);
- Serial.flush();
- }
- }
复制代码
代码上传完成了,按下sim900模块上的power键开机,然后把刚写好电话号码的白卡放到打电话的天线板上刷一下。稍等片刻手机或者固话即可收到来电。插上麦克风和耳机就可以通话了。用双面胶固定在盒子里。
伙伴们可还记得这个盒子是做什么用的?
另外的一个按钮是用来挂断和接听电话的,一键两用。注意:因为程序里面有延迟,按键的时候需要按住1秒再放开才生效。 视频后续添加。
最后祝大家天天开心,父母身体健康!
|