Алгоритм программы

Всем привет!
Мне надо сделать алгортим своей программы.

#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;
      } 
  }
}
´´´

Я скорее всего там допустил много ошибок. Может кто посмотреть и подсказать где что можно исправить?
Был бы очень благодарен за помощь.

прошу простить за косяк с первым сообщением.
я вроде поставит три обратных кавычек
но мой текст оказался в коде

Если программа Ваша, то кто ж лучше Вас её алгоритм знает?

Чтобы смотреть и исправлять, для начала неплохо бы знать что эта программа должна делать.

Она у Вас должна считать дату Пасхи? Или может управлять гужевой повозкой, дёргая вожжи по ПИД-алгоритму? Или это навигационная система для космического корабля? А может, она должна делать именно то, что и делает и ничего исправлять не надо?

Чтобы получить вразумительный ответ, для начала нужно задать вразумительный вопрос.

1 лайк

Программа для записей аудиофайлов
микрофон, ардуино и микросд карта.
Отправляем в мониторе порта R - старт записи
Отправляем S - стоп

Понятно. Что и как должно работать, а также, что и куда подключено, мы должны догадываться сами.

Если Вам лень толково описать свою проблему, то что заставляет Вас думать, что кому-то не лень тереть волшебный шар или вытягивать из Вас подробности клещами для решения чужой проблемы?

Успехов Вам!

2 лайка

Мой косяк, признаю

Схема состоит их микрофона, ардуины и кард ридера для микроСД карты.
Схема подключения тут не важна, как я понимаю. ну я про распиновку

Работает так
Подключаем к юсб ардуину,
включаем монитор порта
Увидели сообщение СД ОК - можно посылать букву R
Получили сообщение SD failed - ошибка подключения, не читается карта.

когда отправили R - начинается запись аудиофайла и первые 2 секунды записывается просто шум. Потом в мониторе порта видим сообщение “пожалуйста, глотайте” (записываю просто звуки глотков воды)

Когда достаточно записали - отправляем в порт S и останавливаем запись

со строки 17 по 22 переписать на цикл, висеть в цикле, можно добавить в цикле delay(1000) - проверяем раз в секунду, пока не вставят и не прочитается SD карта

нет, это вы описали, как оно должно работать.
Но если бы оно так и работало - вы бы не пришли.
А теперь опишите, как оно на самом деле работает.

строки 35-36 как-то напрягают, не?

ну оно так и работает.
Отправляю буквы R и S в порт и делаю записи.

Я обратился только в спросьбой глянуть на нарисованный алгоритм. Правильно ли я его нарисовал.
Сомневаюсь я в том, как правильно выглядит на рисунке вот эта тема с отправкой букв в порт.
и как войд сетап правильно рисовать в таком случае

а что с этими строчками?
в 35 строке идет построение названия файла, так скажем.
в 36 старт записи

Arduino: 1.8.9 (Linux), Плата:“Arduino Uno”

exit status 1
‘class TMRpcm’ has no member named ‘startRecording’

а я бы пообсуждал с Евгением Петровичем эту конструкцию…

А зачем вам картинка с алгоритмом? Это курсовая, что ли? Тогда только ваш препод скажет, правильно она нарисована или нет :slight_smile:

Хотя нет - кое-что и я могу сказать. Например, ваш алгоритм заканчивается в нижнем правом углу на прямоугольнике break, хотя на самом деле программа исполняется в цикле и оттуда должна идти стрелка обратно на проверку новой введенной буквы.

Добавка
Кстати, не такая уж эта картинка и бесполезная. Например, разглядывая схему - я пришел к выводу, что у вас нет проверки на нажатие “r” во время, когда уже идет запись. И точно так же с командой “s”. Глянул в код - и правда нет блокировки.
Правильно было бы сделать, чтобы когда идет запись, система игнорировала нажатие “r”. И тоже самое с командой “s”.

@ЕвгенийП я об этой конструкции веде речь…else тут конечно безальтернативное

1 лайк