C++ Can';t做嵌套函数,什么';有办法吗?

C++ Can';t做嵌套函数,什么';有办法吗?,c++,c,arduino,nested,C++,C,Arduino,Nested,我正在使用ArduinoIDE,它不允许嵌套函数,或者在函数被声明之前调用它(它不会跳转找到它)。。 在我的代码中,我需要一个或另一个。。 此外,将所有功能都设置为一个大功能也不起作用,因为当我检查之前的传感器时,我必须一次又一次地写下“是”和“否”时该怎么办。 在这里,我试图感知光线,如果有光线,请转到PIR传感器,如果没有,请再次运行光线传感器。现在,如果PIR在3.5秒内两次感应到运动,请检查颜色,如果没有,请检查灯光。 现在颜色感知颜色并将其分类(RG或b)。现在它再次检查PIR,如果有

我正在使用ArduinoIDE,它不允许嵌套函数,或者在函数被声明之前调用它(它不会跳转找到它)。。 在我的代码中,我需要一个或另一个。。 此外,将所有功能都设置为一个大功能也不起作用,因为当我检查之前的传感器时,我必须一次又一次地写下“是”和“否”时该怎么办。 在这里,我试图感知光线,如果有光线,请转到PIR传感器,如果没有,请再次运行光线传感器。现在,如果PIR在3.5秒内两次感应到运动,请检查颜色,如果没有,请检查灯光。 现在颜色感知颜色并将其分类(RG或b)。现在它再次检查PIR,如果有移动,它再次检查颜色并再次检查PIR。现在,如果pir没有感觉到移动,它将发送到串行总线

我在使用函数(打印行)之前声明了一些函数,但其中一些函数不是因为我陷入了循环中。 当我检查light时,如果它为正值,我运行PIR,因此我需要在light之前声明PIR函数。但是在pir中,如果它是负数(没有移动),我运行light sensor,这意味着我应该在pir之前声明light sensor。 我被困在那个圈子里

int lightPin = A0;
int valLight = 0;
int ledTrans = 2;
int pirTrans = 3;
int pirPin = 4;
int pirState = LOW;
int CalTime = 30;
int colorTrans = 5;
int s2 = 6;
int s3 = 7;
int OUTpin= 8;
boolean RD= false;
boolean GD = false ;
boolean BD = false;
int rfPin = 9;



void setup() {
pinMode(A0,INPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,INPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,INPUT);
pinMode(9,OUTPUT);

  Serial.begin(9600);
}



  void printlines();
  void pirSensor();
  void colorSensor();
  void pirSensor2();







void lightSensor() {
  //light sensor
  valLight = analogRead(A0);
  delay(1000);

  if (valLight >= 300) {
    ledTrans = HIGH;
    pirTrans = HIGH;
    pirSensor();
  } else {
    delay(8000);
    }
    }



void pirSensor() {

  // Calibration

  for ( byte i = 0; i < 30; i++) {
    delay(1000);
  }


// Check PIR state

int pirState =  digitalRead(2);
delay(1500);
pirState = digitalRead(2);

if (pirState == HIGH) {
  colorTrans = HIGH;
  colorSensor();
      } else if (pirState == LOW) {
  pirState = LOW;
  lightSensor();
}

}



      void colorSensor(){
      //Check Color reads pulse for RGB

    // void checkred
      digitalWrite(s2, LOW);
      digitalWrite(s3, LOW);
      unsigned int RW = 255 - (pulseIn(OUTpin, LOW)/ 400 - 1);  // turns into 0-255
      delay(6000);

  // void checkgreen
  digitalWrite(s2,LOW);
  digitalWrite(s3,HIGH);
  unsigned int GW =  255 - (pulseIn(OUTpin, LOW)/  400 - 1);
  delay(6000);

    // void checkblue
    digitalWrite(s2, HIGH);
digitalWrite( s3, HIGH);
  unsigned int BW = 255 - (pulseIn(OUTpin, LOW) / 400 - 1);
  delay(6000);
// seeing which color I got(r g or b)


if (RW > BW && RW > GW){
RD = true;    
 delay(7000);
  }  else if  (GW > RW && GW > BW){
    GD = true;
  delay(7000);
      } else if  (BW > RW && BW > GW){
    BD = true;
    delay(4000);
  }
}


void pirSensor2(){

pirState =  digitalRead(2);
delay(1500);
pirState = digitalRead(2);

  if(pirState = HIGH){
      colorSensor();
    }else{
      printlines();

    }
    }
















 void printlines(){
   if(RD){
   Serial.print("RED DETECTED");
 } else if(GD){
   Serial.print("GREEN DETECTED");
   }else if(BD){
    Serial.print("BLUE DETECTED");
  }else if(RD && GD){
    Serial.print("RED & GREEN DETECTED");
  }else if(RD && BD){
    Serial.print("RED & BLUE DETECTED");
  }else if(BD && GD){
    Serial.print("GREEN & BLUE DETECTED");
  }else if(RD && GD && BD){
    Serial.print("RED, GREEN, BLUE DETECTED");
  }
  delay(7000);
   }
int lightPin=A0;
int-valLight=0;
int-ledTrans=2;
int-pirTrans=3;
int-pirPin=4;
int状态=低;
int CalTime=30;
int-colorTrans=5;
int s2=6;
int s3=7;
int-OUTpin=8;
布尔RD=假;
布尔GD=假;
布尔BD=假;
int-rfPin=9;
无效设置(){
引脚模式(A0,输入);
pinMode(2,输出);
pinMode(3,输出);
pinMode(4,输入);
pinMode(5,输出);
pinMode(6,输出);
pinMode(7,输出);
pinMode(8,输入);
pinMode(9,输出);
Serial.begin(9600);
}
作废打印行();
真空传感器();
空隙颜色传感器();
空位2();
真空光传感器(){
//光传感器
valLight=模拟读数(A0);
延迟(1000);
如果(valLight>=300){
ledTrans=高;
pirTrans=高;
PIR传感器();
}否则{
延迟(8000);
}
}
真空传感器(){
//校准
用于(字节i=0;i<30;i++){
延迟(1000);
}
//检查PIR状态
int pirState=数字读取(2);
延迟(1500);
pirState=digitalRead(2);
如果(pirState==高){
colorTrans=高;
颜色传感器();
}否则如果(pirState==低){
皮尔斯塔=低;
光传感器();
}
}
void颜色传感器(){
//检查RGB的颜色读数脉冲
//无效勾选
数字写入(s2,低电平);
数字写入(s3,低电平);
无符号整数RW=255-(脉冲星(输出,低)/400-1);//变为0-255
延迟(6000);
//空格子绿
数字写入(s2,低电平);
数字写入(s3,高);
无符号整数GW=255-(脉冲星(输出端,低)/400-1);
延迟(6000);
//空格子蓝
数字写入(s2,高);
数字写入(s3,高);
无符号整数BW=255-(脉冲信号(输出端,低)/400-1);
延迟(6000);
//看看我得到了什么颜色(r g或b)
如果(RW>BW&&RW>GW){
RD=真;
延迟(7000);
}否则如果(GW>RW&&GW>BW){
GD=真;
延迟(7000);
}否则如果(BW>RW&&BW>GW){
BD=真;
延迟(4000);
}
}
void-2(){
pirState=digitalRead(2);
延迟(1500);
pirState=digitalRead(2);
如果(状态=高){
颜色传感器();
}否则{
打印线();
}
}
无效打印行(){
国际单项体育联合会(RD){
串行打印(“检测到红色”);
}否则,如果(GD){
串行打印(“绿色检测”);
}否则,如果(BD){
串行打印(“检测到蓝色”);
}否则如果(RD和GD){
串行打印(“检测到红色和绿色”);
}否则如果(RD和BD){
串行打印(“检测到红色和蓝色”);
}else if(BD&&GD){
串行打印(“检测到绿色和蓝色”);
}else if(RD&&GD&&BD){
串行打印(“检测到红色、绿色、蓝色”);
}
延迟(7000);
}

您可以在定义函数之前声明它:

void setup();
那么你可以称之为:

setup();
…然后在文件中的某个地方,您可以编写其定义:

void setup() { 
    // implementation here
}

为什么不在调用函数原型之前声明它呢?我用声明^^修复了它。。现在它说它可以;我不能编译。。有人能发现错误吗?我已经检查并重新检查了所有内容,包括{}..(检查更新的问题代码)@imarioofficer:错误消息会很有帮助。@SF。谢谢,但我只需要添加void loop(){}