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