BASIC4MCU | 질문게시판 | 아두이노와 아트메가 동시에 사용할떄요
페이지 정보
작성자 허니 작성일2018-06-03 21:26 조회15,115회 댓글3건본문
계속 음성인식V3 관련해서 질문올려요 ㅠㅠ
직접 코딩하기 너무 버거워서 일단 인터넷보고 공부하고 있습니다
찾다보니 http://www.makewith.co/page/manual/109 이 사이트를 참고했는데요
작성자분이 완성한 코드를 여기에 올려보면
#include <Servo.h>
#include <SoftwareSerial.h>
#include "VoiceRecognitionV3.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
VR myVR(2,3);
SoftwareSerial btSerial(4, 5); //t,r
byte buffer[1024];
uint8_t records[7]; // save record
uint8_t buf[64];
int tt=0 ;
int Relay = 6;//6번 릴레이
#define zero (0) //멈춰줘
#define one (1) //전진해
#define two (2) //후진해
#define three (3) //좌회전
#define onRecord (14) //불켜줘
#define offRecord (15) //불꺼줘
#define goldRecord (16) //우회전
void printSignature(uint8_t *buf, int len)
{
int i;
for(i=0; i<len; i++){
if(buf[i]>0x19 && buf[i]<0x7F){
Serial.write(buf[i]);
}
else{
Serial.print("[");
Serial.print(buf[i], HEX);
Serial.print("]");
}
}
}
void printVR(uint8_t *buf)
{
Serial.println("VR Index\tGroup\tRecordNum\tSignature");
Serial.print(buf[2], DEC);
Serial.print("\t\t");
if(buf[0] == 0xFF){
Serial.print("NONE");
}
else if(buf[0]&0x80){
Serial.print("UG ");
Serial.print(buf[0]&(~0x80), DEC);
}
else{
Serial.print("SG ");
Serial.print(buf[0], DEC);
}
Serial.print("\t");
Serial.print(buf[1], DEC);
Serial.print("\t\t");
if(buf[3]>0){
printSignature(buf+4, buf[3]);
}
else{
Serial.print("NONE");
}
Serial.println("\r\n");
}
void setup() {
btSerial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(3,0);
lcd.print("0123456");
myVR.begin(9600);
Serial.begin(115200);
pinMode(Relay,OUTPUT); //릴레이모듈
if(myVR.clear() == 0){
Serial.println("Recognizer cleared.");
}else{
Serial.println("Not find VoiceRecognitionModule.");
Serial.println("Please check connection and restart Arduino.");
while(1);
}
if(myVR.load((uint8_t)zero) >= 0){
Serial.println("멈춰");
}
if(myVR.load((uint8_t)one) >= 0){
Serial.println("전진");
}
if(myVR.load((uint8_t)two) >= 0){
Serial.println("후진");
}
if(myVR.load((uint8_t)three) >= 0){
Serial.println("좌회전");
}
if(myVR.load((uint8_t)onRecord) >= 0){
Serial.println("불켜");
}
if(myVR.load((uint8_t)offRecord) >= 0){
Serial.println("불꺼");
}
if(myVR.load((uint8_t)goldRecord) >= 0){
Serial.println("우회전");
}
}
void loop() {
if(Serial.available())
{
delay(5);
while(Serial.available())
{
btSerial.write(Serial.read());
}
}
int ret;
ret = myVR.recognize(buf, 50);
if(ret>0){
switch(buf[1]){
case onRecord:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("on led");
digitalWrite(Relay,HIGH);
break;
case offRecord:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("off led");
digitalWrite(Relay,LOW);
break;
case zero:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("stop");
btSerial.write('0');
delay(10);
break;
case one:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("go!");
btSerial.write('1');
delay(10);
break;
case two:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("back");
btSerial.write('2');
delay(10);
break;
case three:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("left");
btSerial.write('3');
delay(10);
break;
case goldRecord:
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Right");
btSerial.write('4');
delay(10);
break;
default:
Serial.println("Record function undefined");
break;
}
/** voice recognized */
printVR(buf);
}
Serial.println("000000000000");
}
이렇게 됩니다.
녹음된 목소리와 128을 연동할때 어떻게 해야할지 모르겠습니다.
EX) 녹음된 0번 "멈춰줘"를 말함. 음성모듈-아두이노-ATMEGA128을 거쳐 ATMEGA128과 하드웨어적으로 연결된 모터진동을 하려고합니다.
일단 128DATA SHEET를 보니 RXD0가 PE0에 있어서 이 핀과 아두이노의 TX핀을 연결해야하지않을까 생각되는데요...
어떻게 하면 좋을까요 정 안되면 모듈 포기하고 새로 마이크단자 사서 따로 해야하야하나 고민됩니다..
댓글 3
조회수 15,115master님의 댓글
master 작성일아두이노 시리얼 모니터로 정상적으로 동작이 되는지 확인 해보셨나요?
허니님의 댓글
허니
네 녹음된 음성을 말하니 시리얼 모니터에 변화가 있었어요!
VR Index Group RecordNum Signature
0 None 0 on
이렇게 나왔어요!
허니님의 댓글
허니
녹음된 음성이 제대로 뜨는 것을 확인했는데 이제 이걸 바탕으로 어떻게 아트메가에 보내야할지 그걸 모르겠어요 ㅠㅠ 일단 저는 아트메가 PE0번(RXD)핀에 보내려고 합니다!