我试图通过读取四个数字输入的状态来为 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'
”您在 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 访问。