访问必须在if语句中生成的int

时间:2017-04-14 18:04:40

标签: c++ if-statement scope arduino

所以我正在开发一个使用颜色传感器的项目。我做了一个定义RGB的方法,但是我需要根据它的红绿色或蓝色做一些事情...它的红色绿色或蓝色是否在if语句中做出的'决定'所以如何在外面访问该颜色它? (R = 1,B = 2,G = 3,因此更容易使用) 或者还有另一种方法吗?

总体任务是红色,发出1声嘟嘟声, 绿色,2次哔哔声,蓝色和不同颜色组合相同,发出不同数量的哔哔声。

代码;

int s2 = 7;
int s3 = 8;
int s4 = 4;
int OUTpin= 4;

void setup(){
   pinMode(7,OUTPUT);
   pinMode(8,OUTPUT);
   pinMode(4,INPUT);

   Serial.begin(9600);
}

void loop(){
   //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){
      int color = 1;    // used to store that color, that's the 
                        // problem(because its inside if scope)
      delay(7000);
   }  else if  (GW > RW && GW > BW){
      int color = 2;
      delay(7000);
   } else if  (BW > RW && BW > GW){
      int color = 3;
      delay(7000);
   } 
}

4 个答案:

答案 0 :(得分:2)

在if语句之前声明Ruby,并在块中分配它:

color

如果您需要它来生存到将来的循环调用,请将其设置为全局。

答案 1 :(得分:1)

一个非常干净的解决方案是将该功能移动到一个返回int的单独函数中。这也是生成int const变量的唯一方法,这是一种很好的做法。

示例:

int ChooseColor(unsigned int RW, unsigned int BW, unsigned int GW)
{
    // seeing which color I got(r g or b)
    if (RW > BW && RW > GW) {
        return 1;
    } else if  (GW > RW && GW > BW) {
        return 2;
    } else if  (BW > RW && BW > GW) {
        return 3;
    }
    assert(false);
    return 0; // to prevent compiler warnings
}

然后在loop内,执行此操作:

int const color = ChooseColor(RW, BW, GW);
delay(7000);

答案 2 :(得分:0)

为什么不在if-else if梯子之外声明它并在条件中设置它的值? 像,

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password');

const MyTable = sequelize.define('myTable', {
  theColumn: Sequelize.STRING
});

const aVar = 'somestring'; 

const results = await MyTable.findAll({
    where: {
        theColumn: { $like: `%${aVar}%` }
    }
  });
})
console.dir(results);

......等等

答案 3 :(得分:0)

int放在if语句之外。您无法访问它们的原因是因为它们是if语句的局部变量。因此,一旦if结束,在其中声明的所有变量(包括您的int)都将被销毁。

您有时可能会利用此优势,例如内存管理,但对于今天,简短的回答是简单地在外部int并在if中为其赋值。