Ожидаемый неквалифицированный идентификатор перед «общедоступным»

Я делаю программу 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();
  }
}





}

, 👍0


1 ответ


Лучший ответ:

2
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 (булевых) значений в одном байте каждое, но это означает, что вы должны сами получить/установить значения в правильных индексах.

,

Спасибо. Да, массивы израсходовали много памяти. Я ценю помощь., @Techno Taco

Пожалуйста., @Michel Keijzers