Ожидаемый неквалифицированный идентификатор перед «общедоступным»
Я делаю программу Arduino для зуммера, для которого вы можете записывать ноты и песни, а затем воспроизводить их. У меня есть 2 массива, которые содержат как высоту звука, так и воспроизводимую ноту. Я продолжаю получать сообщения об ошибках ожидаемый неквалифицированный идентификатор перед 'public'
.
Кто-нибудь знает, как это исправить?
void setup()
{
Serial.begin(9600);
pinMode(5, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
}
void freePlayMode()
{
int readP = analogRead(0);
int readB = digitalRead(5);
readP = map(readP, 0, 1023, 300, 2000);
Serial.println(readP);
if (readB == LOW)
{
tone(4, readP);
}
else
{
noTone(4);
}
}
void recordMode()
{
int readS2 = digitalRead(12);
if (readS2 == LOW)
{
rec();
}
else
{
if (readS2 == HIGH)
{
playBack();
}
}
}
void rec()
{
static public int recordings[99999999] = {NULL};
static public int notes[99999999] = {NULL};
int state;
static unsigned long i = 0;
int readP = analogRead(0);
int readB = digitalRead(5);
readP = map(readP, 0, 1023, 300, 2000);
Serial.println(readP);
if (readB == LOW)
{
tone(4, readP);
}
else
{
noTone(4);
}
if (i < 99999999)
{
if (readB == HIGH)
{
state == 0;
}
else
{
state == 1;
}
recordings[i] = state;
notes[i] = readP;
i++;
}
}
void playBack()
{
}
void loop()
{
int readS1 = digitalRead(14);
if (readS1 == LOW)
{
freePlayMode();
}
else
{
if (readS1 == HIGH)
{
recordMode();
}
}
}
@Techno Taco, 👍0
1 ответ
Лучший ответ:
static public int recordings[99999999] = {NULL}
Это недопустимый код C. Удалите слово public
.
Также вы не можете создать такой большой массив. У Arduino всего 2 КБ (SRAM) памяти, а также, поскольку она статическая, вам нужно напрямую заполнять ее значениями, например:
static int recordings[5] = { 0, 1, 2, 3, 4 };
Сколько значений вы хотите сохранить?
Если вам нужно довольно много (например, сотни), я бы использовал другое решение для массива state
, так как он хранит только значения 0 или 1. Например, вы можете использовать массивы uint8_t которые стоят всего 1 байт на элемент, но еще лучше было бы хранить 8 0 или 1 (булевых) значений в одном байте каждое, но это означает, что вы должны сами получить/установить значения в правильных индексах.
- Esp8266 Vin контакт
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Как добавить в массив из String в ардуино?
- Объявление и использование массива структур в Arduino
- Отправка данных из ESP8266 в PHP
- ОТА-программа SPIFFS на ESP8266
- Порт Arduino OTA не обновляется в Arduino IDE
- Поддерживает ли Arduino C++ динамические массивы объектов ?
Спасибо. Да, массивы израсходовали много памяти. Я ценю помощь., @Techno Taco
Пожалуйста., @Michel Keijzers