publish
Dependencies: mbed SDFileSystem
main.cpp@0:b5e10c69bd3e, 2020-07-22 (annotated)
- Committer:
- rempig
- Date:
- Wed Jul 22 10:39:55 2020 +0000
- Revision:
- 0:b5e10c69bd3e
commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rempig | 0:b5e10c69bd3e | 1 | // Wire Master Reader |
rempig | 0:b5e10c69bd3e | 2 | // by Ronan S. Empig |
rempig | 0:b5e10c69bd3e | 3 | #include "mbed.h" |
rempig | 0:b5e10c69bd3e | 4 | #include "SDFileSystem.h" |
rempig | 0:b5e10c69bd3e | 5 | |
rempig | 0:b5e10c69bd3e | 6 | |
rempig | 0:b5e10c69bd3e | 7 | I2C i2c(I2C_SDA, I2C_SCL); |
rempig | 0:b5e10c69bd3e | 8 | Serial pc(SERIAL_TX, SERIAL_RX); |
rempig | 0:b5e10c69bd3e | 9 | |
rempig | 0:b5e10c69bd3e | 10 | SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS |
rempig | 0:b5e10c69bd3e | 11 | FILE *fp; |
rempig | 0:b5e10c69bd3e | 12 | |
rempig | 0:b5e10c69bd3e | 13 | |
rempig | 0:b5e10c69bd3e | 14 | //State Machine |
rempig | 0:b5e10c69bd3e | 15 | int STATEMACHINE = 0; |
rempig | 0:b5e10c69bd3e | 16 | const int IDLESTATE = 0; |
rempig | 0:b5e10c69bd3e | 17 | const int FWVERSIONMIN = 1; |
rempig | 0:b5e10c69bd3e | 18 | const int UIBC5VENB = 2; |
rempig | 0:b5e10c69bd3e | 19 | const int UIBCDISPENB = 3; |
rempig | 0:b5e10c69bd3e | 20 | const int UIBCDISPENB2 = 4; |
rempig | 0:b5e10c69bd3e | 21 | const int UIBCAUXTOUCHENABLE = 5; |
rempig | 0:b5e10c69bd3e | 22 | const int UIBCBACKLIGHTDUTY = 6; |
rempig | 0:b5e10c69bd3e | 23 | |
rempig | 0:b5e10c69bd3e | 24 | //Variables |
rempig | 0:b5e10c69bd3e | 25 | char c; |
rempig | 0:b5e10c69bd3e | 26 | int addr1 = 0; |
rempig | 0:b5e10c69bd3e | 27 | int addr2 = 0; |
rempig | 0:b5e10c69bd3e | 28 | int serbuff = 0; |
rempig | 0:b5e10c69bd3e | 29 | |
rempig | 0:b5e10c69bd3e | 30 | |
rempig | 0:b5e10c69bd3e | 31 | void read8080(int faddress, int flength) { |
rempig | 0:b5e10c69bd3e | 32 | pinMode(D0X, INPUT); |
rempig | 0:b5e10c69bd3e | 33 | pinMode(D1X, INPUT); |
rempig | 0:b5e10c69bd3e | 34 | pinMode(D2X, INPUT); |
rempig | 0:b5e10c69bd3e | 35 | pinMode(D3X, INPUT); |
rempig | 0:b5e10c69bd3e | 36 | pinMode(D4X, INPUT); |
rempig | 0:b5e10c69bd3e | 37 | pinMode(D5X, INPUT); |
rempig | 0:b5e10c69bd3e | 38 | pinMode(D6X, INPUT); |
rempig | 0:b5e10c69bd3e | 39 | pinMode(D7X, INPUT); |
rempig | 0:b5e10c69bd3e | 40 | digitalWrite(CSX, LOW); |
rempig | 0:b5e10c69bd3e | 41 | digitalWrite(DCX, LOW); |
rempig | 0:b5e10c69bd3e | 42 | digitalWrite(WRX, HIGH); |
rempig | 0:b5e10c69bd3e | 43 | digitalWrite(RDX, LOW); |
rempig | 0:b5e10c69bd3e | 44 | } |
rempig | 0:b5e10c69bd3e | 45 | |
rempig | 0:b5e10c69bd3e | 46 | void write8080(int faddress, int flength) { |
rempig | 0:b5e10c69bd3e | 47 | pinMode(D0X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 48 | pinMode(D1X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 49 | pinMode(D2X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 50 | pinMode(D3X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 51 | pinMode(D4X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 52 | pinMode(D5X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 53 | pinMode(D6X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 54 | pinMode(D7X, OUTPUT); |
rempig | 0:b5e10c69bd3e | 55 | STATE8080 = SIDLE; |
rempig | 0:b5e10c69bd3e | 56 | |
rempig | 0:b5e10c69bd3e | 57 | |
rempig | 0:b5e10c69bd3e | 58 | while (STATE8080 != SDONE) { |
rempig | 0:b5e10c69bd3e | 59 | switch (STATE8080) { |
rempig | 0:b5e10c69bd3e | 60 | case SIDLE: |
rempig | 0:b5e10c69bd3e | 61 | digitalWrite(CSX, LOW); |
rempig | 0:b5e10c69bd3e | 62 | STATE8080 = SCOMMAND; |
rempig | 0:b5e10c69bd3e | 63 | delay(100); |
rempig | 0:b5e10c69bd3e | 64 | break; |
rempig | 0:b5e10c69bd3e | 65 | |
rempig | 0:b5e10c69bd3e | 66 | case SCOMMAND1: |
rempig | 0:b5e10c69bd3e | 67 | digitalWrite(DCX, LOW); |
rempig | 0:b5e10c69bd3e | 68 | digitalWrite(CSX, LOW); |
rempig | 0:b5e10c69bd3e | 69 | digitalWrite(WRX, LOW); |
rempig | 0:b5e10c69bd3e | 70 | digitalWrite(RDX, HIGH); |
rempig | 0:b5e10c69bd3e | 71 | STATE8080 = SDATA; |
rempig | 0:b5e10c69bd3e | 72 | delay(100); |
rempig | 0:b5e10c69bd3e | 73 | break; |
rempig | 0:b5e10c69bd3e | 74 | |
rempig | 0:b5e10c69bd3e | 75 | case SCOMMAND2: |
rempig | 0:b5e10c69bd3e | 76 | digitalWrite(WRX, HIGH); |
rempig | 0:b5e10c69bd3e | 77 | digitalWrite(D0X, bitRead(); |
rempig | 0:b5e10c69bd3e | 78 | digitalWrite(D1X, LOW); |
rempig | 0:b5e10c69bd3e | 79 | digitalWrite(D2X, LOW); |
rempig | 0:b5e10c69bd3e | 80 | digitalWrite(D3X, LOW); |
rempig | 0:b5e10c69bd3e | 81 | digitalWrite(D4X, LOW); |
rempig | 0:b5e10c69bd3e | 82 | digitalWrite(D5X, LOW); |
rempig | 0:b5e10c69bd3e | 83 | digitalWrite(D6X, LOW); |
rempig | 0:b5e10c69bd3e | 84 | digitalWrite(D7X, LOW); |
rempig | 0:b5e10c69bd3e | 85 | STATE8080 = SDATA; |
rempig | 0:b5e10c69bd3e | 86 | delay(100); |
rempig | 0:b5e10c69bd3e | 87 | break; |
rempig | 0:b5e10c69bd3e | 88 | |
rempig | 0:b5e10c69bd3e | 89 | case SDATA: |
rempig | 0:b5e10c69bd3e | 90 | digitalWrite(CSX, LOW); |
rempig | 0:b5e10c69bd3e | 91 | digitalWrite(DCX, LOW); |
rempig | 0:b5e10c69bd3e | 92 | digitalWrite(CSX, LOW); |
rempig | 0:b5e10c69bd3e | 93 | digitalWrite(WRX, LOW); |
rempig | 0:b5e10c69bd3e | 94 | digitalWrite(RDX, HIGH); |
rempig | 0:b5e10c69bd3e | 95 | STATE8080 = SDONE; |
rempig | 0:b5e10c69bd3e | 96 | delay(100); |
rempig | 0:b5e10c69bd3e | 97 | break; |
rempig | 0:b5e10c69bd3e | 98 | |
rempig | 0:b5e10c69bd3e | 99 | case SDONE: |
rempig | 0:b5e10c69bd3e | 100 | |
rempig | 0:b5e10c69bd3e | 101 | STATE8080 = SCOMMAND; |
rempig | 0:b5e10c69bd3e | 102 | delay(100); |
rempig | 0:b5e10c69bd3e | 103 | break; |
rempig | 0:b5e10c69bd3e | 104 | |
rempig | 0:b5e10c69bd3e | 105 | default: |
rempig | 0:b5e10c69bd3e | 106 | |
rempig | 0:b5e10c69bd3e | 107 | break; |
rempig | 0:b5e10c69bd3e | 108 | } |
rempig | 0:b5e10c69bd3e | 109 | } |
rempig | 0:b5e10c69bd3e | 110 | } |
rempig | 0:b5e10c69bd3e | 111 | |
rempig | 0:b5e10c69bd3e | 112 | |
rempig | 0:b5e10c69bd3e | 113 | int main() |
rempig | 0:b5e10c69bd3e | 114 | { |
rempig | 0:b5e10c69bd3e | 115 | //char data_write[3]; |
rempig | 0:b5e10c69bd3e | 116 | char data_write[3]; |
rempig | 0:b5e10c69bd3e | 117 | //char data_wread[2]; |
rempig | 0:b5e10c69bd3e | 118 | //char data_read[2]; |
rempig | 0:b5e10c69bd3e | 119 | //char data_counter = 0; |
rempig | 0:b5e10c69bd3e | 120 | |
rempig | 0:b5e10c69bd3e | 121 | pc.baud(115200); |
rempig | 0:b5e10c69bd3e | 122 | |
rempig | 0:b5e10c69bd3e | 123 | while(1) { |
rempig | 0:b5e10c69bd3e | 124 | //pc.printf("LOOPING\n"); |
rempig | 0:b5e10c69bd3e | 125 | |
rempig | 0:b5e10c69bd3e | 126 | switch (STATEMACHINE) { |
rempig | 0:b5e10c69bd3e | 127 | |
rempig | 0:b5e10c69bd3e | 128 | case IDLESTATE: //Wait for start from the computer |
rempig | 0:b5e10c69bd3e | 129 | //pc.printf("IDLE\n"); |
rempig | 0:b5e10c69bd3e | 130 | addr1 = 0xAA; |
rempig | 0:b5e10c69bd3e | 131 | addr2 = 0xAA; |
rempig | 0:b5e10c69bd3e | 132 | serbuff = 0; |
rempig | 0:b5e10c69bd3e | 133 | |
rempig | 0:b5e10c69bd3e | 134 | //pc.printf("GOTCHA\n"); |
rempig | 0:b5e10c69bd3e | 135 | if (pc.readable() ) { |
rempig | 0:b5e10c69bd3e | 136 | c = pc.getc(); |
rempig | 0:b5e10c69bd3e | 137 | if( 'r' == c ) { |
rempig | 0:b5e10c69bd3e | 138 | STATEMACHINE = FWVERSIONMIN; |
rempig | 0:b5e10c69bd3e | 139 | pc.printf("TRIGGERED\n"); |
rempig | 0:b5e10c69bd3e | 140 | } else { |
rempig | 0:b5e10c69bd3e | 141 | pc.printf("NOTTRIGGERED\n"); |
rempig | 0:b5e10c69bd3e | 142 | } |
rempig | 0:b5e10c69bd3e | 143 | } |
rempig | 0:b5e10c69bd3e | 144 | |
rempig | 0:b5e10c69bd3e | 145 | break; |
rempig | 0:b5e10c69bd3e | 146 | |
rempig | 0:b5e10c69bd3e | 147 | case FWVERSIONMIN: |
rempig | 0:b5e10c69bd3e | 148 | /* Wire.beginTransmission(addr2); // transmit to device address |
rempig | 0:b5e10c69bd3e | 149 | Wire.write(byte(0x01)); // sends control |
rempig | 0:b5e10c69bd3e | 150 | Wire.write(byte(0xFF)); // sends command |
rempig | 0:b5e10c69bd3e | 151 | error = Wire.endTransmission(); // stop transmitting |
rempig | 0:b5e10c69bd3e | 152 | wait_ms(50); |
rempig | 0:b5e10c69bd3e | 153 | Wire.requestFrom(addr2, 1); |
rempig | 0:b5e10c69bd3e | 154 | while (Wire.available()) { |
rempig | 0:b5e10c69bd3e | 155 | int c = Wire.read(); // receive a byte as character |
rempig | 0:b5e10c69bd3e | 156 | //Serial.write(c); //write data read from I2C to serial port for the software to read |
rempig | 0:b5e10c69bd3e | 157 | Serial.println(c); //write data read from I2C to serial port for the software to read |
rempig | 0:b5e10c69bd3e | 158 | } |
rempig | 0:b5e10c69bd3e | 159 | */ |
rempig | 0:b5e10c69bd3e | 160 | // data_wread[0] = 0x01; |
rempig | 0:b5e10c69bd3e | 161 | // data_wread[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 162 | // data_wread[0] = 0xFF; |
rempig | 0:b5e10c69bd3e | 163 | // i2c.write(addr2, data_wread, 1, 0); |
rempig | 0:b5e10c69bd3e | 164 | // i2c.read(addr2, data_read, 1, 0); |
rempig | 0:b5e10c69bd3e | 165 | // pc.printf("Version Min: "); |
rempig | 0:b5e10c69bd3e | 166 | // pc.printf("Character: %c\n", data_read[0]); |
rempig | 0:b5e10c69bd3e | 167 | |
rempig | 0:b5e10c69bd3e | 168 | STATEMACHINE = UIBC5VENB; |
rempig | 0:b5e10c69bd3e | 169 | break; |
rempig | 0:b5e10c69bd3e | 170 | |
rempig | 0:b5e10c69bd3e | 171 | |
rempig | 0:b5e10c69bd3e | 172 | case UIBC5VENB: //power on the panel |
rempig | 0:b5e10c69bd3e | 173 | /* |
rempig | 0:b5e10c69bd3e | 174 | Wire.beginTransmission(addr1); // transmit to device 0x2C |
rempig | 0:b5e10c69bd3e | 175 | Wire.write(byte(0x00)); // sends control |
rempig | 0:b5e10c69bd3e | 176 | Wire.write(byte(0x1E)); // sends command |
rempig | 0:b5e10c69bd3e | 177 | Wire.write(byte(0xFF)); // sends data |
rempig | 0:b5e10c69bd3e | 178 | error = Wire.endTransmission(); // stop transmitting |
rempig | 0:b5e10c69bd3e | 179 | */ |
rempig | 0:b5e10c69bd3e | 180 | pc.printf("UIBC5VENB\n"); |
rempig | 0:b5e10c69bd3e | 181 | data_write[0] = 0x00; |
rempig | 0:b5e10c69bd3e | 182 | data_write[1] = 0x06 << 1; //shl 0x06 with 1 |
rempig | 0:b5e10c69bd3e | 183 | data_write[2] = 0xFF; |
rempig | 0:b5e10c69bd3e | 184 | // data_write[0] = 0x06; |
rempig | 0:b5e10c69bd3e | 185 | // data_write[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 186 | i2c.write(addr2, data_write, 3, 0); |
rempig | 0:b5e10c69bd3e | 187 | |
rempig | 0:b5e10c69bd3e | 188 | // i2c.write(addr2, data_write, 2, 0); |
rempig | 0:b5e10c69bd3e | 189 | wait_ms(1000); |
rempig | 0:b5e10c69bd3e | 190 | STATEMACHINE = UIBCDISPENB; |
rempig | 0:b5e10c69bd3e | 191 | break; |
rempig | 0:b5e10c69bd3e | 192 | |
rempig | 0:b5e10c69bd3e | 193 | case UIBCDISPENB: //get panel button address from software |
rempig | 0:b5e10c69bd3e | 194 | pc.printf("UIBCDISPENB\n"); |
rempig | 0:b5e10c69bd3e | 195 | data_write[0] = 0x00; |
rempig | 0:b5e10c69bd3e | 196 | data_write[1] = 0x02 << 1; //shl 0x02 with 1 |
rempig | 0:b5e10c69bd3e | 197 | data_write[2] = 0xFF; |
rempig | 0:b5e10c69bd3e | 198 | // data_write[0] = 0x02; |
rempig | 0:b5e10c69bd3e | 199 | // data_write[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 200 | |
rempig | 0:b5e10c69bd3e | 201 | i2c.write(addr2, data_write, 3, 0); |
rempig | 0:b5e10c69bd3e | 202 | // i2c.write(addr2, data_write, 2, 0); |
rempig | 0:b5e10c69bd3e | 203 | wait_ms(1000); |
rempig | 0:b5e10c69bd3e | 204 | STATEMACHINE = UIBCDISPENB2; |
rempig | 0:b5e10c69bd3e | 205 | |
rempig | 0:b5e10c69bd3e | 206 | break; |
rempig | 0:b5e10c69bd3e | 207 | |
rempig | 0:b5e10c69bd3e | 208 | case UIBCDISPENB2: |
rempig | 0:b5e10c69bd3e | 209 | pc.printf("UIBCDISPENB2\n"); |
rempig | 0:b5e10c69bd3e | 210 | data_write[0] = 0x00; |
rempig | 0:b5e10c69bd3e | 211 | data_write[1] = 0x05 << 1; //shl 0x05 with 1 |
rempig | 0:b5e10c69bd3e | 212 | data_write[2] = 0xFF; |
rempig | 0:b5e10c69bd3e | 213 | // data_write[0] = 0x05; |
rempig | 0:b5e10c69bd3e | 214 | // data_write[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 215 | |
rempig | 0:b5e10c69bd3e | 216 | i2c.write(addr2, data_write, 3, 0); |
rempig | 0:b5e10c69bd3e | 217 | //i2c.write(addr2, data_write, 2, 0); |
rempig | 0:b5e10c69bd3e | 218 | wait_ms(1000); |
rempig | 0:b5e10c69bd3e | 219 | STATEMACHINE = UIBCAUXTOUCHENABLE; |
rempig | 0:b5e10c69bd3e | 220 | break; |
rempig | 0:b5e10c69bd3e | 221 | |
rempig | 0:b5e10c69bd3e | 222 | case UIBCAUXTOUCHENABLE: |
rempig | 0:b5e10c69bd3e | 223 | pc.printf("UIBCAUXTOUCHENABLE\n"); |
rempig | 0:b5e10c69bd3e | 224 | data_write[0] = 0x00; |
rempig | 0:b5e10c69bd3e | 225 | data_write[1] = 0x07 << 1; //shl 0x07 with 1 |
rempig | 0:b5e10c69bd3e | 226 | data_write[2] = 0xFF; |
rempig | 0:b5e10c69bd3e | 227 | // data_write[0] = 0x07; |
rempig | 0:b5e10c69bd3e | 228 | // data_write[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 229 | |
rempig | 0:b5e10c69bd3e | 230 | i2c.write(addr2, data_write, 3, 0); |
rempig | 0:b5e10c69bd3e | 231 | // i2c.write(addr2, data_write, 2, 0); |
rempig | 0:b5e10c69bd3e | 232 | wait_ms(1000); |
rempig | 0:b5e10c69bd3e | 233 | STATEMACHINE = UIBCBACKLIGHTDUTY; |
rempig | 0:b5e10c69bd3e | 234 | break; |
rempig | 0:b5e10c69bd3e | 235 | |
rempig | 0:b5e10c69bd3e | 236 | case UIBCBACKLIGHTDUTY: |
rempig | 0:b5e10c69bd3e | 237 | pc.printf("UIBCBACKLIGHTDUTY\n"); |
rempig | 0:b5e10c69bd3e | 238 | data_write[0] = 0x10; |
rempig | 0:b5e10c69bd3e | 239 | data_write[1] = 0x80 << 1; //shl 0x80 with 1 |
rempig | 0:b5e10c69bd3e | 240 | data_write[2] = 0xFF; |
rempig | 0:b5e10c69bd3e | 241 | |
rempig | 0:b5e10c69bd3e | 242 | // data_write[0] = 0x80; |
rempig | 0:b5e10c69bd3e | 243 | // data_write[1] = 0xFF; |
rempig | 0:b5e10c69bd3e | 244 | |
rempig | 0:b5e10c69bd3e | 245 | i2c.write(addr2, data_write, 3, 0); |
rempig | 0:b5e10c69bd3e | 246 | //i2c.write(addr2, data_write, 2, 0); |
rempig | 0:b5e10c69bd3e | 247 | |
rempig | 0:b5e10c69bd3e | 248 | wait_ms(1000); |
rempig | 0:b5e10c69bd3e | 249 | STATEMACHINE = IDLESTATE; |
rempig | 0:b5e10c69bd3e | 250 | |
rempig | 0:b5e10c69bd3e | 251 | break; |
rempig | 0:b5e10c69bd3e | 252 | |
rempig | 0:b5e10c69bd3e | 253 | |
rempig | 0:b5e10c69bd3e | 254 | |
rempig | 0:b5e10c69bd3e | 255 | default: |
rempig | 0:b5e10c69bd3e | 256 | |
rempig | 0:b5e10c69bd3e | 257 | break; |
rempig | 0:b5e10c69bd3e | 258 | } |
rempig | 0:b5e10c69bd3e | 259 | } |
rempig | 0:b5e10c69bd3e | 260 | } |