publish
Dependencies: mbed SDFileSystem
main.cpp
- Committer:
- rempig
- Date:
- 2020-07-22
- Revision:
- 0:b5e10c69bd3e
File content as of revision 0:b5e10c69bd3e:
// Wire Master Reader // by Ronan S. Empig #include "mbed.h" #include "SDFileSystem.h" I2C i2c(I2C_SDA, I2C_SCL); Serial pc(SERIAL_TX, SERIAL_RX); SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS FILE *fp; //State Machine int STATEMACHINE = 0; const int IDLESTATE = 0; const int FWVERSIONMIN = 1; const int UIBC5VENB = 2; const int UIBCDISPENB = 3; const int UIBCDISPENB2 = 4; const int UIBCAUXTOUCHENABLE = 5; const int UIBCBACKLIGHTDUTY = 6; //Variables char c; int addr1 = 0; int addr2 = 0; int serbuff = 0; void read8080(int faddress, int flength) { pinMode(D0X, INPUT); pinMode(D1X, INPUT); pinMode(D2X, INPUT); pinMode(D3X, INPUT); pinMode(D4X, INPUT); pinMode(D5X, INPUT); pinMode(D6X, INPUT); pinMode(D7X, INPUT); digitalWrite(CSX, LOW); digitalWrite(DCX, LOW); digitalWrite(WRX, HIGH); digitalWrite(RDX, LOW); } void write8080(int faddress, int flength) { pinMode(D0X, OUTPUT); pinMode(D1X, OUTPUT); pinMode(D2X, OUTPUT); pinMode(D3X, OUTPUT); pinMode(D4X, OUTPUT); pinMode(D5X, OUTPUT); pinMode(D6X, OUTPUT); pinMode(D7X, OUTPUT); STATE8080 = SIDLE; while (STATE8080 != SDONE) { switch (STATE8080) { case SIDLE: digitalWrite(CSX, LOW); STATE8080 = SCOMMAND; delay(100); break; case SCOMMAND1: digitalWrite(DCX, LOW); digitalWrite(CSX, LOW); digitalWrite(WRX, LOW); digitalWrite(RDX, HIGH); STATE8080 = SDATA; delay(100); break; case SCOMMAND2: digitalWrite(WRX, HIGH); digitalWrite(D0X, bitRead(); digitalWrite(D1X, LOW); digitalWrite(D2X, LOW); digitalWrite(D3X, LOW); digitalWrite(D4X, LOW); digitalWrite(D5X, LOW); digitalWrite(D6X, LOW); digitalWrite(D7X, LOW); STATE8080 = SDATA; delay(100); break; case SDATA: digitalWrite(CSX, LOW); digitalWrite(DCX, LOW); digitalWrite(CSX, LOW); digitalWrite(WRX, LOW); digitalWrite(RDX, HIGH); STATE8080 = SDONE; delay(100); break; case SDONE: STATE8080 = SCOMMAND; delay(100); break; default: break; } } } int main() { //char data_write[3]; char data_write[3]; //char data_wread[2]; //char data_read[2]; //char data_counter = 0; pc.baud(115200); while(1) { //pc.printf("LOOPING\n"); switch (STATEMACHINE) { case IDLESTATE: //Wait for start from the computer //pc.printf("IDLE\n"); addr1 = 0xAA; addr2 = 0xAA; serbuff = 0; //pc.printf("GOTCHA\n"); if (pc.readable() ) { c = pc.getc(); if( 'r' == c ) { STATEMACHINE = FWVERSIONMIN; pc.printf("TRIGGERED\n"); } else { pc.printf("NOTTRIGGERED\n"); } } break; case FWVERSIONMIN: /* Wire.beginTransmission(addr2); // transmit to device address Wire.write(byte(0x01)); // sends control Wire.write(byte(0xFF)); // sends command error = Wire.endTransmission(); // stop transmitting wait_ms(50); Wire.requestFrom(addr2, 1); while (Wire.available()) { int c = Wire.read(); // receive a byte as character //Serial.write(c); //write data read from I2C to serial port for the software to read Serial.println(c); //write data read from I2C to serial port for the software to read } */ // data_wread[0] = 0x01; // data_wread[1] = 0xFF; // data_wread[0] = 0xFF; // i2c.write(addr2, data_wread, 1, 0); // i2c.read(addr2, data_read, 1, 0); // pc.printf("Version Min: "); // pc.printf("Character: %c\n", data_read[0]); STATEMACHINE = UIBC5VENB; break; case UIBC5VENB: //power on the panel /* Wire.beginTransmission(addr1); // transmit to device 0x2C Wire.write(byte(0x00)); // sends control Wire.write(byte(0x1E)); // sends command Wire.write(byte(0xFF)); // sends data error = Wire.endTransmission(); // stop transmitting */ pc.printf("UIBC5VENB\n"); data_write[0] = 0x00; data_write[1] = 0x06 << 1; //shl 0x06 with 1 data_write[2] = 0xFF; // data_write[0] = 0x06; // data_write[1] = 0xFF; i2c.write(addr2, data_write, 3, 0); // i2c.write(addr2, data_write, 2, 0); wait_ms(1000); STATEMACHINE = UIBCDISPENB; break; case UIBCDISPENB: //get panel button address from software pc.printf("UIBCDISPENB\n"); data_write[0] = 0x00; data_write[1] = 0x02 << 1; //shl 0x02 with 1 data_write[2] = 0xFF; // data_write[0] = 0x02; // data_write[1] = 0xFF; i2c.write(addr2, data_write, 3, 0); // i2c.write(addr2, data_write, 2, 0); wait_ms(1000); STATEMACHINE = UIBCDISPENB2; break; case UIBCDISPENB2: pc.printf("UIBCDISPENB2\n"); data_write[0] = 0x00; data_write[1] = 0x05 << 1; //shl 0x05 with 1 data_write[2] = 0xFF; // data_write[0] = 0x05; // data_write[1] = 0xFF; i2c.write(addr2, data_write, 3, 0); //i2c.write(addr2, data_write, 2, 0); wait_ms(1000); STATEMACHINE = UIBCAUXTOUCHENABLE; break; case UIBCAUXTOUCHENABLE: pc.printf("UIBCAUXTOUCHENABLE\n"); data_write[0] = 0x00; data_write[1] = 0x07 << 1; //shl 0x07 with 1 data_write[2] = 0xFF; // data_write[0] = 0x07; // data_write[1] = 0xFF; i2c.write(addr2, data_write, 3, 0); // i2c.write(addr2, data_write, 2, 0); wait_ms(1000); STATEMACHINE = UIBCBACKLIGHTDUTY; break; case UIBCBACKLIGHTDUTY: pc.printf("UIBCBACKLIGHTDUTY\n"); data_write[0] = 0x10; data_write[1] = 0x80 << 1; //shl 0x80 with 1 data_write[2] = 0xFF; // data_write[0] = 0x80; // data_write[1] = 0xFF; i2c.write(addr2, data_write, 3, 0); //i2c.write(addr2, data_write, 2, 0); wait_ms(1000); STATEMACHINE = IDLESTATE; break; default: break; } } }