我是arduino和C ++的新手,遇到了上述错误。这似乎很明显,但我无法在代码中找到缺少的逗号。在我添加binaryOut
函数之前,代码工作正常,所以我相信它就在那里。
如果Arduino指出错误发生在哪里会很好。
非常感谢任何帮助。
#define ultrasonic 6
#define buzzer 3
#define latchPin 8
#define clockPin 12
#define dataPin 11
int sound = 250;
void setup(){
Serial.begin(9600);
pinMode(buzzer, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop(){
long duration, inches;
pinMode(ultrasonic, OUTPUT);
digitalWrite(ultrasonic, LOW);
delayMicroseconds(2);
digitalWrite(ultrasonic, HIGH);
delayMicroseconds(5);
digitalWrite(ultrasonic, LOW);
pinMode(ultrasonic, INPUT);
duration = pulseIn(ultrasonic, HIGH);
inches = microsecondsToInches(duration);
if(inches > 36 || inches <= 0){
Serial.print("Out of range. ");
Serial.println(inches);
}else{
Serial.print(inches);
Serial.println(" in.");
}
binaryOut(inches);
digitalWrite(latchPin, LOW);
digitalWrite(latchPin, HIGH);
delay(1000);
}
long microsecondsToInches(long microseconds){
/* 73.746 microseconds per inch
* Sound travels at 1130 ft/s */
return microseconds/73.746/2;
}
void binaryOut(byte dataOut){
Serial.println(dataOut);
boolean pinState;
for(int i = 0; i <= 7; i++){
digitalWrite(clockPin, LOW);
if(dataOut & (1<<i)){
pinState = HIGH;
}else{
pinState = LOW;
}
digitalWrite(dataPin, pinState);
digitalWrite(clockPin, HIGH);
}
digitalWrite(clockPin, LOW);
}
编辑:在Arduino中HIGH和LOW是定义的常量(http://arduino.cc/en/Reference/Constants),boolean是原始数据类型(http://en.wikipedia.org/wiki/Primitive_data_type)
EDIT2:我在下图中为示例(binaryOut
)中的shiftOut
建模了。
EDIT3:确切的错误是:
In file included from UltrasonicRangeSensorAJ.ino:7:
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:111: error: expected ',' or '...' before numeric constant
C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:112: error: expected ',' or '...' before numeric constant
我最初认为&#34; 111&#34;和&#34; 112&#34;对应于行号,但我的代码少于90行。
答案 0 :(得分:3)
Arduino库使用“dataPin”和“clockPin”标识符来实现自己的目的。通过在代码中使用实际值定义它们,就会导致Arduino代码无法编译。重命名。
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val); uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
答案 1 :(得分:1)
这个答案仅供记录之用。
我发现这个例子http://arduino.cc/en/Tutorial/PlayMelody?action=sourceblock&num=1可以播放旋律。
示例代码中的以下行也会向我抛出相同的错误 expect&#39;,&#39;或者&#39; ...&#39;在数字常量之前
#define c 3830 // 261 Hz
#define d 3400 // 294 Hz
#define e 3038 // 329 Hz
但是当我修改上面的行时,这样的(下面)工作正常。
#define C 3830 // 261 Hz
#define D 3400 // 294 Hz
#define E 3038 // 329 Hz
虽然定义你不能使用小写单字母。