Всем привет!
Мне надо сделать алгортим своей программы.
#include <SPI.h>
#include <TMRpcm.h>
#include <EEPROM.h>
#define SD_ChipSelectPin 10 //using digital pin 10 for CS, can use other pins
#define microphone_pin A1 //using analog pin A7 for MAX9814 output,can use other pins
TMRpcm audio; // create an object for use in this sketch
int RecordNumber; //variable for the record number
char FileName[20]; //sets the amount of memory for the name of the audio file
int recordState = 0; // if the recording is going on
void setup() {
pinMode(12,OUTPUT); //for MISO. Pin pairs: 9,10 Mega: 5-2,6-7,11-12,46-45
Serial.begin(9600);
if (!SD.begin(SD_ChipSelectPin)) { //check microsd card status
Serial.println("sd faild"); //a message to the serial monitor about the sd card fail
return;
}else{
Serial.println("SD OK"); //a message to the serial monitor about the sd card ok
}
// The audio library needs to know which CS pin to use for recording
audio.CSPin = SD_ChipSelectPin;
RecordNumber = EEPROM.read(0); //checking the last number of the audio file in memory
}
void loop() {
if(Serial.available()){ //Send commands over serial to play
switch(Serial.read()){
case 'r': //start recording by pressing a R-button on the computer keyboard. You need Serial monitor
Serial.println("button is pressed");
RecordNumber++; //increase the number in the name of the audio file
EEPROM.write(0, RecordNumber); //Writes a byte to the EEPROM memory at the specified address.
sprintf(FileName,"Audio_%d.wav", RecordNumber); //Convert data to string.change the name of the audio file
audio.startRecording(FileName,16000,microphone_pin); //Record at 16khz sample rate on pin A1
Serial.println("recording start"); //a message to the serial monitor about the beginning of the recording
delay(2*1000); //delay for counting 2 seconds for recording noise
Serial.println("please, swollow"); //a message to the serial monitor about the beginning of the experiment
break;
case 's': //stop recording by pressing a S-button on the computer keyboard. You need Serial monitor
audio.stopRecording(FileName); //Stop recording
Serial.println("recording stopped"); //a message to the serial monitor about the ending of recording
break;
}
}
}
´´´
Я скорее всего там допустил много ошибок. Может кто посмотреть и подсказать где что можно исправить?
Был бы очень благодарен за помощь.
Если программа Ваша, то кто ж лучше Вас её алгоритм знает?
Чтобы смотреть и исправлять, для начала неплохо бы знать что эта программа должна делать.
Она у Вас должна считать дату Пасхи? Или может управлять гужевой повозкой, дёргая вожжи по ПИД-алгоритму? Или это навигационная система для космического корабля? А может, она должна делать именно то, что и делает и ничего исправлять не надо?
Чтобы получить вразумительный ответ, для начала нужно задать вразумительный вопрос.
Понятно. Что и как должно работать, а также, что и куда подключено, мы должны догадываться сами.
Если Вам лень толково описать свою проблему, то что заставляет Вас думать, что кому-то не лень тереть волшебный шар или вытягивать из Вас подробности клещами для решения чужой проблемы?
Схема состоит их микрофона, ардуины и кард ридера для микроСД карты.
Схема подключения тут не важна, как я понимаю. ну я про распиновку
Работает так
Подключаем к юсб ардуину,
включаем монитор порта
Увидели сообщение СД ОК - можно посылать букву R
Получили сообщение SD failed - ошибка подключения, не читается карта.
когда отправили R - начинается запись аудиофайла и первые 2 секунды записывается просто шум. Потом в мониторе порта видим сообщение “пожалуйста, глотайте” (записываю просто звуки глотков воды)
Когда достаточно записали - отправляем в порт S и останавливаем запись
со строки 17 по 22 переписать на цикл, висеть в цикле, можно добавить в цикле delay(1000) - проверяем раз в секунду, пока не вставят и не прочитается SD карта
ну оно так и работает.
Отправляю буквы R и S в порт и делаю записи.
Я обратился только в спросьбой глянуть на нарисованный алгоритм. Правильно ли я его нарисовал.
Сомневаюсь я в том, как правильно выглядит на рисунке вот эта тема с отправкой букв в порт.
и как войд сетап правильно рисовать в таком случае
А зачем вам картинка с алгоритмом? Это курсовая, что ли? Тогда только ваш препод скажет, правильно она нарисована или нет
Хотя нет - кое-что и я могу сказать. Например, ваш алгоритм заканчивается в нижнем правом углу на прямоугольнике break, хотя на самом деле программа исполняется в цикле и оттуда должна идти стрелка обратно на проверку новой введенной буквы.
Добавка
Кстати, не такая уж эта картинка и бесполезная. Например, разглядывая схему - я пришел к выводу, что у вас нет проверки на нажатие “r” во время, когда уже идет запись. И точно так же с командой “s”. Глянул в код - и правда нет блокировки.
Правильно было бы сделать, чтобы когда идет запись, система игнорировала нажатие “r”. И тоже самое с командой “s”.