Arduino Uno - 嵌套 If 语句不起作用

问题描述 投票:0回答:1

我试图通过读取四个数字输入的状态来为 void“get_move_time”中的整数“move_time”赋值。 我已经创建了一个用于测试的数组,但无法获取“if”语句来为“move_time”分配正确的值。 我将感谢您的帮助。

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);  // I2C address 0x27, 16 column and 2 rows
#include <TM1637Display.h>

#define start_f 6
// define input pins with internal pull-up
#define s90 10
#define s120 11
#define s180 12
#define Test_s 13

int time_scale = 4;
int time_pins[4] = { s90, s120, s180, Test_s };
int move_time;
boolean start_flag = false;

void setup() {

  lcd.init();  // initialize the lcd
  lcd.backlight();
  lcd.clear();  // clear display
  lcd.setCursor(0, 0);
  int w = 0;
  while (w < time_scale) {  // sets the time setting ports with internal pull-up
    pinMode(time_pins[w], INPUT_PULLUP);
    w++;
  }

}
void loop() {
  lcd.clear();  // clear display
  get_move_time();
  lcd.setCursor(9, 1);
  lcd.print("M = ");
  lcd.print(move_time);
  Start_Button();
}  // end of main loop

void get_move_time() {
  move_time = 20;  // set default value for testing
  lcd.print("Status ");
  int time_status[] = { 1, 0, 1, 1 };  // simulate time settings for testing
  for (int z = 0; z < time_scale; z++) {
    // time_status[z] = digitalRead(time_pin[z]);   read switch settings
    if (time_status[z] == 0) {
      move_time = 90;
    } else if (time_status[z] == 0) {
      move_time = 120;
    } else if (time_status[z] == 0) {
      move_time = 180;
    }
    lcd.print(time_status[z]);
    lcd.print(" ");
  }
}

void Start_Button() {
  lcd.setCursor(0, 0);
  //lcd.print("Press to Start");
  while (digitalRead(start_f) == false) start_flag = digitalRead(start_f);  // remain here until button is pressed
}

我尝试将“time_status[z]”设置为布尔值或整数,并将条件“if”测试设置为“==0”、“==false”、“<1' all with the same result - no assignment for each test, generally assigns '180'

arduino
1个回答
0
投票

您在 if-else 语句中使用相同的条件,这是错误的,我认为您想要完成什么,默认情况下将执行第一个语句,这意味着 move_time 始终为 90。

if (time_status[z] == 0) {
  move_time = 90;
} else if (time_status[z] == 0) {
  move_time = 120;
} else if (time_status[z] == 0) {
  move_time = 180;
}

例如,您可以调整代码,以便拥有更多条件,从而显示不同的 move_time 值,例如更改 time_status[] 数组以具有可以循环的不同值,例如

int time_status[] = { 0, 1, 2, 3 };  // simulate time settings for testing

然后您可以在您的条件下使用这些值。

if (time_status[z] == 0) {
  move_time = 10;
} else if (time_status[z] == 1) {
  move_time = 20;
} else if (time_status[z] == 2) {
  move_time = 30;
}
else if (time_status[z] == 3) {
  move_time = 40;
}

当您尝试打印 move_time 的值时,您还应该添加一些延迟,以便您注意到 LCD 中的值发生更改,您还需要将

lcd.print(move_time)
从循环()移动到 for 循环中
 get_move_time

我尝试在 Wokwi 中测试代码,这将帮助您在 Arduino 上使用代码之前进行模拟,可以通过 https://wokwi.com/projects/403549466180697089 访问。

© www.soinside.com 2019 - 2024. All rights reserved.