在 Arduino 中重新声明为不同类型的符号

Posted

技术标签:

【中文标题】在 Arduino 中重新声明为不同类型的符号【英文标题】:Redeclared as different kind of symbol in Arduino 【发布时间】:2017-08-31 18:06:06 【问题描述】:

我目前正在做一个学校项目。我希望伺服根据选择的硬币数量移动。我不断收到错误“'void serveOne()' redeclared as different kind of symbol”我知道有人问过这个问题,但我不知道如何解决这个问题。

这是我的代码。

#include <LiquidCrystal.h>
#include <Keypad.h>
#include <Servo.h>

Servo servoOne;

String sharp="";
int piso=0;
int lima=0;
int sampu=0;

String input="";
String remlast = "";

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5);//RS,EN,D4,D5,D6,D7


const byte Rows= 4; //number of rows on the keypad i.e. 4
const byte Cols= 3; //number of columns on the keypad i,e, 3

//we will definne the key map as on the key pad:

char keymap[Rows][Cols]=
  '1', '2', '3',
  '4', '5', '6',
  '7', '8', '9',
  '*', '0', '#'
;

byte rPins[Rows]= 3,4,5,6; //Rows 0 to 3
byte cPins[Cols]= 7,8,9; //Columns 0 to 2

Keypad kpd= Keypad(makeKeymap(keymap), rPins, cPins, Rows, Cols);

void setup() 
  // put your setup code here, to run once:
lcd.begin(20,4);
servoOne.attach(10);


void loop() 
    char key2 = kpd.getKey();


  if (key2 != NO_KEY)
      
       lcd.print(key2);

       if (sharp == "")
       
          input+=key2;
          remlast = input;
          remlast.replace("*","");
            remlast.replace("#","");
            piso = remlast.toInt();
       
       else if (sharp == "five")
       
          input+=key2;
          remlast = input;
          remlast.replace("*","");
            remlast.replace("#","");
            lima = remlast.toInt();
       
       else if (sharp == "ten")
       
          input+=key2;
          remlast = input;
          remlast.replace("*","");
            remlast.replace("#","");
            sampu = remlast.toInt();
       

      if(key2=='*' && sharp!=NULL)
      
        lcd.rightToLeft();
        sharp="";
        piso=0;
        lima=0;
        sampu=0;
        input="";
        remlast="";
        

      if (sharp=="ten" && key2=='#')
      
        sharp = "out";
        lcd.clear();
        lcd.print(piso);
        lcd.print(lima);
        lcd.print(sampu);
        servoOne();
      

     else if (sharp=="five" && key2=='#')
       
          lcd.clear();
          lcd.print("10-peso=");
          lcd.setCursor(0,1);
          lcd.print("(*)Erase  (#)Enter");
          lcd.setCursor(8,0);  
          sharp="ten";  
          input = 0;      
       

     else if (key2=='#')
      
        lcd.clear();
        lcd.print("5-peso=");
        lcd.setCursor(0,1);
        lcd.print("(*)Erase  (#)Enter");
        lcd.setCursor(7,0); 
        sharp="five";
        input = 0;

      
      if (key2=='*')
      
        lcd.clear();
        lcd.print("1-peso=");
        lcd.setCursor(0,1);
        lcd.print("(*)Erase  (#)Enter");
        lcd.setCursor(7,0); 
      

      
   

//--------------------SERVO ONE--------------------//
void servoOne()

  servoOne.write(70);
  delay(10);
  while(piso>0)
  
    int x = piso;
    while(x>0)
    
      servoOne.write(170);
      delay(200);
      servoOne.write(40);
      delay(200);
      x--;
    
  

【问题讨论】:

你有一个函数和一个全局变量,它们都被称为servoOne。将其中一个重命名为其他名称。 【参考方案1】:

它发生在Servo servoOne; 中的servoOnevoid servoOne() 之间发生冲突时。请将void servoOne() 中的servoOne 替换为其他名称。 (不要忘记用你的新函数名替换函数调用中的函数名)

【讨论】:

以上是关于在 Arduino 中重新声明为不同类型的符号的主要内容,如果未能解决你的问题,请参考以下文章

Arduino 在 uint32_t 和无符号字符之间转换

arduino int转unsigned int

删除 Arduino 上的引导加载程序

如何自己编写Arduino支持的C++类库

重新解释适当对齐的指向具有声明类型的对象的指针

函数声明的返回类型中的 & 符号如何工作? [复制]