Kul med Arduino, inget annat behövs (3 / 3 steg)
Steg 3: Conway's spel av liv
Conways spelet i livet är en noll spelare, målet är att sätta i en start mönster och se vad som händer. Reglerna är enkla, du börjar med ett mönster i ett rutnät. Varje punkt i rutnätet kallas en cell. Varje cell kan vara antingen av eller på. Första programmet ser på alla celler och räknar antalet intilliggande celler som är på runt den. Sedan visar det alla celler på eller av enligt följande regler.
Om mindre än två angränsande celler på är cellen avstängd, som representerar under befolkningen.
Om fler än tre angränsande celler på är cellen avstängd, som representerar över befolkningen.
En cell som är avstängd slås på om exakt tre intilliggande är på.
Kopiera/klistra in koden i Arduino IDE, ladda upp den, öppna seriell bildskärmen och överföringshastigheten på 115200. Programmet kommer att visa dig start mönstret och vänta på ingång. När du trycker på någon tangent börjar köra programmet och fortsätter tills du strömmen eller tryck på reset.
Du kan ändra start mönstret genom att ändra nollorna och ettor i matrisen i programmet. Söka Wikipedia för "Conway's game of life" att hitta fler intressanta mönster, eller experimentera med några av dina egna.
/*******************************************************
* Filnamn: life.ino
*
* Conways spelet i livet
*******************************************************/
byte starta [14] [42] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}.
antal byte [14] [42].
långa iterationer = 0;
/**********************************************************
* Funktionen setup(), körs vid start.
**********************************************************/
void setup()
{
Serial.BEGIN(115200);
}
/*********************************************************
* Funktionen loop(), driver kontinuerlig när installationen är klar.
*********************************************************/
void loop()
{
för (int jag = 1; jag < 14; i ++) / / Visa resultat.
{
för (int j = 1; j < 41; j ++)
{
IF(start[i][j]==0) Serial.print("");
annat Serial.print ("
}
Serial.println("");
}
iterationer ++;
Serial.Print(iterations);
Serial.println ("upprepningar");
Delay(500);
IF(iterations==1)
{
While(Serial.available() == 0);
char sp = Serial.read();
}
/*******************************************************/
för (int jag = 0; jag < 14; i ++) / / noll räknar från föregående iterationen.
{
för (int j = 0; j < 41; j ++)
{
räkna [i] [j] = 0;
}
}
/*******************************************************/
för (int jag = 1; jag < 14; i ++) / / räkna angränsande levande celler.
{
för (int j = 1; j < 41; j ++)
{
IF(start[i-1][j-1]==1) räkna [i] [j] ++;
IF(start[i-1][j]==1) räkna [i] [j] ++;
IF(start[i-1][j+1]==1) räkna [i] [j] ++;
IF(start[i][j-1]==1) räkna [i] [j] ++;
IF(start[i][j+1]==1) räkna [i] [j] ++;
IF(start[i+1][j-1]==1) räkna [i] [j] ++;
IF(start[i+1][j]==1) räkna [i] [j] ++;
IF(start[i+1][j+1]==1) räkna [i] [j] ++;
}
}
/*******************************************************/
för (int jag = 1; jag < 14; i ++) / / växla på/av celler.
{
för (int j = 1; j < 41; j ++)
{
om (räkna [i] [j] < 2) start [i] [j] = 0;
om (räkna [i] [j] > 3) start [i] [j] = 0;
om (count[i][j]==3) start [i] [j] = 1;
}
}
} / / End av loop()