Загрузка данных


int32_t x, y;

    while (1) {
        // 1. Читаем кнопки (нажато = 1)
        uint32_t buttons = ~MDR_PORTB->RXTX & 0xFF;

        // Декодируем X (PB0=4, PB1=2, PB2=1, PB3=S)
        x = 0;
        if (buttons & (1 << 0)) x += 4;
        if (buttons & (1 << 1)) x += 2;
        if (buttons & (1 << 2)) x += 1;
        if (buttons & (1 << 3)) x = -x; // Знак

        // Декодируем Y (PB4=4, PB5=2, PB6=1, PB7=S)
        y = 0;
        if (buttons & (1 << 4)) y += 4;
        if (buttons & (1 << 5)) y += 2;
        if (buttons & (1 << 6)) y += 1;
        if (buttons & (1 << 7)) y = -y; // Знак

        // 2. Ждем нажатия SELECT (PC0)
        if ((MDR_PORTC->RXTX & PORT_Pin_0) == 0) {
            
            // ПРОВЕРКА 1: Внутри ли мы квадрата [-3, 3]?
            if (x >= -3 && x <= 3 && y >= -3 && y <= 3) {
                
                // Считаем квадраты расстояний до центров "вырезов"
                // Формула: (x - x0)^2 + (y - y0)^2
                int32_t d1 = (x + 3) * (x + 3) + (y - 3) * (y - 3); // Центр (-3, 3)
                int32_t d2 = (x - 3) * (x - 3) + (y + 3) * (y + 3); // Центр (3, -3)

                // ПРОВЕРКА 2: Вне ли мы кругов радиусом 3 (R^2 = 9)?
                // На картинке заштриховано то, что ВНЕ этих кругов.
                if (d1 > 9 && d2 > 9) {
                    Blink(1); // ПОПАЛ
                } else {
                    Blink(2); // МИМО (попал в вырез)
                }
            } else {
                // Если мы здесь, значит x или y больше 3 или меньше -3
                Blink(2); 
            }

            // Ждем отпускания кнопки
            while ((MDR_PORTC->RXTX & PORT_Pin_0) == 0);
            Delay(200000); 
        }
    }