Arduino int в байт - PullRequest
       26

Arduino int в байт

0 голосов
/ 30 апреля 2018

Я делаю 7-сегментную систему отображения, и я хочу, чтобы при нажатии кнопки включался и выключался маленький шарик в конце цифры, я знаю, что из byte seven _seg_digits[10] = {B11111100 // means number 1, ...} последнее число означает, что маленький шарик, но мне нужно изменить значение последнего числа на 1, поэтому я попробовал это:

int repeatDigit; // 0 or 1
byte digit;
byte seven_seg_digits[10] = {
  B1111110 + repeatDigit,  // = 0
  B0110000 + repeatDigit,  // = 1
  B1101101 + repeatDigit,  // = 2
  B1111001 + repeatDigit,  // = 3
  B0110011 + repeatDigit,  // = 4
  B1011011 + repeatDigit,  // = 5
  B1011111 + repeatDigit,  // = 6
  B1110000 + repeatDigit,  // = 7
  B1111111 + repeatDigit,  // = 8
  B1110011 + repeatDigit   // = 9
}; 

Я удалил последнее число 0 и заменил его на int "repeatDigit", это не дает мне ошибки компиляции, но 7-сегментный дисплей не отображает должным образом число

1 Ответ

0 голосов
/ 01 мая 2018

Предлагаю вам прочитать о побитовых операциях. Тем временем, если вы хотите установить последнюю двоичную цифру на 0 или 1, основываясь на repeatDigit, вы должны сначала предоставить 8-битное значение, а не 7-битное значение: b1111110**0**, а не b1111110. Потому что b1111110 на самом деле b01111110, а это не то, что вы хотите.

Далее, не используйте int. Вам нужно 8-разрядное целое число без знака и только его младший бит. Итак, вы хотите:

uint8_t repeatDigit;

Теперь вы можете сделать:

b10110110 | (repeatDigit & 0b00000001), // = 5

Это добавляет младший бит repeatDigit к младшему значению b10110110. Поэтому, если repeatDigit равно 0, b10110110 останется прежним, а если оно равно 1, оно станет b10110111.

...