Дека Adafruit с esp32
Правление: Совет по развитию ESP32
Я пытаюсь заставить код деки adafruit работать на ESP32. Я установил espSoftwareSerial, но я продолжаю получать ошибки с их примером кода.
Я получаю
testcode:13:50: error: use of deleted function 'SoftwareSerial::SoftwareSerial(const SoftwareSerial&)'
SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);
/*
Меню управляемое управление звуковой платы над UART.
Команды для игры по # или по имени (полное имя 11-char)
Жесткий сброс и список файлов (когда не воспроизводится аудио)
Vol + и - (только если не воспроизводится аудио)
Пауза, отмена паузы, прекращение воспроизведения (при воспроизведении звука)
Текущее время воспроизведения и оставшиеся байты и общее количество байтов (при воспроизведении аудио)
Подключите UG к земле, чтобы звуковая плата загрузилась в режим UART
*/
#include <SoftwareSerial.h>
#include "Adafruit_Soundboard.h"
// Выберите любые два контакта, которые можно использовать с SoftwareSerial для RX & TX
#define SFX_TX 5
#define SFX_RX 6
// Подключение к первому контакту на звуковой панели
#define SFX_RST 4
// Вы также можете следить за контактом ACT во время воспроизведения звука!
// мы будем использовать программное обеспечение последовательный
SoftwareSerial ss = SoftwareSerial(SFX_TX, SFX_RX);
// передайте последовательный код программного обеспечения Adafruit_soundboard, второй
// аргумент-это отладочный порт (на самом деле не используется) и третий
// arg-это контакт сброса
Adafruit_Soundboard sfx = Adafruit_Soundboard(&ss, NULL, SFX_RST);
// также можно попробовать аппаратный последовательный порт с помощью
// Adafruit_Soundboard sfx = Adafruit_Soundboard(&Serial1, NULL, SFX_RST);
void setup() {
Serial.begin(115200);
Serial.println("Adafruit Sound Board!");
// softwareserial at 9600 baud
ss.begin(9600);
// can also do Serial1.begin(9600)
if (!sfx.reset()) {
Serial.println("Not found");
while (1);
}
Serial.println("SFX board found");
}
void loop() {
flushInput();
Serial.println(F("What would you like to do?"));
Serial.println(F("[r] - reset"));
Serial.println(F("[+] - Vol +"));
Serial.println(F("[-] - Vol -"));
Serial.println(F("[L] - List files"));
Serial.println(F("[P] - play by file name"));
Serial.println(F("[#] - play by file number"));
Serial.println(F("[=] - pause playing"));
Serial.println(F("[>] - unpause playing"));
Serial.println(F("[q] - stop playing"));
Serial.println(F("[t] - playtime status"));
Serial.println(F("> "));
while (!Serial.available());
char cmd = Serial.read();
flushInput();
switch (cmd) {
case 'r': {
if (!sfx.reset()) {
Serial.println("Reset failed");
}
break;
}
case 'L': {
uint8_t files = sfx.listFiles();
Serial.println("File Listing");
Serial.println("========================");
Serial.println();
Serial.print("Found "); Serial.print(files); Serial.println(" Files");
for (uint8_t f=0; f<files; f++) {
Serial.print(f);
Serial.print("\tname: "); Serial.print(sfx.fileName(f));
Serial.print("\tsize: "); Serial.println(sfx.fileSize(f));
}
Serial.println("========================");
break;
}
case '#': {
Serial.print("Enter track #");
uint8_t n = readnumber();
Serial.print("\nPlaying track #"); Serial.println(n);
if (! sfx.playTrack((uint8_t)n) ) {
Serial.println("Failed to play track?");
}
break;
}
case 'P': {
Serial.print("Enter track name (full 12 character name!) >");
char name[20];
readline(name, 20);
Serial.print("\nPlaying track \""); Serial.print(name); Serial.print("\"");
if (! sfx.playTrack(name) ) {
Serial.println("Failed to play track?");
}
break;
}
case '+': {
Serial.println("Vol up...");
uint16_t v;
if (! (v = sfx.volUp()) ) {
Serial.println("Failed to adjust");
} else {
Serial.print("Volume: "); Serial.println(v);
}
break;
}
case '-': {
Serial.println("Vol down...");
uint16_t v;
if (! (v=sfx.volDown()) ) {
Serial.println("Failed to adjust");
} else {
Serial.print("Volume: ");
Serial.println(v);
}
break;
}
case '=': {
Serial.println("Pausing...");
if (! sfx.pause() ) Serial.println("Failed to pause");
break;
}
case '>': {
Serial.println("Unpausing...");
if (! sfx.unpause() ) Serial.println("Failed to unpause");
break;
}
case 'q': {
Serial.println("Stopping...");
if (! sfx.stop() ) Serial.println("Failed to stop");
break;
}
case 't': {
Serial.print("Track time: ");
uint32_t current, total;
if (! sfx.trackTime(¤t, &total) ) Serial.println("Failed to query");
Serial.print(current); Serial.println(" seconds");
break;
}
case 's': {
Serial.print("Track size (bytes remaining/total): ");
uint32_t remain, total;
if (! sfx.trackSize(&remain, &total) )
Serial.println("Failed to query");
Serial.print(remain); Serial.print("/"); Serial.println(total);
break;
}
}
}
/************************ MENU HELPERS ***************************/
void flushInput() {
// Read all available serial input to flush pending data.
uint16_t timeoutloop = 0;
while (timeoutloop++ < 40) {
while(ss.available()) {
ss.read();
timeoutloop = 0; // If char was received reset the timer
}
delay(1);
}
}
char readBlocking() {
while (!Serial.available());
return Serial.read();
}
uint16_t readnumber() {
uint16_t x = 0;
char c;
while (! isdigit(c = readBlocking())) {
//Serial.print(c);
}
Serial.print(c);
x = c - '0';
while (isdigit(c = readBlocking())) {
Serial.print(c);
x *= 10;
x += c - '0';
}
return x;
}
uint8_t readline(char *buff, uint8_t maxbuff) {
uint16_t buffidx = 0;
while (true) {
if (buffidx > maxbuff) {
break;
}
if (Serial.available()) {
char c = Serial.read();
//Serial.print(c, HEX); Serial.print("#"); Serial.println(c);
if (c == '\r') continue;
if (c == 0xA) {
if (buffidx == 0) { // the first 0x0A is ignored
continue;
}
buff[buffidx] = 0; // null term
return buffidx;
}
buff[buffidx] = c;
buffidx++;
}
}
buff[buffidx] = 0; // null term
return buffidx;
}
/************************ MENU HELPERS ***************************
@James, 👍1
Обсуждение0
Смотрите также:
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Библиотека программных материалов для плат SAMD
- Контакты ESP32 не помещаются в беспаянную макетную плату
- Uno - ESP32 SoftwareSerial связь не работает
- После восстановления смещения BNO055 на датчике все значения калибровки равны 0.
- Увеличить частоту дискретизации на плате ESP32
- Нужен ESP32 для использования 3 последовательных портов
- Дата и время GPS не отображаются правильно в Arduino Uno,NEO6M GPS модуль
Держу пари, что код деки Adafruit не для ESP32. Но вам не обязательно использовать SoftwareSerial на ESP32! Он имеет множество “реальных” (аппаратных) последовательных портов. Вместо этого используйте "Сериал1` или "Сериал2". Для некоторых простых примеров кода [см. Здесь](https://circuits4you.com/2018/12/31/esp32-hardware-serial2-example/). Вам также придется изменить "ПЕРВЫЙ" контакт на контакт, который фактически доступен на ESP32 (GPIO4 нет)., @StarCat