是否可以将具有AND比较的if语句放入语句或for循环中

时间:2019-12-11 03:00:30

标签: arduino

我正在Arduino IDE中编写一段代码。我有一个IF语句,该语句具有较长的数组比较,以查看它们是否都等于0。如果它们相等,则执行该语句中的代码。

我不确定这是否可行,但我想问一下是否可以简化代码。对于所有其他我可以用于循环的代码,但是我看不到此语句可以使用此代码。

该语句最后将要比较约20个数组。

if (Tbit[0] == 0 && Tbit[1] == 0 && Tbit[2] == 0 && Tbit[3] == 0){
  digitalWrite(Tout[0], HIGH);
  digitalWrite(Tout[1], HIGH);
}

编辑更新

我尝试了PiNaKa30建议,在该建议之下我认为可以工作,但HIGH语句的输出仍未执行。下面是完整的void循环代码,上面的代码已被注释掉,并添加了PiNaKa30代码。

当接收到输入到arduino的命令时,开始读取的位仅在1秒钟内变为高电平“ 1”。正常状态为0

    void loop() {
    cmri.process();
    for (int i=0; i<2; i++){
       Tbit[i] = (cmri.get_bit(i));
    }

    for (int i=0; i<2; i++){
      if (Tbit[i] == 1){
         digitalWrite(Tout[i], !Tbit[i]);
      }
    }

  //  if (Tbit[0] == 0 && Tbit[1] == 0){
   //   digitalWrite(Tout[0], HIGH);
  //    digitalWrite(Tout[1], HIGH);
  //  }


    for(int i=0; i < 2; i++){
      val = val || Tbit[i];    // Even a single 1 in Tbit will make val=1
    }

    if(val == 0){
      digitalWrite(Tout[0], HIGH);
      digitalWrite(Tout[1], HIGH);
    }
}

3 个答案:

答案 0 :(得分:1)

您可以维护一个变量,该变量将为数组所有值的 OR 。数组中的任何值更改时,必须立即更新此变量,并在if语句中使用该变量。

int val = 0; // initialize

updateVal(){
  for(int i=0;i<Tbit.length;i++)
    val = val || Tbit[i];    // Even a single 1 in Tbit will make val=1
}

if(val == 0){
  digitalWrite(Tout[0], HIGH);
  digitalWrite(Tout[1], HIGH);
}

我在这里假设Tbit只能具有值0和1。否则,请稍作更改以适应您的需求。

答案 1 :(得分:0)

在PiNaKa30的建议和一些推文的帮助下,使其开始工作。

connection.Open();
OleDbCommand checkrecord = new OleDbCommand("SELECT workorder FROM [c1 barcode]", connection);
OleDbCommand checkrecord2 = new OleDbCommand("SELECT workorder FROM [c2 barcode]", connection);
if (checkrecord == checkrecord2)
{
    string query = "UPDATE [c1 barcode], [c2 barcode] SET [c1 barcode].[Close from care] = [c2 barcode].[close from care], [c1 barcode].[Name care] = [c2 barcode].[name care] WHERE ([c1 barcode].Workorder=[c2 barcode].[workorder]);";
    using (OleDbCommand cmd = new OleDbCommand(query, connection))
    {
        cmd.ExecuteNonQuery();
        MessageBox.Show("updated");
    }
}
else if (checkrecord != checkrecord2)
{
    string query2 = "INSERT INTO [c1 barcode] SELECT [c2 barcode].* FROM [c2 barcode]";
    using (OleDbCommand cmd = new OleDbCommand(query2, connection))
    {
        cmd.ExecuteNonQuery();
        MessageBox.Show("inserted");
    }
}
else
{
    MessageBox.Show("error");
}
connection.Close();

答案 2 :(得分:0)

有时候,您在寻找例外时更​​容易从另一端开始:

我将其分为两部分 首先创建一个变量来告诉我们检查的结果

bool correct=1;

下一步检查每个值是否包含其他值然后正确输入

for(uint8_t i=0; i<**Number of array members**;i++) {

现在检查其中是否有错误,如果是,则假定错误

if(Tbit[i]!=0) correct=0;

现在仅在没有错误的情况下处理您的代码

if(correct) ...

最后会是什么样子

void loop() { // or any while statement you would have it in
   cmri.process();
   for (int i=0; i<2; i++){
       Tbit[i] = (cmri.get_bit(i));
   }

   bool correct=1;
   for(uint8_t i=0; i<**Number of array members**;i++) {
      if(Tbit[i]!=0) correct=0;
   }
   if(correct) {
      digitalWrite(Tout[0], HIGH);
      digitalWrite(Tout[1], HIGH);
   }
}