Ошибка: определение функции не допускается здесь до токена '{': для teensy 3.2 arduino

void setup() {
  // 
SysEx Config Message Structure:
0xF0 # SysEx message start byte
0x14 # Manufacturer ID; 0x14 is actually Fairlight, but I don't forsee too many conflicts here... 
0x01 # Knobber knob channel number
0x01 # Knobber button channel number
0x0E # Knobber knob CC number
0x0F # Knobber button CC number
0x01 # Knobber button behaviour (0 = momentary, 1 = toggle)
0xF7 # SysEx message end byte

*/

#include <Bounce.h>
#include <EEPROM.h>

// Default settings - will be overwritten if EEPROM values are present.
int knobChan = 1; int buttonChan = 1; int knobCC = 14; int buttonCC = 15; 
int kPin = 0; int bPin = 0; int behaviour = 1;
int inputAnalog, ccValue, iAlag;
boolean toggled = false;
Bounce button0 = Bounce(0,5);

void setup() {
  //MIDI rate
  Serial.begin(31250);
  pinMode(bPin, INPUT_PULLUP);
  delay(5);
  knobChan =  EEPROM.read(1); 
  usbMIDI.sendControlChange(44, knobChan, 2);
  delay(5);
  buttonChan = EEPROM.read(2); 
  delay(5);
  knobCC = EEPROM.read(3);    
  delay(5);
  buttonCC = EEPROM.read(4);
  delay(5);
  behaviour = EEPROM.read(5);
}

void loop() {
  // put your main code here, to run repeatedly:
  // Check for SysEx config message
  if(usbMIDI.read() && usbMIDI.getType() == 7) {                
     if (usbMIDI.getData1() > 1 && usbMIDI.getData1() < 9) {
        // unpack SysEx
        byte * sysbytes = usbMIDI.getSysExArray();
        if (sysbytes[0] == 0xf0 && sysbytes[7] == 0xf7) { // Good length; legit sysex.
          if(sysbytes[1] == 0x14) {  // It's either Knobber or a Fairlight CMI...
              // 2, 3, 4, 5 and 6 can now be written to EEPROM and to global vars
              EEPROM.write(1, sysbytes[2]);
              knobChan = sysbytes[2];
              EEPROM.write(2, sysbytes[3]);
              buttonChan = sysbytes[3];
              EEPROM.write(3, sysbytes[4]);
              knobCC = sysbytes[4];
              EEPROM.write(4, sysbytes[5]);
              buttonCC = sysbytes[5];
              EEPROM.write(5, sysbytes[6]);
              behaviour = sysbytes[6];

          }          
        }
     } 
 }


  if(behaviour > 0) {
      // Pushbutton - MOMENTARY behaviour
      button0.update();
      if (button0.fallingEdge()) {
          usbMIDI.sendControlChange(buttonCC, 127, buttonChan);
      }
      if (button0.risingEdge()) {
          usbMIDI.sendControlChange(buttonCC, 0, buttonChan);
      } 
  } else {      
      // Pushbutton - TOGGLE behaviour
      button0.update();
      if(button0.fallingEdge()) {
         if (toggled) {
             usbMIDI.sendControlChange(buttonCC, 0, buttonChan);
             toggled = false;
         } else {
             usbMIDI.sendControlChange(buttonCC, 127, buttonChan);
            toggled = true;
         } 
      }
  }

  inputAnalog = analogRead(kPin);  
  if(abs(inputAnalog - iAlag) > 7) {  
    // calc the CC value based on the raw value
    ccValue = inputAnalog/8;                                
    // Invert the pot value (because I soldered it backwards...)
    int inverted = map(ccValue, 127, 0, 0, 127);            
    // send the MIDI
    usbMIDI.sendControlChange(knobCC, inverted, knobChan);                                  
    iAlag = inputAnalog;
  }

  delay(5); // limits message frequency
}

Я получаю сообщение об ошибке в блоке кода void loop, я не знаю, что именно не так и почему это дает мне следующую ошибку: определение функции не допускается здесь до токена '{'

Я впервые пробую этот код, поэтому не знаю, что не так

Пожалуйста, помогите, так как это важно для моего класса. Я был бы очень признателен! :)

ОБНОВЛЕНИЕ: вот сообщения об ошибках, которые я получаю:

Arduino: 1.8.10 (Mac OS X), плата: «Teensy 3.2 / 3.1, последовательный, 96 МГц (разгон), быстрее, английский (США)»

В файле, включенном из /Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:28:0: /Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h: In function 'void setup ()':

/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:136:5: ошибка: недопустимое объявление шаблона члена в шаблоне локального класса ‹typename T> T & get (int idx, Т & т) {^

/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:143:5: ошибка: недопустимое объявление шаблона члена в шаблоне локального класса ‹typename T> const T & put (int idx , const T & t) {
^

Test1KnobberCode: 37: 14: ошибка: определение функции не допускается здесь до '{' token void setup () {^

Test1KnobberCode: 54: 13: ошибка: определение функции не допускается здесь до '{' token void loop () {^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:5: предупреждение: неиспользуемая переменная 'knobChan' [-Wunused-variable] int knobChan = 1; int buttonChan = 1; int knobCC = 14; int buttonCC = 15; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:23: предупреждение: неиспользуемая переменная 'buttonChan' [-Wunused-variable] int knobChan = 1; int buttonChan = 1; int knobCC = 14; int buttonCC = 15; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:43: предупреждение: неиспользуемая переменная 'knobCC' [-Wunused-variable] int knobChan = 1; int buttonChan = 1; int knobCC = 14; int buttonCC = 15; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:60: предупреждение: неиспользуемая переменная 'buttonCC' [-Wunused-variable] int knobChan = 1; int buttonChan = 1; int knobCC = 14; int buttonCC = 15; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:5: предупреждение: неиспользуемая переменная 'kPin' [-Wunused-variable] int kPin = 0; int bPin = 0; int behavior = 1; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:19: предупреждение: неиспользуемая переменная 'bPin' [-Wunused-variable] int kPin = 0; int bPin = 0; int behavior = 1; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:33: предупреждение: неиспользуемая переменная 'поведение' [-Wunused-variable] int kPin = 0; int bPin = 0; int behavior = 1; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:33:5: предупреждение: неиспользуемая переменная 'inputAnalog' [-Wunused-variable] int inputAnalog, ccValue, iAlag; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:33:18: предупреждение: неиспользуемая переменная 'ccValue' [-Wunused-variable] int inputAnalog, ccValue, iAlag; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:33:27: предупреждение: неиспользуемая переменная 'iAlag' [-Wunused-variable] int inputAnalog, ccValue, iAlag; ^

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:34:9: предупреждение: неиспользуемая переменная 'toggled' [-Wunused-variable] boolean toggled = false; ^

Test1KnobberCode: 116: 1: ошибка: ожидается '}' в конце ввода} ^

Для "Bounce.h" найдено несколько библиотек. Используется: /Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/Bounce. Для "EEPROM.h" найдено несколько библиотек. Используется: /Applications/Arduino.app / Contents / Java / hardware / teensy / avr / libraries / EEPROM exit status 1 определение функции не допускается здесь перед маркером '{'


person Bh1992    schedule 04.11.2019    source источник


Ответы (1)


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

Чтобы устранить проблему, удалите void setup() { и измените комментарий строки на начало комментария блока /*.

Обновление: вывод вашего сообщения об ошибке явно поддерживает мой ответ. Взгляните на эту упрощенную ошибку:

В файле, включенном в Test1KnobberCode.ino: EEPROM.h: В функции 'void setup ()':

Итак, здесь компилятор сообщает нам, что в библиотеке EEPROM есть ошибка (что очень маловероятно, так что это первый намек на то, что мы, вероятно, испортили что-то сами)

EEPROM.h: ошибка: недопустимое объявление шаблона элемента в шаблоне локального класса ‹typename T> T & get (int idx, T & t) {

Это точная ошибка. Похоже, что-то не так с объявлением шаблонного класса. Точная ошибка, скорее всего, не имеет значения, потому что проблема на нашей стороне.

Test1KnobberCode: ошибка: определение функции не допускается здесь до '{' token void setup () {

Еще один намек на то, что мы облажались. Здесь компилятор сообщает нам, что мы не можем определить здесь void setup() (потому что в настоящее время мы находимся в области видимости функции)

Test1KnobberCode: ошибка: определение функции не допускается здесь перед маркером '{' void loop () {

Тот же намек, что и раньше, только с void loop()

Итак, чтобы прояснить мой anser: измените это (первые 16 строк вашего кода)

void setup() {
  // 
SysEx Config Message Structure:
0xF0 # SysEx message start byte
0x14 # Manufacturer ID; 0x14 is actually Fairlight, but I don't forsee too many conflicts here... 
0x01 # Knobber knob channel number
0x01 # Knobber button channel number
0x0E # Knobber knob CC number
0x0F # Knobber button CC number
0x01 # Knobber button behaviour (0 = momentary, 1 = toggle)
0xF7 # SysEx message end byte

*/

#include <Bounce.h>
#include <EEPROM.h>

к этому

/*
SysEx Config Message Structure:
0xF0 # SysEx message start byte
0x14 # Manufacturer ID; 0x14 is actually Fairlight, but I don't forsee too many conflicts here... 
0x01 # Knobber knob channel number
0x01 # Knobber button channel number
0x0E # Knobber knob CC number
0x0F # Knobber button CC number
0x01 # Knobber button behaviour (0 = momentary, 1 = toggle)
0xF7 # SysEx message end byte
*/

#include <Bounce.h>
#include <EEPROM.h>
#include <usbmidi.h> //see note below

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

person Fitzi    schedule 04.11.2019
comment
Спасибо. Я попытался удалить комментарий и / *, но разницы не было. Кроме того, ошибка выделяется в разделе пустого цикла. Если у вас есть какие-либо советы по этому поводу, я был бы очень признателен! - person Bh1992; 04.11.2019
comment
Включение всего вывода ошибок вашего компилятора очень поможет - person Fitzi; 04.11.2019
comment
Это именно то, что я получаю, когда нажимаю "Подтвердить", чтобы проверить скетч: статус выхода 1, здесь определение функции не допускается до токена '{' - person Bh1992; 04.11.2019
comment
Это интересно, если я вставляю код в свою IDE arduino и нажимаю "Подтвердить", я получаю около 100 строк сообщений об ошибках. - person Fitzi; 05.11.2019
comment
Я вставляю это в приложение arduino на своем Mac, но использую с ним плату teensy 3.2 / 3.1. так что, возможно, именно поэтому большинство ошибок, которые вы получаете, решаются с помощью этого - person Bh1992; 05.11.2019
comment
на самом деле, как только я вставляю сообщение об ошибке в слово, я получаю более одной ошибки. так ты прав - person Bh1992; 05.11.2019
comment
Пожалуйста, отредактируйте свой вопрос и включите полное сообщение об ошибке, которое вы получите тогда - person Fitzi; 05.11.2019
comment
Спасибо за совет, только что сделал :) - person Bh1992; 05.11.2019