- 使用的软件环境为:Arduino IDE
- #include <SD.h>
- #include <SPI.h>
- #include "DFRobot_GDL.h"
- #include "DFRobot_Picdecoder_SD.h"
- #include "DFRobot_SpeechSynthesis.h"
- #include "DFRobot_ASR.h"
- DFRobot_SpeechSynthesis_I2C ss;
- DFRobot_Picdecoder_SD decoder;
- DFRobot_ASR asr;
-
-
- /*ESP32 and ESP8266*/
-
- #define TFT_DC 25
- #define TFT_CS 14
- #define TFT_RST 26
- #define TFT_SD 13
-
- //屏幕设置
- DFRobot_ILI9341_240x320_HW_SPI screen(/*dc=*/TFT_DC,/*cs=*/TFT_CS,/*rst=*/TFT_RST);
-
- File root;
- int i;
- int j;
- int k;
- int num;
- void setup()
- {
- num=5;
- k=1;
- //初始化串行端口
- Serial.begin(115200);
- //初始屏幕
- screen.begin();
- //语音识别初始化
- asr.begin(PASSWORD);
- asr.addCommand("xiao tian xiao tian",0);
- asr.addCommand("zi dong bo fang",1);//自动播放模式
- asr.addCommand("yu yin kong zhi",2);//语音控制模式
- asr.addCommand("xia yi zhang",3);//播放下一张
- asr.addCommand("shang yi zhang",4);//播放上一张
- //开始识别
- asr.start();
- //语音合成初始化
- ss.begin();
- ss.speak(F("班级智能电子相册"));
- Serial.println("OK");
- //初始化SD卡,等待初始化成功
- while(1)
- {
- if (SD.begin(/*sdcs=*/TFT_SD))
- {
- Serial.println("initialization done.");
- break;
- }
- Serial.println("initialization failed!");
- }
- //显示开机画面
- decoder.drawPicture(/*filename=*/"/picture/0.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
-
-
- }
- void loop()
- {
- j=asr.read();
- switch(j) //判断识别内容,在有识别结果的情况下asr.read()会返回识别到的词条编号,否则返回-1
- {
- case 0: //若是唤醒指令“小天 小天”,唤醒语音识别模块,并随机响应
- switch(random(0,5))
- {
- case 0:
- ss.speak(F("嗯"));
- break;
- case 1:
- ss.speak(F("我在"));
- break;
- case 2:
- ss.speak(F("在听"));
- break;
- case 3:
- ss.speak(F("来了"));
- break;
- case 4:
- ss.speak(F("您说"));
- break;
- case 5:
- ss.speak(F("在了"));
- break;
- }
- break;
- case 1://开启自动播放模式
- k=0;
- ss.speak(F("自动播放模式"));
- break;
- case 2://开启语音控制播放模式
- k=1;
- ss.speak(F("语音控制播放模式"));
- break;
- case 3: //处理显示下一张照片时的照片序号
- if(k==1){
- if(i<num-1)
- {
- i++;
- }
- else
- {
- i=0;
- }
- }
- break;
- case 4: //处理显示上一张照片的照片序号
- if(k==1){
- if(i>0)
- {
- i--;
- }
- else
- {
- i=num;
- }
- }
- break;
- }
- if(k==0 &&(j==-1 || j==1) )//自动播放模式下,处理显示照片序号
- {
-
- if(i<num-1)
- {
- i++;
- }
- else
- {
- i=0;
- }
- delay(1000);
- }
- if(k==1 && (j==3 ||j==4)||k==0 )//显示照片
- {
- switch(i)
- {
-
- case 0:
- decoder.drawPicture(/*filename=*/"/picture/1.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
- ss.speak(F("军训的第二天,在军训中,我们很苦很累,但这是一种人生体验,战胜自我,锻炼意志的最佳良机。"));
-
- break;
- case 1:
- decoder.drawPicture(/*filename=*/"/picture/2.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
- ss.speak(F("看我的被子叠的怎么样?"));
-
- break;
- case 2:
- decoder.drawPicture(/*filename=*/"/picture/3.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
- ss.speak(F("第一次阅读励志信时,激动的心如波涛汹涌的大海,久久不能平静。因为他给了我们太多心灵上的触动,他让我们振奋精神,养成良好习惯、改正坏习惯,发现自己的闪光点。"));
-
- break;
- case 3:
- decoder.drawPicture(/*filename=*/"/picture/4.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
- ss.speak(F("每次考试后,班级通过表彰对优秀学生的良好表现予以充分肯定和褒扬,同时也充分发挥先进典型的示范引领及激励作用,激励更多的同学见贤思齐、奋发进取。"));
-
- break;
- case 4:
- decoder.drawPicture(/*filename=*/"/picture/5.jpg",/*sx=*/0,/*sy=*/0,/*ex=*/screen.width(),/*ey=*/screen.height(),/*screenDrawPixel=*/screenDrawPixel);
- ss.speak(F("对优秀学生进行有效表彰,可全面调动我们学习的积极性、促进我们全面发展、给我们创设良好的教学环境"));
-
- break;
-
- }
-
- }
- }
-
- //这个函数的功能是在屏幕上画一个像素
- void screenDrawPixel(int16_t x, int16_t y, uint16_t color)
- {
- //在屏幕上画一个点
- screen.writePixel(x,y,color);
- }
复制代码
程序中首先对屏幕、语音合成及语音识别模块进行初始化,并利用声音提醒初始化完成,显示开机画面。
当检测到唤醒词“xiao tian xiao tian”将唤醒语音识别模块,使用“zi dong bo fang”,开启“自动播放模式”;使用“yu yin kong zhi”,开启“语音控制模式”。
当在“语音控制模式”下,使用关键词“xia yi zhang”、“shang yi zhang”可上下翻页。
在播放照片的同时,语音合成模块用语音播报“照片简介”。