我正在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);
}
}
答案 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);
}
}