错误,此处不允许在'{'标记之前使用函数定义:for teensy 3.2 arduino

时间:2019-11-04 05:18:19

标签: arduino teensy

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循环代码块中遇到错误,我不知道到底是什么问题,为什么会给我以下错误:在'{'标记之前不允许使用函数定义

这是我第一次尝试这段代码,所以我不知道出什么问题了

请帮助,因为这对我的课堂很重要。我真的很感激! :)

更新:这是我收到的错误消息:

  

Arduino:1.8.10(Mac OS X),主板:“ Teensy 3.2 / 3.1,串行,96 MHz   (超频),更快,美国英语”

     

包含在以下文件中   /Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:28:0:   /Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:   在函数“ void setup()”中:

     

/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:136:5:   错误:本地类中的成员模板的声明无效        template T&get(int idx,T&t){        ^

     

/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:143:5:   错误:本地类中的成员模板的声明无效        template const T&put(int idx,const T&t){
       ^

     

Test1KnobberCode:37:14:错误:不允许使用功能定义   在'{'标记void setup(){之前                 ^

     

Test1KnobberCode:54:13:错误:不允许使用功能定义   在'{'令牌void loop(){之前                ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:5:   警告:未使用的变量'knobChan'[-Wunused-variable] int toggleChan   = 1; int buttonChan = 1; int旋钮CC = 14; int buttonCC = 15;        ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:23:   警告:未使用的变量'buttonChan'[-Wunused-variable] int   toggleChan = 1; int buttonChan = 1; int旋钮CC = 14; int buttonCC = 15;                          ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:43:   警告:未使用的变量'knobCC'[-Wunused-variable] int cursorChan =   1; int buttonChan = 1; int旋钮CC = 14; int buttonCC = 15;                                              ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:60:   警告:未使用的变量'buttonCC'[-Wunused-variable] int toggleChan   = 1; int buttonChan = 1; int旋钮CC = 14; int buttonCC = 15;                                                               ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:5:   警告:未使用的变量'kPin'[-Wunused-variable] int kPin = 0;整型   bPin = 0; int行为= 1;        ^

     

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:19:   警告:未使用的变量'bPin'[-Wunused-variable] int kPin = 0;整型   bPin = 0; int行为= 1;                      ^

     

/Users/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;                     ^

     

/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:   警告:未使用的变量“已切换” [-Wunused-variable]布尔值   已切换=否;            ^

     

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   退出状态1不允许在'{'之前的功能定义   令牌

1 个答案:

答案 0 :(得分:0)

您的问题是文件的前两行。在第一行中,您开始定义设置功能,在第二行中,开始行注释,然后是一些文本。这应该是一个整体注释。

要解决您的问题,请删除void setup() {并将行注释更改为块注释/*的开头。

更新:您的错误消息输出显然支持我的回答。看看这个简化的错误:

  

在Test1KnobberCode.ino包含的文件中: EEPROM.h:在函数“ void setup()”中:

因此,这里的编译器告诉我们EEPROM库中有一个错误(这是极不可能的,因此这是我们可能自己搞砸了的第一个提示)

  

EEPROM.h:错误:本地类模板中成员模板的声明无效<类型名T> T&get(int idx,T&t){

这是确切的错误。模板类的声明看起来有些问题。确切的错误可能无关紧要,因为问题就在我们这边。

  

Test1KnobberCode:错误:'{'标记之前的功能定义在此处 void setup(){

另一个暗示我们已经操了。在这里,编译器告诉我们,我们不能在此处定义void setup()(因为我们当前在函数的范围内)

  

Test1KnobberCode:错误:'{'标记之前的功能定义在这里不允许 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时并没有在任何地方定义它。您可能错过了包括图书馆在内的机会。