Assistant4r

A&A-Assistant

Как это работает

Экран управления

Работа с микроконтроллером

Разрешения

 

Имеется два подхода для работы с микроконтроллерной платформой. Как указывалось в предыдущих пунктах, в пункте “ Голосовые настройки ” имеется опция выбора микрофон “встроенный” или “внешний”.

Рассмотрим первый вариант выбора — микрофон “встроенный”.

Для понимания работы с этим вариантом нам подойдет решение представленное для приложения A&A-Scheduler в разделе “Работа с микроконтроллером ”.

Для этого воспользуемся платформу ардуино NANO, пьезо динамик, 5(шт.) светодиодов, 6(шт.) резисторов. Платформа ардуино NANO уже интегрирована с USB UART контролером и имеет USB разъем. Необходимо загрузить программу в микроконтроллер. Для этого воспользуемся “Arduino IDE”. Скетч для загрузки (здесь):

//
const int piezo_pin = 4;
//
const String inOtklik = «stm»;
const String outOtklik = «rtmA»;
const String outOtklik2 = «rtmB»;
//
String command = «»;
boolean statusCommand = false;
//
String inputString = «»;
boolean strimAudio = false;
//
int ledState1 = LOW;
int ledState2 = LOW;
int ledState3 = LOW;
int ledState4 = LOW;
int ledState5 = LOW;
//
int led1 = 6;
int led2 = 7;
int led3 = 8;
int led4 = 9;
int led5 = 10;
//
unsigned long startTime = 0;
unsigned long curTime = 0;
long delta = 2000;
//
void toLedOn (String str){
if (str.length()>5){
char *chars = str.c_str();
//
if(chars[1]==’1′)ledState1 = HIGH;
if(chars[2]==’1′)ledState2 = HIGH;
if(chars[3]==’1′)ledState3 = HIGH;
if(chars[4]==’1′)ledState4 = HIGH;
if(chars[5]==’1′)ledState5 = HIGH;
//
digitalWrite(led1, ledState1);
digitalWrite(led2, ledState2);
digitalWrite(led3, ledState3);
digitalWrite(led4, ledState4);
digitalWrite(led5, ledState5);
}
return;
}
void toLedOff (){
//
ledState1 = LOW;
ledState2 = LOW;
ledState3 = LOW;
ledState4 = LOW;
ledState5 = LOW;
//
digitalWrite(led1, ledState1);
digitalWrite(led2, ledState2);
digitalWrite(led3, ledState3);
digitalWrite(led4, ledState4);
digitalWrite(led5, ledState5);
return;
}
void sound1(int l) {
tone(piezo_pin,600);
delay(500);
if (l==2){
tone(piezo_pin,900);
delay(500);
}
noTone(piezo_pin);
return ;
}
//
void setup() {
Serial.begin(115200);
inputString.reserve(200);
//
pinMode(piezo_pin, OUTPUT);
//
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
sound1(1);
Serial.print(outOtklik2);
}

void loop() {
if(statusCommand){
statusCommand=false;
if(command == inOtklik){
delay(2200);
Serial.print(outOtklik);
sound1(2);
}else{
toLedOn (command);
startTime = millis();
}
}
if(startTime != 0){
curTime = millis();
if(curTime > startTime+delta){
startTime=0;
toLedOff ();
}
}
}
void serialEvent() {
while (Serial.available()) {
//
char inChar = (char)Serial.read();
//
if (inChar == ‘A’) {
command = inputString;
statusCommand = true;
inputString=»»;
} else {
inputString += inChar;
}
}
}

Рассмотрим второй вариант выбора — микрофон “внешний”.

Этот вариант предусмотрен для того когда фраза активации, т.е. в пункте “ Голосовые настройки ” выбранное значение “отклик”, поступает на Андроид устройство не через микрофон, а через микроконтроллерную платформу к которому подключен микрофон. Важно отметить, что для остальных команд необходим микрофон Андроид устройства. То есть в данном случае используются два микрофона.