0
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:在函数中'无效设置()':

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

/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEPROM/EEPROM.h:143:5:错误:本地类模板中成员模板的声明无效< typename T > const T &put( int idx , 常量 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 旋钮CC = 14; int buttonCC = 15; ^

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

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

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:31:60: 警告:未使用的变量 'buttonCC' [-Wunused-variable] int knobChan = 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; 诠释行为 = 1; ^

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

/Users/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:33:警告:未使用的变量“行为”[-Wunused-variable] int kPin = 0;诠释 bPin = 0; 诠释行为 = 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 退出状态 1 在“{”标记之前不允许函数定义

4

1 回答 1

0

您的问题是文件的前两行。在第一行你开始定义你的设置函数,在第二行你开始一个行注释,然后是一些文本。这应该是块注释。

要解决您的问题,请删除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:错误:在 '{' 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时没有在任何地方实际定义它。你可能错过了包括图书馆。

于 2019-11-04T09:01:29.957 回答