Game Of Life,

Dependencies:   N5110 mbed

Files at this revision

API Documentation at this revision

Comitter:
MsTee
Date:
Wed Jun 15 18:42:14 2016 +0000
Commit message:
Game Of Life

Changed in this revision

N5110.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/N5110.lib	Wed Jun 15 18:42:14 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/eencae/code/N5110/#780a542d5f8b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 15 18:42:14 2016 +0000
@@ -0,0 +1,144 @@
+,
+#include "mbed.h"
+#include "N5110.h"
+
+//vcc,sce,rst,dc,mosi,clk,led
+N5110 lcd(p5,p6,p7,p8,p11,p13,p21); //pwm for led backlight
+DigitalIn myswitch(p19); //creates function for the digitalIn switch which enables the switch to display glider or pixels (connects to pin 19 on mbed)
+AnalogIn var(p17); // adds setting for using a potentiometer to adjust brightness of screen (connects to pin 16 on mbed)
+                     // var = object name 
+// note reset button should be pressed always when switch is flipped 
+
+// function declaration
+int cells[84][48]; // dimen
+int n=0;
+void namedisplay(); //calls function for name display on welcome screen
+void clearCells(); //clears all cells on screen
+void checkerBoard(); // checks that all the pixels are present on the screen
+void checkcells(); //it checks and counts the neighbours and applies the rules
+void updatecells(); // it updates the display for every generation
+void menuDisplay(); 
+
+
+
+void namedisplay()
+{
+    lcd.init();
+    lcd.setBrightness(var); // sets the brightness for screen 
+    lcd.printString("Welcome to" ,15,1); //inserts text for welcome on the first line hence the '1'
+    lcd.printString("Conway's",20,2); // prints the text in the brackets on the secondline hence '2'
+    lcd.printString("Game of Life",6,3); //prints text in the third line
+    lcd.printString(" Thokozile",0,5); // prints name in fifth line
+    wait(2); // delays for 2 seconds
+    lcd.refresh(); // refreshes screen displays checkerboard (all pixels on screen)
+    clearCells(); // clears screen removes cells
+    lcd.refresh(); // resets the screen
+}
+void clearCells()
+{
+    //loop through cells and clear
+    for (int i=0; i<84; i++) { // clears all the cells accross the screen horizontally
+        for (int j=0; j<48; j++) { // clears all cells down the screen vertically
+            lcd.clearPixel(i,j);
+        }
+    }
+    lcd.refresh();
+}
+void glider()
+{
+    lcd.setPixel(20,20); 
+    lcd.setPixel(21,20); 
+    lcd.setPixel(22,20);
+    lcd.setPixel(22,19);
+    lcd.setPixel(21,18);
+    
+    //sets pixels to allow glider to move down and up
+}
+void checkerBoard()
+{
+    //loop through every other cell and turn pixel on
+    for (int i=0; i<84; i+=2) { //loops through cells horizontally
+        for (int j=0; j<48; j+=2) { //loops through cells vertically
+            lcd.setPixel(i,j); //sets the pixels accordingly
+        }
+    }
+    lcd.refresh(); //must refresh to write buffer to display
+}
+
+void checkcells()
+{
+    for (int i=0; i<84; i++) { // checks for neighbours in x-direction
+        for (int j=0; j<48; j++) { // checks for neighbours in y-direction
+
+            int n=0; //number of neighbours
+
+            if(lcd.getPixel(i-1,j-1)) //pixel to top-left
+                n++;
+            if(lcd.getPixel(i-1,j)) //pixel to the left
+                n++;
+            if(lcd.getPixel(i-1,j+1)) //pixel to bottom left 
+                n++;
+            if(lcd.getPixel(i,j-1)) // pixel to top 
+                n++;
+            if(lcd.getPixel(i,j+1)) // pixel to bottom
+                n++;
+            if(lcd.getPixel(i+1,j-1)) // pixel to top-right
+                n++;
+            if(lcd.getPixel(i+1,j)) // pixel to right
+                n++;
+            if(lcd.getPixel(i+1,j+1)) // pixel to bottom-right
+                n++;
+
+            if (lcd.getPixel(i,j)) {  // if  cells are alive....
+                if (n==3 || n==2)  // if n is 3 or 2
+                    cells[i][j]=1; // switch cell on
+                else if (n<2 || n>3) // if n is less than 2 or 3
+                    cells[i][j]=0; // switch cell off
+            } else { // else if dead...
+                if (n==3)
+                    cells[i][j]=1; // keep cell on
+            }
+        }
+    }
+}
+
+void updatecells() // updates display for after checking neighbours
+{
+    lcd.setBrightness(var); // sets function to adjust brightness
+   
+    for(int i=0; i<84; i++) {  // updates for cells in x-direction
+        for(int j=0; j<48; j++) { // updates for y-direction
+
+            if(cells[i][j]==1) { //if cells are on
+                lcd.setPixel(i,j); //set the pixels accordingly
+            } else {
+                lcd.clearPixel(i,j); // clear pixels when off
+            }
+        }
+    }
+    lcd.refresh(); //reset
+}
+
+
+
+int main() // main function to call all functions
+{
+    lcd.init(); 
+    namedisplay();
+    checkerBoard();
+    wait(1.5);
+    clearCells();
+    wait(1.5);
+    if (myswitch==1) {  // function for switch on 
+        lcd.randomiseBuffer(); //randomise cells if swtich on
+    } else if (myswitch==0) { // display glider on 2 and pixels on switch 1
+
+        glider();
+    }
+    while(1) { // while loop
+        checkcells();
+        updatecells();
+        wait(0.3); // the rate at which cells degenerate
+        lcd.refresh();
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jun 15 18:42:14 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/433970e64889
\ No newline at end of file