publish
Dependencies: mbed SDFileSystem
Diff: main.cpp
- Revision:
- 0:b5e10c69bd3e
diff -r 000000000000 -r b5e10c69bd3e main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jul 22 10:39:55 2020 +0000 @@ -0,0 +1,260 @@ +// 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; + } + } +} \ No newline at end of file