Компоненты
За основу устройства я взял недорогой MP3-кодек VS1011E. На самом деле разумнее было бы выбрать более продвинутые VS1053 или VS1063 или обновленную версию VS1011 — VS1003 (у нее тактовая частота выше), стоят они все примерно одинаково.
Однако вникать в эти тонкости я не стал и остановился на первой попавшейся микросхеме. В качестве контроллера я взял STM32F103C8T6, чтобы можно было сделать макет, используя готовую плату Blue Pill, а уже потом собрать все по-серьезному. Экран я выбрал TFT, разрешение — 128 на 160 (ST7735). У меня для него уже есть написанные ранее библиотеки.
Код, как и в случае с телефоном, мы будем писать на C с использованием библиотек libopencm3 и FatFs.
Устройство будет работать просто: читать данные из файла на флешке и скармливать кодеку, а все остальное кодек сделает сам.
Формирование звука на Arduino
Несмотря на то, что платформа Arduino, в основном, предназначена для работы с цифровыми устройствами, в архитектуру микроконтроллеров входят аналого-цифровой и цифро-аналоговый преобразователи и несколько каналов широтно-импульсной модуляции. Это позволяет осуществлять захват звуковых сигналов и их воспроизведение. Платформа Ардуино включает в себя как 8-битные AVR контроллеры, так и мощные 32 битные ARM процессоры. Принцип воспроизведения файлов Arduino MP3 не позволяет обеспечить высокое качество звука, поскольку с выхода контроллера снимаются импульсы прямоугольной формы (меандр), отличающиеся от идеального синусоидального сигнала.
Самым бюджетным модулем платформы Ардуино, является Arduino UNO с микроконтроллером ATmega 328, в котором интегрированы два 8-битных и один 16-битный счётчик, каждый из которых может быть использован для генерации ШИМ. Контроллеры получают сигналы от внешних источников и выдают свои собственные сигналы через порты ввода/вывода (GPIO). Теоретически порты микроконтроллера предназначены для работы с уровнями логического нуля и логической единицы, тем не менее, выводы GPIO позволяют оцифровывать аналоговые сигналы с ограничением по уровню и генерировать сигналы различной формы с помощью ШИМ и фильтра низких частот. Внешние данные могут поступать разными способами, но основным методом оцифровки звукового сигнала является использование АЦП.
Так же данные могут поступать на микроконтроллер через первый разряд порта ввода/вывода. Аналого-цифровой преобразователь позволяет точно оцифровывать входной сигнал с разрешением до 10 бит. Оцифровка может выполняться на более высокой скорости преобразования, но при этом уменьшается точность, так как два младших бита игнорируются. После того как входной сигнал был оцифрован и прошёл необходимые преобразования он может быть конвертирован в аналоговую форму через блок ШИМ. Амплитуда сигнала кодируется через соотношение длительностей логического нуля и логической единицы. Важным этапом обработки выходного сигнала является фильтрация, удаляющая высокочастотные компоненты модуляции. Так же фильтры ограничивают частотный диапазон звукового сигнала.
Для воспроизведения отдельных частот звукового диапазон можно использовать внутренний генератор Arduino. Для этого достаточно подключить к плате пьезоэлектрический динамик и задать простую функцию. Динамик подключается между контактами GND и «2» разъема Digital. Динамик нужно подключать через резистор 100 Ом. Далее задаётся конкретная функция. Выбирается контакт const byte dinPin = 2; Контакт настраивается как выходной pinMode (dinPin, output); //. Затем командой tone можно включить генератор с заданной частотой. Команда выглядит следующим образом: tone ( dinPin, 440 ) ; // Получился электронный камертон генерирующий ноту Ля первой октавы. Нота будет звучать до тех пор, пока генерация не прекратится командой noTone ( dinPin ); //
Когда нужна SD-карта
Некоторые проекты могут собирать большое количество данных, таких как данные датчиков, считываемые в течение месяца, которые вы хотите хранить постоянно. Этот большой объем данных, вероятно, не поместится в EEPROM. Кроме того, вы не сможете удобным образом перенести информацию на компьютер таким способом.
Тем не менее, если вы храните данные на SD-карте, вы можете легко переносить созданные файлы и работать с ними на любом компьютере с устройством для чтения SD-карт.
Эта статья покажет как подключить и использовать стандартный модуль SD-карты с Arduino. Весь код и тестовые программы можно найти в виде zip-файла в конце этой статьи.
Макет
Прежде чем переходить к коду, есть смысл собрать макет устройства (я вообще поклонник отладки программ на реальном железе). Берем плату Blue Pill и подпаиваем к ней модуль дисплея с картодержателем. Пайка позволяет нам не сталкиваться с проблемой дребезга соединений, которая может доставить много неприятностей на этапе отладки.
Тестовый модуль для VS1011 я собрал на макетке, использовав переходник с QNF48 на DIP, схему которого я посмотрел в даташите. На самом деле так заморачиваться необязательно — можно взять готовый модуль. Но у меня его не было, а ждать не хотелось.
В итоге я все это собрал за несколько часов и был готов переходить к коду.
Схема плеера
Макет устройства
Макетная плата кодека VS1011
Макетная плата кодека VS1011
Дисплей макета с ранним вариантом интерфейса
Файлы стандартной библиотеки C++ .lib
Стандартная библиотека C++ | Характеристики | Параметр | Директивы препроцессора |
---|---|---|---|
Многопоточная, статическая компоновка. | |||
Многопоточная, динамическая компоновка (импорт библиотеки для ) | , | ||
Многопоточная, статическая компоновка. | , | ||
Многопоточная, динамическая компоновка (импорт библиотеки для ) | , , |
При создании окончательной версии проекта одна из основных библиотек среды выполнения C ( , , ) по умолчанию связана в зависимости от выбранного параметра компилятора (многопоточная, DLL ). Если включить в код один из файлов заголовков стандартной библиотеки c++ , стандартная библиотека c++ будет автоматически связываться с Visual C++ во время компиляции. Пример:
Для совместимости на уровне двоичного кода одна библиотека импорта может задавать несколько DLL-файлов. Обновления версий могут ввести библиотеки dot — отдельные DLL-файлы, которые вводят новые функции библиотеки. например, Visual Studio 2017 версии 15,6 появились для поддержки дополнительных функций стандартной библиотеки, не нарушая работу двоичного интерфейса приложения (ABI), поддерживаемого . библиотека импорта, входящая в набор инструментов для Visual Studio 2017 версии 15,6, поддерживает обе библиотеки dll, а для этой версии устанавливается обе библиотеки dll. После доставки библиотека dot имеет фиксированный ABI и никогда не будет зависеть от библиотеки dot более поздней версии.
Разное
Использование сдвигового регистра 74HC595
Использование одного сдвигового регистра 74HC595
- ShftOut11 — Простая передача битов
- ShftOut12 — Один за одним
- ShftOut13 — Использование массива
- Управление светодиодами с помощью сдвигового регистра 74HC595
- Создание эффекта «бегущий всадник» с помощью сдвигового регистра 74HC595
- Гистограмма расстояния с помощью сдвигового регистра 74HC595 и ИК-датчика расстояния
Использование двух сдвиговых регистров 74HC595
- ShftOut21 — Два светодиодных счетчика от «0» до «255» (в двоичном формате)
- ShftOut22 — Поочередное зажигание 16 светодиодов
- ShftOut23 — Использование двух массивов
Использование сдвигового регистра CD4021B
Использование одного сдвигового регистра CD4021B
- ShftIn11 — Простой ввод данных
- ShftIn12 — Какая кнопка нажата?
- ShftIn13 — Проверка разных комбинаций
- ShftIn14 — Нажата ли кнопка?
Использование двух сдвиговых регистров CD4021B
- ShftIn21 — Простой ввод данных от двух сдвиговых регистров
- ShftIn22 — Проверка разных комбинаций на двух комплектах переключателей
- ShftIn23 — Печать включенных настроек
RFID
- Гайд по использованию RFID-ридера MFRC522 вместе с Arduino
- Защищенный доступ с помощью RFID-ридера MFRC522 и Arduino
LCD-дисплеи
- Гайд по использованию LCD-дисплея Nokia 5110 вместе с Arduino
- Вывод на LCD-дисплей произвольного текста и значения счетчика
- Прогресс-бар на LCD-дисплее
- Термостат с отображением информации на LCD-дисплее
Управление DC-моторами
- Управление DC-мотором при помощи Arduino
- Управление DC-мотором при помощи Arduino и потенциометра
- Управление двумя DC-моторами при помощи Arduino и Bluetooth
- Управление DC-мотором при помощи Arduino и драйвера моторов
Управление серводвигателями
- Управление серводвигателем с помощью потенциометра
- Радиальный ИК-датчик расстояния
- Радиальный ультразвуковой датчик расстояния
Управление RGB-светодиодом
- Управление RGB-светодиодом при помощи Arduino
- Управление RGB-светодиодом при помощи Arduino и Android-приложения
Последовательный порт
- Вывод значений потенциометра в последовательный порт
- Применение управляющих символов при выводе значений потенциометра в последовательный порт
- Эхо данных последовательного порта
- Различие между char и int
- Управление светодиодом отправкой одиночных символов
- Управление RGB-светодиодом отправкой последовательности цифр
- Управление цветом окна программы на Processing с помощью Arduino и потенциометра
- Управление RGB-светодиодом с помощью палитры цветов из программы на Processing
Использование библиотеки Keyboard
- Запись данных с датчиков в текстовый файл на ПК
- Блокировка ПК на основе показаний фоторезистора
- Управление курсором мыши
Использование библиотеки Wire
- Чтение данных с I2C-датчика температуры TC74A0-5.0VAT
- Чтение данных с I2C-датчика температуры TC74A0-5.0VAT с отображением данных на гистограмме и программе на Processing
Использование библиотеки SPI
- Регулировка яркости светодиодов с помощью двух SPI цифровых потенциометров MCP4231
- Регулировка яркости светодиодов и громкости динамика с помощью двух SPI цифровых потенциометров MCP4231
Использование библиотеки SD
- Запись произвольных данных на SD карту
- Чтение и запись произвольных данных на SD карту
- Чтение и запись произвольных данных на SD карту с использованием часов реального времени
- Регистратор прохода через дверь
Использование прерываний
Прерывания по таймеру
- Мигаем светодиодом с помощью прерывания по таймеру
- Музыкальный инструмент с помощью прерывания по таймеру и аппаратного прерывания
Программирование Arduino для проигрывания музыки
Когда вся аппаратная часть рассматриваемого проекта у вас уже готова вставьте SD карту в модуль для их чтения и выполните следующую последовательность действий:
Шаг 2. Добавьте этот Zip файл в вашу Arduino IDE при помощи выбора пункта меню Sketch->Include Library -> Add .ZIP Library как показано на рисунке ниже и выберите ZIP файл который вы только что скачали.
Шаг 3. Полный текст программы приведен в конце статьи, просто скопируйте и вставьте ее в вашу Arduino IDE, а потом загрузите ее в вашу плату Arduino. В этом разделе будут объяснены лишь наиболее значимые фрагменты программы.
Проигрывание аудио файла
Вы можете проигрывать аудио файл, хранящийся в Wav формате на SD карте, с помощью следующей команды:
music.play(«3.wav»); //object name.play (“FileName.wav”);
Перемотка вперед/назад аудио файла
В платформе Arduino нет прямых способов перемотки аудио файла вперед/назад, однако можно проигрывать аудиофайл с заданного фрагмента времени. При дополнительном программировании эту способность можно использовать для перемотки аудио файла.
music.play(«2.wav»,33); //проигрывание песни с 33-й секунды //objectname.play(“Filename.wav”,time in second);
Установка качества аудио
Скачанная нами библиотека обеспечивает два возможных уровня качества проигрывания музыки: в нормальном режиме и с двухкратной частотой дискретизации (2X oversampling).
music.quality(0); //Normal Mode music.quality(1); //2X over sampling mode
Установка уровня громкости
Громкость звучания музыки можно регулировать и программным путем с помощью ниже представленных строк кода. Но высокие уровни громкости, устанавливаемые программным путем, могут приводить к появлению искажений в аудиосигнале, поэтому по возможности используйте усиление аудио сигнала аппаратными способами.
music.setVolume(5); //установка уровня громкости 5 //objectname.setVolume(Volume level);
Загрузка библиотек и запуск SD card на Arduino
Чтобы подсоединиться к SD карте и свободно передавать на неё данные, потребуется написать немало кода, однако здесь нам поможет встроенная библиотека SD.
Библиотеку по работе с картами памяти можно найти на официальном сайте производителя микроконтроллера: https://www.arduino.cc/en/Reference/SD
Открыв подменю «образцов», найдите заготовку «cardinfo», именно её мы не будем использовать в качестве прописной функции при загрузке информации. Скетч пригодится лишь для проверки, опознаётся ли дополнительная память на устройстве. Проверяйте chipSelect, учитывая, что подключение идёт через 10 пин.
#include <SD.h> const int chipSelect = 4; void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. } Serial.print(“Initializing SD card…”); pinMode(10, OUTPUT); //iniot SD card if (!SD.begin(chipSelect)) { Serial.println(“Card failed, or not present”); return; } Serial.println(“card initialized.”); } void loop() { String dataString = “”; // read three sensors and append to the string for (int analogPin = 0; analogPin < 3; analogPin++) { int sensor = analogRead(analogPin); dataString += String(sensor); if (analogPin < 2) { dataString += “,”; } } // open the file. File dataFile = SD.open(“data.txt”, FILE_WRITE); // if the file is available, write to it: if (dataFile) { dataFile.println(dataString); dataFile.close(); } // if the file isn’t open else { Serial.println(“error opening data.txt”); } }
Если всё прошло удачно, то на экран выведется информация о типе файловой системы и объёме вашей SD-карты. Если же производитель подсунул вам не лучший продукт, могут возникнуть ошибки. Здесь проще купить новую флешку, чем бороться с ошибками файловой системы, изначально заложенными в девайс.
Когда вы получите отклик от системы, можете начинать подгружать библиотеки и нужные вам файлы. SD-карта полностью работает и подключена, однако не забудьте протестировать несколько типов файловых систем, дабы подобрать оптимальный вариант по скорости и потреблению ресурсов. В каждом конкретном случае эти параметры будут разными, поэтому не бойтесь экспериментировать.
Тестирование кард-ридера
Для тестирования кард-ридера было использовано:
- библиотека SDFat,
- модуль чтения карты с преобразователем уровней
- карта памяти Sandiska microSD емкостью 8 ГБ, отформатированная в FAT32.
Изначально был использован модуль для SD карт с делителями напряжения для преобразования уровней шины SPI (первое фото — справа). На тот момент это был единственный ридер в наличии, который оказался серьезной проблемой.
В документации библиотеки SDFat это вообще не приветствуется (делитель напряжения), и если мы хотим его использовать, желательно снизить частоту шины SPI вдвое (подробности – файл SdFat.html из папки extras библиотеки SDFat). В нашем случае очень простой скетч ReadWrite (создание файла – запись данных – считывание данных) из примера библиотеки не работал. В общем, времени с ней потратили предостаточно, что нельзя сказать о втором модуле тот, что с конвертером. С ним вообще нет никаких проблем — надежно записывает и считывает данные.
Для тестирования написан скетч, который каждые 5 секунд генерирует случайное число и сохраняет его на карту памяти вместе с информацией о времени генерации. Эти данные, разделенные символом табуляции, сохраняются в отдельных строках в файле csv. Данный файл, в свою очередь, можно открыть, например, в Excel и обработать в соответствии с вашими потребностями.
#include <SPI.h> #include <TimeLib.h> #include "SdFat.h" #define SD_CS_PIN SS SdFat sd; File file; ArduinoOutStream coutF(file); ArduinoOutStream coutS(Serial); void setup() { Serial.begin(9600); pinMode(SD_CS_PIN, OUTPUT); coutS << F("Initializing SD card...") << endl; if (!sd.begin(SD_CS_PIN)) { coutS << F("Initialization failed!") << endl; } else { coutS << F("Initialization done") << endl; coutS << F("Time\t\tValue") << endl; if (file.open("log.csv", FILE_WRITE)) { coutF << F("Time\t\tValue") << endl; file.flush(); } else { coutS << F("Cannot open file") << endl; } } //Генерируем случайное значение randomSeed(analogRead(0)); } void loop() { long val = millis() / 1000; int days = elapsedDays(val); int hours = numberOfHours(val); int minutes = numberOfMinutes(val); int seconds = numberOfSeconds(val); int randomValue = random(40, 60); printToSerial(days, hours, minutes, seconds, randomValue); printToFile(days, hours, minutes, seconds, randomValue); delay(5000); } void printToSerial(int days, int hours, int minutes, int seconds, int randomValue) { coutS << int(days); coutS << ":" << ((hours < 10) ? "0" : "") << int(hours); coutS << ":" << ((minutes < 10) ? "0" : "") << int(minutes); coutS << ":" << ((seconds < 10) ? "0" : "") << int(seconds); coutS << "\t" << randomValue << endl; } void printToFile(int days, int hours, int minutes, int seconds, int randomValue) { coutF << int(days); coutF << ":" << ((hours < 10) ? "0" : "") << int(hours); coutF << ":" << ((minutes < 10) ? "0" : "") << int(minutes); coutF << ":" << ((seconds < 10) ? "0" : "") << int(seconds); coutF << "\t" << randomValue << endl; file.flush();
В коде для экономии памяти контроллера строки хранятся во флэш-памяти. Еще одна удобная вещь — это класс ArduinoOutStream с SDFat, который позволяет более удобно комбинировать строки символов вместо длинных строк с функцией печати (для Serial и File).
Соединения контактов Arduino UNO и кард-ридера следующие:
Лабораторный блок питания 30 В / 10 А
Подробнее
- CS — вывод 10
- MOSI — вывод 11
- MISO — вывод 12
- CLK — вывод 13
В случае проблем также стоит запустить код из примера QuickStart. Код показывает информацию о подключении модуля и используемой карты памяти.
Используемая SdFat библиотека имеет хорошую функциональность, изучить которую можно с помощью встроенных примеров. Документация библиотеки находится в каталоге extras (файл SdFat).
Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров…
Подробнее
FAQ
Не компилируется
- Вы используете последнюю версию Arduino IDE?
- SimpleSDAudio_V1.00 требует, как минимум, V1.0.1 среды Arduino IDE. Также эта версия библиотеки была протестирована и хорошо работает со средой версии 1.6.1.
- SimpleSDAudio_V1.01 требует, как минимум, V1.0 среды Arduino IDE.
Неудача
- Вы правильно выбрали CS вывод для вашей SD карты? Раскомментируйте следующую строку
в примерах и введите сюда правильный номер вывода.
- Ваша плата расширения с SD картой может быть хреновой, и SD связь может быть возможна только при ограничении скорости. Попробуйте раскомментировать строку
в функции . Если это не помогло, то раскомментируйте и первую строку в этой функции и попробуйте снова. Если после этого инициализация заработала, то у вас плохая плата расширения.
Как использовать 16-битное аудио?
Если вы хотите использовать 16-битное аудио, то вам необходимо объединить 2 ШИМ выхода вместе с помощью резистора (смотрите выше). Выберите , если вам необходим один 16-битный выходной канал, или выберите , если вам необходимы два 16-битных выходных канала (работает только на Arduino Mega или с патчем Timer2).
4Чтение данных из флеш-памяти с помощью Arduino
Согласно документации, чтение из флешки выполняется посредством такой последовательности: отправка команды на чтение (1 байт), начальный адрес (3 байта), а далее запрашивается столько байтов, сколько хотим прочитать из ПЗУ. Собственно, мы будем передавать в ПЗУ 16 нулей. Так как SPI – синхронный интерфейс, нам в ответ вернутся 16 записанных в ПЗУ байтов. Вот такая диаграмма приводится в описании к микросхеме:
Диаграмма чтения данных из флеш-памяти 25L8005
Напишем скетч для чтения наших заветных 16-ти байт из микросхемы флеш-памяти 25L8005:
#include <SPI.h> const int SSPin = 10; const byte READ = 0x03; const byte ADDR1 = 0; const byte ADDR2 = 0; const byte ADDR3 = 0; void setup() { Serial.begin(9600); pinMode(SSPin, OUTPUT); SPI.begin(); } void loop() { SPISettings mySet(100000, MSBFIRST, SPI_MODE0); SPI.beginTransaction(mySet); digitalWrite(SSPin, LOW); SPI.transfer(READ); SPI.transfer(ADDR1); SPI.transfer(ADDR2); SPI.transfer(ADDR3); for (int i=0; i<16; i++) { byte data = SPI.transfer(0); Serial.print((char)data); } Serial.println(); digitalWrite(SSPin, HIGH); SPI.endTransaction(); delay(1000); // повторяем чтение каждую секунду }
Загрузим скетч в Arduino и откроем монитор последовательных портов. В мониторе, как и ожидалось, 1 раз в секунду будет выводиться наш массив, считанный из флеш-памяти с помощью Arduino.
Чтение из флеш-памяти с помощью Arduino и вывод в монитор последовательных портов
Вот как выглядит чтение из ПЗУ, если подключиться к линиям SPI логическим анализатором:
Временная диаграмма чтения данных из ПЗУ по SPI
Как видно, байты этого массива соответствуют кодам ASCII строки «HELLO, SOLTAU.RU», которые мы и записали в микросхему памяти 25L8005
Описание модуля для SD карты памяти
Работа с памятью SD в ардуино не представляет особых трудностей. Самым простым способом является подключение готового модуля и использование стандартной библиотеки. С этого варианта мы и начнем.
Универсальный модуль представляет собой обыкновенную плату, на которой помещены слот для карты, резисторы и регулятор напряжений. Он обладает следующими техническими характеристиками:
- Диапазон рабочих напряжений 4,5-5 В;
- Поддержка SD карты до 2 Гб;
- Ток 80 мА;
- Файловая система FAT 16.
Модуль SD-карты реализует такие функции как хранение, чтение и запись информации на карту, которая требуется для нормального функционирования прибора на базе микроконтроллера.
Естественно, у недорогих модулей карт памяти есть и недостатки. Например, самые дешевые и распространенные модели поддерживают только карты до 4Гб и почти все модули позволяют хранить на SD карте файлы объемом до двух гигабайт – это ограничение используемой в большинстве моделей файловой системы FAT.
Еще одним недостатком карт памяти является относительно долгое время записи, однако существуют пути работы с ней, позволяющие увеличить ее скорость работы. Для этого используется механизм кэширования, когда данные сначала копятся в оперативной памяти, а потом сбрасываются за раз на карту памяти.
Платы Arduino для работы с SD
Для работы с SD card существует несколько различных плат:
- Arduino Ethernet – эта плата оснащена специальным модулем для вывода данных. Для выхода CS используется контакт 4. Для правильной работы нужно применять команду SD.begin(4).
- Adafruit Micro-SD – это отладочная плата, которая используется при работе с Micro-SD картами.
- Sparkfun SD – закрепляется сверху Ардуино, для выхода CS использует 8 контакт. В новой версии платы есть соединение с 3.3 В и встроен шестиразрядный инвертор.
9 Replies to “Как сделать простой плеер из Arduino и SD-ридера”
Да как-то не уважительно га русскоязычном форуме не по-русски изъясняться. На польском форуме ляпни, так сразу «От курва. »
Друзья, дело не в уважении наверное…. От лица администрации закрываю на это глаза — лишь бы человек был хороший и мысли верные выражал. 60% конечно же читателей вряд ли поймёт о чем он, но… оставим на его усмотрение. Каждый отвечает за себя, а мы следим за порядком в целом.
може все ж отримаю допомогу ? і все ж піду з видаленням акаунта ? ідей все менше, а народ більше хвилює моя мова, а не те що можу знати. то не добре. якщо мені треба, лізу на китайскі на мексиканскі сайти, при умові що я по їх не «ботю» для ардуін використаю специфічний екранчик, були проблеми з бібліотеками, і ніхто не міг допомогти, пішов на сайт програмерів, мені важко писати російскою. я читаю але практично не пишу, або дуже безграмотно. а спілкувався довелось. мені треба в мене немає вибору. тому кому треба — той прочитає. а тут задаєш питання автору а він губиться, не розуміючи ні те що постить ні те про що спитали. думаю останній мій коммент . спробую більше не писати. звісно якщо не отримаю допомогу і мене таки видалять
для тех кто не в теме
может все же получу помощь ? и все же пойду с удалением акаунта ? идей все меньше, а народ больше волнует мой язык, а не то что могу знать. то не хорошо. если мне надо, лезу на китайские на мексиканские сайты, при условии что я по не их «ботю» для ардуино использую специфический экранчик, были проблемы с библиотеками, и никто не мог помочь, пошел на сайт програмерив, мне трудно писать по русски. я читаю но практически не пишу, или очень безграмотно. а общался пришлось. мне надо, у меня нет выбора. поэтому кому надо — тот прочитает. а здесь задаешь вопрос автору а он теряется, не понимая ни то что спросили, ни то о чем спросили. думаю последний мой коммент . попробую больше не писать. конечно если не получу помощь, и меня все же удалят:)
почему неуважительно? они давно привыкли не делать разницы между двумя языками. если кто на украинском форуме пишет на русском языке, они же не говорят что это неуважительно.
Это типо Чановский?
і навіщо ці складнощі ? моно матюкальник, причому без ЦАПа чомусь думаю що звук взагалі буде ніякий. ні індикації, нічого немає. така штука взагалі збирається на 1 AVR або на от такому девайсі: MP3-TF-16P чомусь думаю що буде якісне стерео, і всього-навсього 1 модуль. …. є бажання ? можна на RX TX навісити ардуіну і вже поставити екран кнопки гучність …….
Я ничего не понял, что ты сказал.
я теж нефіга не розумію в квантовій фізиці тому і намагаюсь туди не лізти
Пример использования
Пример макета
Это простая схема для воспроизведения файлов wav с помощью Arduino Nano v.3.0, она содержит 4 кнопки, каждая из которых будет воспроизводить определенный файл wav, загруженный на SD-карту.
Комплектующие
Компоненты
Ардуино Нано
Ардуино Нано
Адаптер SD-карты для Arduino
Адаптер SD-карты для Arduino
- Arduino Nano v3.0 (я использовал китайскую версию Funduino Nano);
- модуль SD-карты;
- SD Card;
- макетная доска;
- четыре пуговицы;
- четыре резистора 22 кОм;
- резистор 4,7 кОм;
- Транзистор BC546B NPN;
- оратор;
- перемычки.
Подготовка SD карты
Адаптер для SD-карты
Отформатируйте SD-карту
Преобразование аудиофайлов
- Отформатируйте SD-карту (убедитесь, что настройки форматирования такие же, как на скриншоте выше).
- Конвертируйте ваши аудиофайлы в файлы .WAV (я использовал программу конвертера частоты дискретизации Wav) со следующими параметрами:
- частота дискретизации: 16000 Гц;
- количество каналов: моно;
- количество бит на выборку: 8.
- Например, файлы Wav показаны ниже.
Веб-разработка
V8
Если Вам нужен удобный инструмент для работы с JavaScript, V8 подойдёт идеально.
Свои функции V8 реализует, используя специальные классы, написанные на с++ и объявленные в namespace V8. Работать с джава скрипт — структурами можно через привычную оболочку с++.
Схема взаимодействия объектов с++ и V8 реализована посредством использования v8::Handle (template-классов).
Установка V8 обычно не занимает много времени, а польза для тех, кому периодически приходится работать с JavaScript’ом, неоценима.
Кроме того, о библиотеках, с помощью которых могут взаимодействовать C++ и JavaScript очень любят спрашивать на собеседованиях. Поэтому даже, если вы не собираетесь работать с js , с V8 или другими подобными библиотеками лучше познакомиться.
WebKit
Так или иначе, почти все разработчики на разных этапах сталкиваются с необходимостью отображать web – элементы. Чтобы всё выглядело красиво и в коде, и в конечном отображении, а выполнение этой задачи не отнимало слишком много времени и сил, существует библиотека WebKit.
Некоторые программисты называют WebKit «чёрным ящиком», органично перерабатывающим html, css и JavaScript в полноценные веб-страницы.
Awesomium
Awesomium — это библиотека для интеграции браузера (на базе Chromium) в своё приложение. Библиотека имеет 2 режима работы: Offscreen и Windowed.
В режиме Offscreen отрисовка и работа скриптов на экране не отображается.
В режиме Windowed средствами библиотеки эффективно выполняется отрисовка в «окне приписки» и обработка активности мыши и клавиатуры.
Awesomium активно применяется в десятках разных приложений. Описаны случаи интеграции этой библиотеки в 3D игры.
Существенный минус – отсутствие активного сообщества, способного познакомить новичка с библиотекой, ответить на вопросы и исправить ошибки. А документация, доступная для работы с Awesomium на с++, даёт довольно смутное представление о принципах работы библиотеки.
Тем не менее, Awesomium остаётся очень удобным инструментом, завоевавшим признание сотен разработчиков по всему миру.
> Купить в подарок или заказать уникальную вещь ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!
About SaorY
- Bluetooth-колонка на 40Вт своими руками — 21.05.2016
- Как сделать бетонную столешницу — 14.05.2016
- «Гигантская микросхема» или подставка для ног своими руками — часть 2 — 10.05.2016
- «Гигантская микросхема» или подставка для ног своими руками — часть 1 — 09.05.2016
- « Fantastic Plastic» или ЧПУ-фрезер для пластика своими руками — 08.05.2016
- Как сделать легендарный робот «Canbot» — 07.05.2016
- Как сделать магнитную панель для специй — 06.05.2016
- Как сделать POWERBANK из аккумулятора старого телефона — 05.05.2016
- Светильник «Ракета» своими руками — 04.05.2016
- Как сделать оригинальную подставку для книг — 03.05.2016
- Ночник со звездным узором своими руками — 02.05.2016
- Как сделать складной многофункциональный столик — 01.05.2016
- Столярный вытяжной стол — 30.04.2016
- «Пост-апокалиптические» очки своими руками — 17.04.2016
- Водонепроницаемый мешок своими руками (почти задаром) — 12.04.2016