Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE PinDetect mbed-rtos mbed
Fork of ScreenSaver by
main.cpp@1:76a052237fca, 2015-10-21 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |
