Added HangmanGame class, but does not work yet

Dependencies:   SDFileSystem app epson mbed msp430 pl tests

Committer:
group-FlexBook
Date:
Mon Dec 04 09:32:20 2017 +0000
Revision:
0:fa7450a43b99
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-FlexBook 0:fa7450a43b99 1 //
group-FlexBook 0:fa7450a43b99 2 // Filename: pageoled.cpp
group-FlexBook 0:fa7450a43b99 3 //
group-FlexBook 0:fa7450a43b99 4 // Flexbook page for page A3.
group-FlexBook 0:fa7450a43b99 5 //
group-FlexBook 0:fa7450a43b99 6
group-FlexBook 0:fa7450a43b99 7 #include "pageoled.h"
group-FlexBook 0:fa7450a43b99 8 #include "pagesensor.h"
group-FlexBook 0:fa7450a43b99 9
group-FlexBook 0:fa7450a43b99 10 #include "log.h"
group-FlexBook 0:fa7450a43b99 11
group-FlexBook 0:fa7450a43b99 12 #include <iostream>
group-FlexBook 0:fa7450a43b99 13
group-FlexBook 0:fa7450a43b99 14 namespace Flexbook {
group-FlexBook 0:fa7450a43b99 15
group-FlexBook 0:fa7450a43b99 16 PageOLED::PageOLED()
group-FlexBook 0:fa7450a43b99 17 : data(p9), clock(p10), strobe(p11), enable(p12)
group-FlexBook 0:fa7450a43b99 18 {
group-FlexBook 0:fa7450a43b99 19 Log("Creating PageOLED");
group-FlexBook 0:fa7450a43b99 20
group-FlexBook 0:fa7450a43b99 21 data = 0;
group-FlexBook 0:fa7450a43b99 22 clock = 0;
group-FlexBook 0:fa7450a43b99 23 strobe = 0;
group-FlexBook 0:fa7450a43b99 24 enable = 1;
group-FlexBook 0:fa7450a43b99 25
group-FlexBook 0:fa7450a43b99 26 Write(0xffffffffffff);
group-FlexBook 0:fa7450a43b99 27 wait(1.0);
group-FlexBook 0:fa7450a43b99 28
group-FlexBook 0:fa7450a43b99 29 // test case follows
group-FlexBook 0:fa7450a43b99 30 //Write(Translate(0,0,1,2,3,10));
group-FlexBook 0:fa7450a43b99 31 //wait(2.0);
group-FlexBook 0:fa7450a43b99 32
group-FlexBook 0:fa7450a43b99 33 /*
group-FlexBook 0:fa7450a43b99 34 for (int i=0; i<200; i++) {
group-FlexBook 0:fa7450a43b99 35 Write(Translate(0,0,0,0,0,i % 6));
group-FlexBook 0:fa7450a43b99 36 if (i<120) wait_ms(30);
group-FlexBook 0:fa7450a43b99 37 else wait_ms(i);
group-FlexBook 0:fa7450a43b99 38 }
group-FlexBook 0:fa7450a43b99 39
group-FlexBook 0:fa7450a43b99 40
group-FlexBook 0:fa7450a43b99 41 for (int i=0; i<600; i++) {
group-FlexBook 0:fa7450a43b99 42 Write(Translate(i%6,i%6,0,0,i*7%6,i%10));
group-FlexBook 0:fa7450a43b99 43 wait(0.5);
group-FlexBook 0:fa7450a43b99 44 }
group-FlexBook 0:fa7450a43b99 45
group-FlexBook 0:fa7450a43b99 46 uint64_t oledpixels = 63;
group-FlexBook 0:fa7450a43b99 47 for(int i=0; i<43; i++) {
group-FlexBook 0:fa7450a43b99 48 Write(oledpixels);
group-FlexBook 0:fa7450a43b99 49 oledpixels = 1 + (oledpixels * 2);
group-FlexBook 0:fa7450a43b99 50 wait(0.5);
group-FlexBook 0:fa7450a43b99 51 }
group-FlexBook 0:fa7450a43b99 52
group-FlexBook 0:fa7450a43b99 53 wait(5.0);
group-FlexBook 0:fa7450a43b99 54 */
group-FlexBook 0:fa7450a43b99 55 // test case ends
group-FlexBook 0:fa7450a43b99 56
group-FlexBook 0:fa7450a43b99 57 Write(0x000000000000);
group-FlexBook 0:fa7450a43b99 58 }
group-FlexBook 0:fa7450a43b99 59
group-FlexBook 0:fa7450a43b99 60 PageOLED::~PageOLED()
group-FlexBook 0:fa7450a43b99 61 {
group-FlexBook 0:fa7450a43b99 62 Log("Deleting PageOLED");
group-FlexBook 0:fa7450a43b99 63 }
group-FlexBook 0:fa7450a43b99 64
group-FlexBook 0:fa7450a43b99 65 // Write data to OLED.
group-FlexBook 0:fa7450a43b99 66 void PageOLED::Write(uint64_t writedata)
group-FlexBook 0:fa7450a43b99 67 {
group-FlexBook 0:fa7450a43b99 68 strobe = 1;
group-FlexBook 0:fa7450a43b99 69 enable = 1;
group-FlexBook 0:fa7450a43b99 70
group-FlexBook 0:fa7450a43b99 71 for(int bit = 0; bit < 48; bit++)
group-FlexBook 0:fa7450a43b99 72 {
group-FlexBook 0:fa7450a43b99 73 data = writedata & 1;
group-FlexBook 0:fa7450a43b99 74 clock = 1;
group-FlexBook 0:fa7450a43b99 75 writedata = writedata >> 1;
group-FlexBook 0:fa7450a43b99 76 clock = 0;
group-FlexBook 0:fa7450a43b99 77 }
group-FlexBook 0:fa7450a43b99 78
group-FlexBook 0:fa7450a43b99 79 strobe = 0;
group-FlexBook 0:fa7450a43b99 80 enable = 0;
group-FlexBook 0:fa7450a43b99 81 }
group-FlexBook 0:fa7450a43b99 82
group-FlexBook 0:fa7450a43b99 83 uint64_t PageOLED::Translate(char b1, char b2, char b3, char b4, char b5, char d1)
group-FlexBook 0:fa7450a43b99 84 // b1..b5 should be a number 0..6 - the number of bars lit in each of the five bar graphs
group-FlexBook 0:fa7450a43b99 85 // d1 should be a number 0..9 - and is displayed as a single digit
group-FlexBook 0:fa7450a43b99 86 {
group-FlexBook 0:fa7450a43b99 87 uint64_t result = 0; //start with 0, each addition only changes a single bit
group-FlexBook 0:fa7450a43b99 88
group-FlexBook 0:fa7450a43b99 89 //create bit pattern for leftmost bar graph (No. 1)
group-FlexBook 0:fa7450a43b99 90 if (b1>6) result = result + (0x010000000000); //bit 40 - not connected on new OLEDS
group-FlexBook 0:fa7450a43b99 91 if (b1>5) result = result + (0x020000000000); //bit 41
group-FlexBook 0:fa7450a43b99 92 if (b1>4) result = result + (0x040000000000); //bit 42
group-FlexBook 0:fa7450a43b99 93 if (b1>3) result = result + (0x080000000000); //bit 43
group-FlexBook 0:fa7450a43b99 94 if (b1>2) result = result + (0x000800000000); //bit 35
group-FlexBook 0:fa7450a43b99 95 if (b1>1) result = result + (0x000400000000); //bit 34
group-FlexBook 0:fa7450a43b99 96 if (b1>0) result = result + (0x000200000000); //bit 33
group-FlexBook 0:fa7450a43b99 97
group-FlexBook 0:fa7450a43b99 98 //create bit pattern for second bar graph
group-FlexBook 0:fa7450a43b99 99 if (b2>6) result = result + (0x000100000000); //bit 32 - not connected on new OLEDS
group-FlexBook 0:fa7450a43b99 100 if (b2>5) result = result + (0x800000000000); //bit 47
group-FlexBook 0:fa7450a43b99 101 if (b2>4) result = result + (0x400000000000); //bit 46
group-FlexBook 0:fa7450a43b99 102 if (b2>3) result = result + (0x200000000000); //bit 45
group-FlexBook 0:fa7450a43b99 103 if (b2>2) result = result + (0x100000000000); //bit 44
group-FlexBook 0:fa7450a43b99 104 if (b2>1) result = result + (0x001000000000); //bit 36
group-FlexBook 0:fa7450a43b99 105 if (b2>0) result = result + (0x002000000000); //bit 37
group-FlexBook 0:fa7450a43b99 106
group-FlexBook 0:fa7450a43b99 107 //create bit pattern for third bar graph
group-FlexBook 0:fa7450a43b99 108 if (b3>6) result = result + (0x004000000000); //bit 38 - not connected on new OLEDS
group-FlexBook 0:fa7450a43b99 109 if (b3>5) result = result + (0x008000000000); //bit 39
group-FlexBook 0:fa7450a43b99 110 if (b3>4) result = result + (0x000001000000); //bit 24
group-FlexBook 0:fa7450a43b99 111 if (b3>3) result = result + (0x000002000000); //bit 25
group-FlexBook 0:fa7450a43b99 112 if (b3>2) result = result + (0x000004000000); //bit 26
group-FlexBook 0:fa7450a43b99 113 if (b3>1) result = result + (0x000008000000); //bit 27
group-FlexBook 0:fa7450a43b99 114 if (b3>0) result = result + (0x000000080000); //bit 19
group-FlexBook 0:fa7450a43b99 115
group-FlexBook 0:fa7450a43b99 116 //create bit pattern for fourth bar graph
group-FlexBook 0:fa7450a43b99 117 if (b4>6) result = result + (0x000000040000); //bit 18 - not connected on new OLEDS
group-FlexBook 0:fa7450a43b99 118 if (b4>5) result = result + (0x000000020000); //bit 17
group-FlexBook 0:fa7450a43b99 119 if (b4>4) result = result + (0x000000010000); //bit 16
group-FlexBook 0:fa7450a43b99 120 if (b4>3) result = result + (0x000080000000); //bit 31
group-FlexBook 0:fa7450a43b99 121 if (b4>2) result = result + (0x000040000000); //bit 30
group-FlexBook 0:fa7450a43b99 122 if (b4>1) result = result + (0x000020000000); //bit 29
group-FlexBook 0:fa7450a43b99 123 if (b4>0) result = result + (0x000010000000); //bit 28
group-FlexBook 0:fa7450a43b99 124
group-FlexBook 0:fa7450a43b99 125 //create bit pattern for fifth (rightmost) bar graph
group-FlexBook 0:fa7450a43b99 126 if (b5>6) result = result + (0x000000100000); //bit 20 - not connected on new OLEDS
group-FlexBook 0:fa7450a43b99 127 if (b5>5) result = result + (0x000000200000); //bit 21
group-FlexBook 0:fa7450a43b99 128 if (b5>4) result = result + (0x000000400000); //bit 22
group-FlexBook 0:fa7450a43b99 129 if (b5>3) result = result + (0x000000800000); //bit 23
group-FlexBook 0:fa7450a43b99 130 if (b5>2) result = result + (0x000000000100); //bit 8
group-FlexBook 0:fa7450a43b99 131 if (b5>1) result = result + (0x000000000200); //bit 9
group-FlexBook 0:fa7450a43b99 132 if (b5>0) result = result + (0x000000000400); //bit 10
group-FlexBook 0:fa7450a43b99 133
group-FlexBook 0:fa7450a43b99 134 //create bit pattern for digit - each digit needs multiple segments to be lit
group-FlexBook 0:fa7450a43b99 135 //7 segments use bits 6, 7, 11, 12, 13, 14 and 15
group-FlexBook 0:fa7450a43b99 136 switch (d1) {
group-FlexBook 0:fa7450a43b99 137 case 0: result = result + (0x01E3 << 6); break; //0001 1110 0011
group-FlexBook 0:fa7450a43b99 138 case 1: result = result + (0x0042 << 6); break; //0000 0100 0010
group-FlexBook 0:fa7450a43b99 139 case 2: result = result + (0x0383 << 6); break; //0011 1000 0011
group-FlexBook 0:fa7450a43b99 140 case 3: result = result + (0x02C3 << 6); break; //0010 1100 0011
group-FlexBook 0:fa7450a43b99 141 case 4: result = result + (0x0262 << 6); break; //0010 0110 0010
group-FlexBook 0:fa7450a43b99 142 case 5: result = result + (0x02E1 << 6); break; //0010 1110 0001
group-FlexBook 0:fa7450a43b99 143 case 6: result = result + (0x03E1 << 6); break; //0011 1110 0001
group-FlexBook 0:fa7450a43b99 144 case 7: result = result + (0x0043 << 6); break; //0000 0100 0011
group-FlexBook 0:fa7450a43b99 145 case 8: result = result + (0x03E3 << 6); break; //0011 1110 0011
group-FlexBook 0:fa7450a43b99 146 case 9: result = result + (0x02E3 << 6); break; //0010 1110 0011
group-FlexBook 0:fa7450a43b99 147 }
group-FlexBook 0:fa7450a43b99 148 //Note least significant 6 bits (0..5) are not used
group-FlexBook 0:fa7450a43b99 149
group-FlexBook 0:fa7450a43b99 150 return(result);
group-FlexBook 0:fa7450a43b99 151 }
group-FlexBook 0:fa7450a43b99 152
group-FlexBook 0:fa7450a43b99 153 void PageOLED::SensorPoll(const SensorData &sensordata)
group-FlexBook 0:fa7450a43b99 154 {
group-FlexBook 0:fa7450a43b99 155 Write(Translate(3,sensordata.temperature,4,sensordata.pressure,2,sensordata.pressure));
group-FlexBook 0:fa7450a43b99 156 //printf("%i \n", sensordata.temperature);
group-FlexBook 0:fa7450a43b99 157
group-FlexBook 0:fa7450a43b99 158 }
group-FlexBook 0:fa7450a43b99 159
group-FlexBook 0:fa7450a43b99 160 void PageOLED::DiceRoll(const int dicenr)
group-FlexBook 0:fa7450a43b99 161 {
group-FlexBook 0:fa7450a43b99 162
group-FlexBook 0:fa7450a43b99 163 }
group-FlexBook 0:fa7450a43b99 164
group-FlexBook 0:fa7450a43b99 165 void PageOLED::HandlePageActions ()
group-FlexBook 0:fa7450a43b99 166 {
group-FlexBook 0:fa7450a43b99 167 //Write(Translate(0,sensordata.temperature,0,sensordata.pressure,0,3));
group-FlexBook 0:fa7450a43b99 168 Log("OLED updated");
group-FlexBook 0:fa7450a43b99 169 }
group-FlexBook 0:fa7450a43b99 170
group-FlexBook 0:fa7450a43b99 171 } // End Flexbook namespace.
group-FlexBook 0:fa7450a43b99 172
group-FlexBook 0:fa7450a43b99 173
group-FlexBook 0:fa7450a43b99 174
group-FlexBook 0:fa7450a43b99 175
group-FlexBook 0:fa7450a43b99 176
group-FlexBook 0:fa7450a43b99 177