while - это ведь ожидание? (вижу условие, но не вижу действия) - вот в него и вставь свой код, пусть работает пока ждет.
Так и делаю, но две секунды пауза в работе программы - это овермного. При нажатии на кнопки идут пропуски. Нужно по нескольку раз нажимать.
Короче, проблема была в использовании так называемого SoftWare SPI:
Код:
u8g_InitSPI(&u8g, &u8g_dev_ssd1306_128x64_sw_spi, PN(1, 5), PN(1, 3), PN(1, 2), PN(1, 1), U8G_PIN_NONE);
Применение HardWare SPI проблему решило в корне. Теперь весь цикл выполняется за миллисекунды.
Код:
u8g_InitSPI(&u8g, &u8g_dev_ssd1306_128x64_hw_spi, PN(1, 5), PN(1, 3), PN(1, 2), PN(1, 1), U8G_PIN_NONE);
Не знаю почему использование софтового SPI и переназначение портов отжирает так много ресурсов и времени в этой библиотеке.