我复制了此程序,并在使用void downFrequency函数时遇到了麻烦(我认为)。
这是针对Arduino Uno的。以下是编译器错误:
为'Arduino Uno'编译'MY_dds'

MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : stray '\342' in program
MY_dds.ino : stray '\200' in program
MY_dds.ino : stray '\223' in program
MY_dds.ino : : In function 'void downFrequency()':
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
MY_dds.ino : expected `)' before numeric constant
Error compiling

这是程序:
#include <stdio.h>
#include <dds.h>
#include <LiquidCrystal.h>

#define RESET 13
#define data_pin 12
#define load_pin A5
#define clock_pin A4
#define clock_hz 120000000LL
#define calibrationValue -0.0400000 // this is a value we change to calibrate our particular chip more accurately
#define buttonPin A0

// chip, data_pin, load_pin, clock_pin, clock_hz
dds ddschip(DDS9850, data_pin, load_pin, clock_pin, clock_hz); // set my dds up with 120mhz onboard crystal
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// some variables to use in our program
long toFrequency = 14070000;
long currentFrequency;
long maxFrequency = 40000000;
long minFrequency = 0;
int incrementNumber = 6;
int maxprogramnumber = 6; // don't forget to increase the menu numbers here!!
int programnumber = 1;

void setup()

{
Serial.begin(9600);
Serial.println("Beginning Setup");
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T.Robb V0.1b "); //Print a little message
lcd.setCursor(0, 1);
lcd.print(" DDS Sine wave ");
delay(2000);
// setup pins
pinMode(RESET, OUTPUT);
pinMode(data_pin, OUTPUT);
pinMode(load_pin, OUTPUT);
pinMode(clock_pin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);

ddschip.calibrate(calibrationValue); // this is a value we change to calibrate our particular chip more accurately
ddschip.setfrequency(toFrequency);
lcd.clear();

}

void loop()
{
if(toFrequency >= maxFrequency){(toFrequency = maxFrequency);}
if(toFrequency <= minFrequency){(toFrequency = minFrequency);}
ddschip.setfrequency(toFrequency);
currentFrequency = toFrequency;

switch(incrementNumber){

case 0:
Serial.println("increment amount is 1hz");
lcd.setCursor(0, 0);
lcd.print("Change By 1hz");
break;

case 1:
Serial.println("increment amount is 10hz");
lcd.setCursor(0, 0);
lcd.print("Change By 10hz ");
break;

case 2:
Serial.println("increment amount is 100hz");
lcd.setCursor(0, 0);
lcd.print("Change By 100hz ");
break;

case 3:
Serial.println("increment amount is 1 000hz");
lcd.setCursor(0, 0);
lcd.print("Change By 1khz");
break;

case 4:
Serial.println("increment amount is 10 000hz");
lcd.setCursor(0, 0);
lcd.print("Change By 10khz");
break;

case 5:
Serial.println("increment amount is 100 000hz");
lcd.setCursor(0, 0);
lcd.print("Change By 100khz");
break;

case 6:
Serial.println("increment amount is 1 000 000hz");
lcd.setCursor(0, 0);
lcd.print("Change By 1Mhz");
break;

default:
Serial.println("increment amount is 100hz");
lcd.setCursor(0, 0);
lcd.print("Change By 100hz ");
break;
}

lcd.setCursor(0, 1);
lcd.print("Freq is "); //Print to lcd
lcd.setCursor(8, 1);
lcd.print(currentFrequency);

Serial.println(incrementNumber); // temporary for debugging delete me

Serial.print("Current Frequency is set to :");
Serial.println(currentFrequency);

while((analogRead(buttonPin))>=1000){} // do nothing while no buttons pressed to chill out
delay(5);
if(analogRead(buttonPin)>=100 && analogRead(buttonPin)<=200){ // we have pushed up
upFrequency();
delay(300);
}

if(analogRead(buttonPin)>=200 && analogRead(buttonPin)<=400){ // we have pushed down
downFrequency();
delay(300);
}

if((analogRead(buttonPin))<=50){ // we have pushed right
incrementNumber++;
delay(300);
}

if(analogRead(buttonPin)>=400 && analogRead(buttonPin)<=600){ // we have pushed left
incrementNumber–;
delay(300);
}

if(incrementNumber > 6){incrementNumber = 0;} // this is where the menu goes around  and around
if(incrementNumber < 0){incrementNumber = 6;}

delay(100);
lcd.clear();

}
void upFrequency()
{
Serial.println("Going UP Frequency");
switch(incrementNumber){

case 0:
toFrequency = (toFrequency + 1);
break;

case 1:
toFrequency = (toFrequency + 10);
break;

case 2:
toFrequency = (toFrequency + 100);
break;

case 3:
toFrequency = (toFrequency + 1000);
break;

case 4:
toFrequency = (toFrequency + 10000);
break;

case 5:
toFrequency = (toFrequency + 100000);
break;
case 6:
toFrequency = (toFrequency + 1000000);
break;

default:
toFrequency = (toFrequency + 10);
break;
}

}
void downFrequency()
{

Serial.println("Going DOWN Frequency");
switch(incrementNumber){

case 0:
toFrequency = (toFrequency – 1);
break;

case 1:
toFrequency = (toFrequency – 10);
break;

case 2:
toFrequency = (toFrequency – 100);
break;

case 3:
toFrequency = (toFrequency – 1000);
break;

case 4:
toFrequency = (toFrequency – 10000);
break;

case 5:
toFrequency = (toFrequency – 100000);
break;

case 6:
 toFrequency = (toFrequency – 1000000);
 break;

default:
 toFrequency = (toFrequency – 10);
 break;
 }
}

最佳答案

您已经在downFrequency函数中以某种方式以“破折号”字符而不是正常的负号结尾。

确保使用文本编辑器而不是文字处理器进行编辑;对于这些:

toFrequency = (toFrequency – 1);
                           ^

删除标记的字符,然后重新键入为普通的减号。

(如果您对gory细节感兴趣,则“破折号”字符为Unicode 2013,以UTF-8编码为三个字节,八进制值324,200,223,这就是为什么在错误消息中看到这些数字的原因。)

07-24 09:45
查看更多