timer_enable_counter(TIM4);
}
+/*** Game of Life ***/
+
+#define LN 8
+
+byte life[LN+2][LN+2];
+byte lpred[LN+2][LN+2];
+
+static void life_init(void)
+{
+#if 1
+ // The R pentomino
+ life[3][4] = 1;
+ life[3][5] = 1;
+ life[4][3] = 1;
+ life[4][4] = 1;
+ life[5][4] = 1;
+#elif 0
+ // Blinker
+ life[3][2] = 1;
+ life[3][3] = 1;
+ life[3][4] = 1;
+#elif 0
+ // Glider
+ life[1][3] = 1;
+ life[2][1] = 1;
+ life[2][3] = 1;
+ life[3][2] = 1;
+ life[3][3] = 1;
+#endif
+}
+
+static void life_step(void)
+{
+ memcpy(lpred, life, sizeof(life));
+
+ for (uint i=1; i<=LN; i++)
+ for (uint j=1; j<=LN; j++) {
+ int neigh = 0;
+ for (uint ii=i-1; ii <= i+1; ii++)
+ for (uint jj=j-1; jj <= j+1; jj++)
+ neigh += lpred[ii][jj];
+ neigh -= life[i][j];
+ if (life[i][j]) {
+ if (neigh < 2 || neigh > 3)
+ life[i][j] = 0;
+ } else {
+ if (neigh == 3)
+ life[i][j] = 1;
+ }
+ }
+}
+
+static void life_show(void)
+{
+ uint led = 0;
+ for (uint i=1; i<=LN; i++)
+ for (uint j=1; j<=LN; j++) {
+ if (life[i][j])
+ neopixel_set(led, 0, 7, 0);
+ else
+ neopixel_set(led, 0, 0, 1);
+ led++;
+ }
+}
+
/*** Main ***/
int main(void)
debug_printf("Hello, world!\n");
- uint i=63;
+ // uint i=63;
+ life_init();
+ life_show();
+ uint lsteps = 0;
for (;;) {
// wait_for_interrupt();
debug_led(1);
// neopixel_set(NPIX_NUM_LEDS-1, 0, 0x7f, 0);
- neopixel_set(i, 0, 0, 7);
- i = (i+1) % 64;
- neopixel_set(i, 0, 63, 0);
+ // neopixel_set(i, 0, 0, 7);
+ // i = (i+1) % 64;
+ // neopixel_set(i, 0, 63, 0);
delay_ms(100);
debug_led(0);
// neopixel_set(NPIX_NUM_LEDS-1, 0, 0, 0x7f);
delay_ms(500);
+ if (lsteps++ < 30)
+ life_step();
+ else {
+ life_init();
+ lsteps = 0;
+ }
+ life_show();
}
return 0;