Ошибка определения функции здесь недопустима до токена '{': для teensy 3.2 arduino - PullRequest
0 голосов
/ 04 ноября 2019
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, Serial, 96 МГц (разгон), быстрее, английский (США) "

В файле, включенном в /Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:28:0: /Applications/Arduino.app/Contents/Java / аппаратное обеспечение / teensy / avr / library / EEPROM / EEPROM.h: в функции 'void setup ()':

/ Applications / Arduino.app / Содержание / Java / аппаратное обеспечение / teensy / avr / library /EEPROM / EEPROM.h: 136: 5: ошибка: недопустимое объявление шаблона элемента в локальном шаблоне класса T & get (int idx, T & t) {^

/ Applications / Arduino.app / Содержание/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:143:5: ошибка: недопустимое объявление шаблона члена в локальном шаблоне класса 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;^

/ Пользователи / 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;^

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

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

/ Пользователи / bharatvangani / Documents / Arduino / Test1KnobberCode / Test1KnobberCode.ino: 32: 33: предупреждение: неиспользуемая переменная 'поведение' [-Wunused-variable] int kPin = 0;int bPin = 0;поведение int = 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;^

/ Пользователи / 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] логическая переменная toggled = false;^

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

Для "Bounce.h" найдено несколько библиотек. Использовано: /Applications/Arduino.app/Содержание / Java / аппаратное обеспечение / teensy / avr / library / Bounce Для «EEPROM.h» было найдено несколько библиотек. -определение здесь не допускается до '{' токена

1 Ответ

0 голосов
/ 04 ноября 2019

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

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

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

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

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

EEPROM.h: error: неверное объявление шаблона члена в локальном шаблоне класса T & get (int idx, T & t) {

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

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

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

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

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

Итак, чтобы уточнить мой ответ: измените это (первые 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, фактически нигде не определяя его. Вы, вероятно, пропустили, включая библиотеку.

...