错误 在"{"标记之前不允许函数定义:对于青少年 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循环块中遇到了一个错误,我不知道到底出了什么问题,为什么它会给我以下错误:在"{"标记之前,这里不允许函数定义

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

请帮忙,因为这对我们班很重要。我真的很感激!:)

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

Arduino:1.8.10(Mac OS X),板:"青少年3.2/3.1,串行,96 MHz(超频),更快,美国英语">

在包含的文件中/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:28:0:/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/librarys/EEPROM/EEPROM.h:在函数"void setup()"中:

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

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

Test1KnobberCode:37:14:错误:不允许函数定义此处位于"{"标记void setup()之前{^

Test1KnobberCode:54:13:错误:不允许函数定义此处位于"{"标记void loop()之前{^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:31:5:警告:未使用的变量'knobHan'[-Wunused variable]int knobHan=1;int buttonChan=1;int knobCC=14;int buttonCC=15;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:31:23:警告:未使用的变量'buttonChan'[-Wunused variable]intknobHan=1;int buttonChan=1;int knobCC=14;int buttonCC=15;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:31:43:警告:未使用的变量'knobC'[-Wunused variable]int knobHan=1.int buttonChan=1;int knobCC=14;int buttonCC=15;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:31:60:警告:未使用的变量"buttonCC"[-Wunused variable]int knobHan=1;int buttonChan=1;int knobCC=14;int buttonCC=15;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:5:警告:未使用的变量'kPin'[-Wunused variable]int kPin=0;intbPin=0;int behavior=1;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:32:19:警告:未使用的变量"bPin"[-Wunused variable]int kPin=0;intbPin=0;int behavior=1;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:32:33:警告:未使用的变量"behavior"[-Wunused variable]int kPin=0;int bPin=0;int behavior=1;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:33:5:警告:未使用的变量"inputAnalog"[-Wunused variable]intinputAnalog,ccValue,iAlag;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:33:18:警告:未使用的变量"ccValue"[-Wunused variable]intinputAnalog,ccValue,iAlag;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KinobberCode.ino:33:27:警告:未使用的变量"iAlag"[-Wunused variable]int inputAnalog,ccValue,iAlag;^

/用户/bharatvangani/Documents/Arduino/Test1KnobberCode/Test1KnobberCode.ino:34:9:警告:未使用的变量"toggled"[-Wunused variable]布尔值toggled=false;^

Test1KnobberCode:116:1:错误:输入结束时应为"}"}^

为"Bounce.h"找到了多个库已使用:/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/Bunse找到多个"EEPROM.h"库已使用:/Applications/Arduino.app/Contents/Java/hardware/teensy/avr/libraries/EEEPROM退出状态1在"{"之前此处不允许有函数定义代币

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

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

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

在Test1KnobberCode.ino:EEPROM.h:在函数"void setup()"中:

所以这里编译器告诉我们在EEPROM库中有一个错误(这是非常不可能的,所以这是我们可能自己搞砸的第一个提示)

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

这就是确切的错误。模板类的声明似乎有问题。确切的错误可能并不重要,因为问题在我们这边。

Test1KnobberCode:错误:在"{"tokenvoid setup(){之前,这里不允许函数定义

又一次暗示我们搞砸了。这里编译器告诉我们,我们不能在这里定义void setup()(因为我们目前在一个函数的范围内)

Test1KnobberCode:错误:在"{"tokenvoid 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,而实际上并没有在任何地方定义它。你可能错过了图书馆。

最新更新