From e8aed5ac12dc39a25c14a6824a2f0bf84cb24dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Tue, 20 Dec 2022 18:49:12 +0100 Subject: [PATCH] fix: yellow leds remained active sometimes --- src/entrypoint.rs | 36 ++++++++++++------------------------ src/led_matrix.rs | 10 +++++++--- 2 files changed, 19 insertions(+), 27 deletions(-) diff --git a/src/entrypoint.rs b/src/entrypoint.rs index 881e714..f7428fe 100644 --- a/src/entrypoint.rs +++ b/src/entrypoint.rs @@ -182,39 +182,27 @@ impl Game { let mut current_digits: [u8; DIGITS] = [0, 0, 0, 0]; let mut guessing_digits: [u8; DIGITS] = [0, 0, 0, 0]; - for i in 0..DIGITS { current_digits[i] = Self::get_digit(current_number, i); guessing_digits[i] = Self::get_digit(guessing_number, i); } - for j in 0..2 { - self.led_matrix.set( - 0, - 1, - false - ); - } - for i in 0..DIGITS { if current_digits[i] == guessing_digits[i] { - self.led_matrix.set( - i.try_into().unwrap(), - 0, - true - ); + self.led_matrix.set(i.try_into().unwrap(), LED_MATRIX_CORRECT_ROW, true); } - else { - for j in 0..DIGITS { - if current_digits[j] != guessing_digits[j] && current_digits[i] == guessing_digits[j] { - /*self.led_matrix.set( - i.try_into().unwrap(), - 1, - true - );*/ - } - } + for j in 0..DIGITS { + if i != j && + current_digits[j] != guessing_digits[i] && + current_digits[i] == guessing_digits[j] + { + self.led_matrix.set( + i.try_into().unwrap(), + LED_MATRIX_INCORRECT_POSITION_ROW, + true + ); + } } } } diff --git a/src/led_matrix.rs b/src/led_matrix.rs index cd1abac..fca5290 100644 --- a/src/led_matrix.rs +++ b/src/led_matrix.rs @@ -67,7 +67,7 @@ impl LEDMatrix { pub fn step(&mut self) -> bool { let update_unsigned: u8 = self.update_step.try_into().unwrap(); - let first_position: u8 = update_unsigned * self.width; + let first_position: u8 = update_unsigned << 2; // update_unsigned * self.width ... does not work, WTF!? for x in 0..self.cathodes_count { let cathode = &mut self.cathodes[x]; @@ -76,20 +76,24 @@ impl LEDMatrix { } } + let mut any_anode = false; for x in 0..self.anodes_count { let anode = &mut self.anodes[x]; if let Some(anode) = anode { let x_unsigned: u8 = x.try_into().unwrap(); if self.data & (1 << (first_position + x_unsigned)) != 0 { anode.set_high(); + any_anode = true; } else { anode.set_low(); } } } - if let Some(cathode) = &mut self.cathodes[self.update_step] { - cathode.set_low(); + if any_anode { + if let Some(cathode) = &mut self.cathodes[self.update_step] { + cathode.set_low(); + } } self.update_step += 1; -- 2.48.1