Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Arduino как определить чётное число и мигнуть dp на дисплее

ЕВГЕНИЙ ЕВГЕНИЙ Знаток (317), закрыт 3 года назад
Задача такая, есть 7-сегментный экран и массив, типо таймер от 0 до 9 и так до бесконечности, сам код менять особо не нужно, он дан преподавателем, но нужно зажигать точку dp на дисплее когда на экране изображено чётное число, и гасить, когда не чётное. Никак не могу понять куда это записать, в целом знаю что гасить с зажигать можно через digitalWrite(SEGMENT_Point, HIGH); и digitalWrite(SEGMENT_Point, LOW); Соответственно, найти чётное можно так if (i%2==0). Но когда дело доходит до того чтобы собрать это в кучу всё, начинаются сложности

Дополнен 3 года назад
#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 7
#define SEGMENT_Point 9

// префикс «0b» означает, что целое число за ним записано в
// в двоичном коде. Единицами мы обозначим номера сегментов
// индикатора, которые должны быть включены для отображения
// арабской цифры. Всего цифр 10, поэтому в массиве 10 чисел.
// Нам достаточно всего байта (англ. byte, 8 бит) для хранения
// комбинации сегментов для каждой из цифр.
byte numberSegments[10] = {
0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};

void setup()
{
pinMode(SEGMENT_Point, OUTPUT);
for (int i = 0; i < SEGMENT_COUNT; ++i)
pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
}

void loop()
{
//поджигаем точку
digitalWrite(SEGMENT_Point, HIGH);

// определяем число, которое собираемся отображать. Пусть им
// будет номер текущей секунды, зацикленный на десятке
int number = (millis() / 1000) % 10;
// получаем код, в котором зашифрована арабская цифра
int mask = numberSegments[number];
// для каждого из 7 сегментов индикатора...
for (int i = 0; i < SEGMENT_COUNT; ++i) {
// ...определяем: должен ли он быть включён. Для этого
// считываем бит (англ. read bit), соответствующий текущему
// сегменту «i». Истина — он установлен (1), ложь — нет (0)
boolean enableSegment = bitRead(mask, i);
// включаем/выключаем сегмент на основе полученного значения
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}
Лучший ответ
Леонид Оракул (57074) 3 года назад
проще было на ассемблере это сделать: делаешь И с 1 и если ноль - то четное, а - 1 -то не четное, ну и зажигаешь когда надо... на радостях ))
ЕВГЕНИЙ ЕВГЕНИЙЗнаток (317) 3 года назад
Задачка в том чтобы сделать именно так и именно в с)
ЕВГЕНИЙ ПЕТРОВ, ты где вообще учишься, что тебя учать прогать на ардуинке?: | тоже хочу; (
Остальные ответы
Похожие вопросы