Derek Travisano / Mbed 2 deprecated ScreenSaver

Dependencies:   4DGL-uLCD-SE PinDetect mbed-rtos mbed

Fork of ScreenSaver by Derek Travisano

Committer:
dtravisano3
Date:
Wed Oct 21 15:33:04 2015 +0000
Revision:
1:76a052237fca
Parent:
0:b7019deacc63
ScreenSaver function for uLCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dtravisano3 0:b7019deacc63 1 #include "mbed.h"
dtravisano3 0:b7019deacc63 2 #include "uLCD_4DGL.h"
dtravisano3 0:b7019deacc63 3 #include "rtos.h"
dtravisano3 0:b7019deacc63 4 #include "PinDetect.h"
dtravisano3 0:b7019deacc63 5 //Joystick Inputs
dtravisano3 0:b7019deacc63 6 PinDetect up(p17);
dtravisano3 0:b7019deacc63 7 PinDetect down(p13);
dtravisano3 0:b7019deacc63 8 PinDetect left(p15);
dtravisano3 0:b7019deacc63 9 PinDetect right(p14);
dtravisano3 0:b7019deacc63 10 PinDetect c(p16);
dtravisano3 0:b7019deacc63 11 //RTOS Mutex
dtravisano3 0:b7019deacc63 12 Mutex DAmu;
dtravisano3 0:b7019deacc63 13 //uLCD
dtravisano3 0:b7019deacc63 14 uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
dtravisano3 0:b7019deacc63 15
dtravisano3 0:b7019deacc63 16 //SCREENSAVER VARIABLES
dtravisano3 0:b7019deacc63 17 int volatile counter=0; //GLOBAL COUNTER VARIABLE FOR SCREENSAVER MODE
dtravisano3 0:b7019deacc63 18 int color[] = {RED,BLUE,GREEN}; //color to be written to screen
dtravisano3 1:76a052237fca 19 //int save[128*128]; //Vector to save current screen
dtravisano3 0:b7019deacc63 20
dtravisano3 1:76a052237fca 21 // SCREENSAVER FUNCTIONS
dtravisano3 1:76a052237fca 22 /*
dtravisano3 1:76a052237fca 23 void savescreen()
dtravisano3 1:76a052237fca 24 {
dtravisano3 1:76a052237fca 25 for(int i=0; i<(128)&&counter!=0; i++) {
dtravisano3 1:76a052237fca 26 for(int k=0; (k<128)&&counter!=0; k++) {
dtravisano3 1:76a052237fca 27 save[k+i*128]==uLCD.read_pixel(k,i); //save current screen to memory
dtravisano3 1:76a052237fca 28 }
dtravisano3 1:76a052237fca 29 }
dtravisano3 1:76a052237fca 30 }
dtravisano3 1:76a052237fca 31 void recoverscreen()
dtravisano3 1:76a052237fca 32 {
dtravisano3 1:76a052237fca 33 for(int i=0; i<(128)&&counter!=0; i++) {
dtravisano3 1:76a052237fca 34 for(int k=0; (k<128)&&counter!=0; k++) {
dtravisano3 1:76a052237fca 35 DAmu.lock(); //Use Mutex to decide which function writes to screen
dtravisano3 1:76a052237fca 36 uLCD.pixel(k,i,save[i+k*128]); //Randomizes color to be written to screen
dtravisano3 1:76a052237fca 37 DAmu.unlock();
dtravisano3 1:76a052237fca 38 }
dtravisano3 1:76a052237fca 39 }
dtravisano3 1:76a052237fca 40 }
dtravisano3 1:76a052237fca 41 */
dtravisano3 0:b7019deacc63 42 void screensaver(void const *args)
dtravisano3 0:b7019deacc63 43 {
dtravisano3 1:76a052237fca 44 // savescreen(); //store current screen before entering screensaver mode
dtravisano3 0:b7019deacc63 45 while(counter!=0) {
dtravisano3 0:b7019deacc63 46 uLCD.cls();
dtravisano3 0:b7019deacc63 47 for(int i=0; i<(128)&&counter!=0; i++) {
dtravisano3 0:b7019deacc63 48 for(int k=0; (k<128)&&counter!=0; k++) {
dtravisano3 0:b7019deacc63 49 DAmu.lock(); //Use Mutex to decide which function writes to screen
dtravisano3 0:b7019deacc63 50 uLCD.pixel(k,i,color[rand()%3]); //Randomizes color to be written to screen
dtravisano3 0:b7019deacc63 51 DAmu.unlock();
dtravisano3 0:b7019deacc63 52 }
dtravisano3 0:b7019deacc63 53 }
dtravisano3 0:b7019deacc63 54 uLCD.cls();
dtravisano3 1:76a052237fca 55 // recoverscreen(); //Call function to restore screen when exiting screensaver mode
dtravisano3 0:b7019deacc63 56 Thread::wait(1000);
dtravisano3 0:b7019deacc63 57 }
dtravisano3 0:b7019deacc63 58 }
dtravisano3 0:b7019deacc63 59
dtravisano3 0:b7019deacc63 60
dtravisano3 0:b7019deacc63 61 //Variables and function calls for sample program (NOT REQUIRED)
dtravisano3 0:b7019deacc63 62 int volatile count=0;
dtravisano3 0:b7019deacc63 63 int volatile dy=64;
dtravisano3 0:b7019deacc63 64 int volatile dx=64;
dtravisano3 0:b7019deacc63 65
dtravisano3 0:b7019deacc63 66 void up_hit_callback (void)
dtravisano3 0:b7019deacc63 67 {
dtravisano3 0:b7019deacc63 68 dy--;
dtravisano3 0:b7019deacc63 69 count =1;
dtravisano3 0:b7019deacc63 70 counter=0;
dtravisano3 0:b7019deacc63 71 Thread::wait(1);
dtravisano3 0:b7019deacc63 72 }
dtravisano3 0:b7019deacc63 73 void down_hit_callback (void)
dtravisano3 0:b7019deacc63 74 {
dtravisano3 0:b7019deacc63 75 dy++;
dtravisano3 0:b7019deacc63 76 count =1;
dtravisano3 0:b7019deacc63 77 counter=0;
dtravisano3 0:b7019deacc63 78 Thread::wait(1);
dtravisano3 0:b7019deacc63 79 }
dtravisano3 0:b7019deacc63 80 void left_hit_callback (void)
dtravisano3 0:b7019deacc63 81 {
dtravisano3 0:b7019deacc63 82 dx--;
dtravisano3 0:b7019deacc63 83 count =1;
dtravisano3 0:b7019deacc63 84 counter=0;
dtravisano3 0:b7019deacc63 85 Thread::wait(1);
dtravisano3 0:b7019deacc63 86 }
dtravisano3 0:b7019deacc63 87 void right_hit_callback (void)
dtravisano3 0:b7019deacc63 88 {
dtravisano3 0:b7019deacc63 89 dx++;
dtravisano3 0:b7019deacc63 90 count =1;
dtravisano3 0:b7019deacc63 91 counter=0;
dtravisano3 0:b7019deacc63 92 Thread::wait(1);
dtravisano3 0:b7019deacc63 93 }
dtravisano3 0:b7019deacc63 94
dtravisano3 0:b7019deacc63 95 void c_hit_callback (void)
dtravisano3 0:b7019deacc63 96 {
dtravisano3 0:b7019deacc63 97 count = 1;
dtravisano3 0:b7019deacc63 98 counter=0;
dtravisano3 0:b7019deacc63 99 Thread::wait(1);
dtravisano3 0:b7019deacc63 100 }
dtravisano3 0:b7019deacc63 101
dtravisano3 0:b7019deacc63 102
dtravisano3 0:b7019deacc63 103 int main()
dtravisano3 0:b7019deacc63 104 {
dtravisano3 0:b7019deacc63 105 //Setup Pushbuttons or Joystick
dtravisano3 0:b7019deacc63 106 up.mode(PullDown);
dtravisano3 0:b7019deacc63 107 down.mode(PullDown);
dtravisano3 0:b7019deacc63 108 left.mode(PullDown);
dtravisano3 0:b7019deacc63 109 right.mode(PullDown);
dtravisano3 0:b7019deacc63 110 c.mode(PullDown);
dtravisano3 0:b7019deacc63 111
dtravisano3 0:b7019deacc63 112 up.setSampleFrequency();
dtravisano3 0:b7019deacc63 113 down.setSampleFrequency();
dtravisano3 0:b7019deacc63 114 left.setSampleFrequency();
dtravisano3 0:b7019deacc63 115 right.setSampleFrequency();
dtravisano3 0:b7019deacc63 116 c.setSampleFrequency();
dtravisano3 1:76a052237fca 117
dtravisano3 1:76a052237fca 118 //JoyStick or Pushbutton functional fall interrupts set up
dtravisano3 0:b7019deacc63 119 up.attach_deasserted(&up_hit_callback);
dtravisano3 0:b7019deacc63 120 down.attach_deasserted(&down_hit_callback);
dtravisano3 0:b7019deacc63 121 left.attach_deasserted(&left_hit_callback);
dtravisano3 0:b7019deacc63 122 right.attach_deasserted(&right_hit_callback);
dtravisano3 0:b7019deacc63 123 c.attach_deasserted(&c_hit_callback);
dtravisano3 0:b7019deacc63 124
dtravisano3 1:76a052237fca 125 //initialize screen
dtravisano3 0:b7019deacc63 126 uLCD.baudrate(100000);
dtravisano3 0:b7019deacc63 127 DAmu.lock();
dtravisano3 0:b7019deacc63 128 uLCD.background_color(BLACK);
dtravisano3 0:b7019deacc63 129 uLCD.cls();
dtravisano3 0:b7019deacc63 130 DAmu.unlock();
dtravisano3 0:b7019deacc63 131
dtravisano3 0:b7019deacc63 132 while(1) {
dtravisano3 0:b7019deacc63 133 DAmu.lock();
dtravisano3 0:b7019deacc63 134 if(counter==500) { //screensaver mode conditional and desired wait time counter
dtravisano3 0:b7019deacc63 135 DAmu.unlock();
dtravisano3 0:b7019deacc63 136 screensaver(0);
dtravisano3 0:b7019deacc63 137 counter++;
dtravisano3 0:b7019deacc63 138 } else { // Desired code for MBED uLCD program (Not screensaver mode)
dtravisano3 0:b7019deacc63 139 if (count==1) {
dtravisano3 0:b7019deacc63 140 uLCD.cls();
dtravisano3 0:b7019deacc63 141 DAmu.unlock();
dtravisano3 0:b7019deacc63 142 count=0;
dtravisano3 0:b7019deacc63 143 } else {
dtravisano3 0:b7019deacc63 144 DAmu.lock();
dtravisano3 0:b7019deacc63 145 uLCD.filled_rectangle(dx+2,dy+2 ,dx-2, dy-2, WHITE);
dtravisano3 0:b7019deacc63 146 DAmu.unlock();
dtravisano3 0:b7019deacc63 147 }
dtravisano3 0:b7019deacc63 148 counter++;
dtravisano3 0:b7019deacc63 149 }
dtravisano3 0:b7019deacc63 150 Thread::wait(1);
dtravisano3 0:b7019deacc63 151 }
dtravisano3 0:b7019deacc63 152 }