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.
Revision 0:b6f6b0483eff, committed 2016-01-05
- Comitter:
- BPPearson
- Date:
- Tue Jan 05 16:42:18 2016 +0000
- Commit message:
- Biref interface
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r b6f6b0483eff main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jan 05 16:42:18 2016 +0000 @@ -0,0 +1,243 @@ +#include "mbed.h" + +#define COMMAND 0 +#define DATA 1 + +Serial pc(USBTX, USBRX); +Serial birefSensor(p9,p10); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); +AnalogOut birefOut(p18); +BusInOut databus(p21, p22, p23, p24, p25, p26, p27, p28); +DigitalOut registerSelect(p30); +DigitalOut readWriteClock(p29); +Ticker updateLCD; + + +char rcvBuff[80]; +int buffIdx = 0; +float birefVal, birefStdDev; + +void writeToLCD(bool rs, char data){ + + // set register select pin + registerSelect = rs; + + // set read/write pin to write + //readWrite = 0; + + // set bus as output + databus.output(); + + // put data onto bus + databus = data; + + // pulse read/write clock + readWriteClock = 1; + + wait_us(1); + + readWriteClock = 0; + + wait_us(1); + + // clear data bus + databus = 0; + + //pc.printf("%02x\n", data); + +} + + +char readFromLCD(bool rs){ + + char data; + + // set register select pin + registerSelect = rs; + + // set read/write pin to read + //readWrite = 1; + + // set bus as output + databus.input(); + + // put data onto bus + data = databus; + + // pulse read/write clock + readWriteClock = 1; + + wait_us(10); + + readWriteClock = 0; + + return data; +} + + +void resetLCD(){ +} + + +void initLCD(){ + + // wait 15 ms to allow LCD to initialise + wait_ms(15); + + // set interface for 8 bit mode + writeToLCD(COMMAND, 0x30); + + // give it time + wait_ms(5); + + // set interface for 8 bit mode again + writeToLCD(COMMAND, 0x30); + + // give it time + wait_us(100); + + // set interface for 8 bit mode again, last one before we can configure the display + writeToLCD(COMMAND, 0x30); + + // give it time + wait_us(500); + + // set interface for 8 bit mode, 2 display lines and 5 x 8 character font + writeToLCD(COMMAND, 0x38); + + // give it time + wait_us(100); + + // display off + writeToLCD(COMMAND, 0x08); + + // give it time + wait_us(100); + + // clear the screen + writeToLCD(COMMAND, 0x01); + + // give it time to finish + wait_ms(2); + + // set entry mode to increment cursor position cursor on write + writeToLCD(COMMAND, 0x03); + + // give it time to finish + wait_us(100); + + // position cursor at home + writeToLCD(COMMAND, 0x02); + + // give it time to finish + wait_ms(2); + + // display on + writeToLCD(COMMAND, 0x0C); +} + + + + +void positionCursor(uint8_t x, uint8_t y){ + + if (x > 7) x = 0; + + if (y == 1) + writeToLCD(COMMAND, 0x80 + 0x40 + x); + else + writeToLCD(COMMAND, 0x80 + 0x00 + x); + + wait_us(50); +} + + +void displayString(int x, int y, char *str){ + + // position cursor + positionCursor(x, y); + + // write string to screen + for (int i=0; i<strlen(str); i++){ + writeToLCD(DATA, str[i]); + + wait_us(50); + } +} + + + + void updateDisplay(){ + char str[20]; + + sprintf( str, "b %5.3f", birefVal); + + displayString(0, 0, str); + + if (birefStdDev <= 0.0) + birefStdDev = 0.0001; + + sprintf( str, "s %5.3f", birefStdDev); + + displayString(0, 1, str); +} + + +void rcvCharISR() +{ + float tempf; + char chr = birefSensor.getc(); + + //led1 = !led1; + + //pc.printf("%c (%02x)\n", chr, chr); + + rcvBuff[buffIdx++] = chr; + + if (buffIdx >= 80) + { + buffIdx = 0; + } + + if (chr == '\n') + { + rcvBuff[buffIdx] = '\0'; + + switch (rcvBuff[0]){ + case 'm': + sscanf(rcvBuff, "m%f %f\n", &birefVal, &birefStdDev); + birefOut = birefVal; + break; + case 'd': + sscanf(rcvBuff, "d%f %f %f %f %f %f \n", &tempf, &tempf, &tempf, &tempf, &birefVal, &birefStdDev); + birefOut = birefVal; + break; + default: ; + } + buffIdx = 0; + } +} + + + +int main() { + + initLCD(); + + birefSensor.baud(115200); + + pc.printf("Hello\n"); + + updateLCD.attach(&updateDisplay, 0.5); + + birefSensor.attach(&rcvCharISR); + + while(1) { + + wait(0.02); + //wait(1.0); + } +}
diff -r 000000000000 -r b6f6b0483eff mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Jan 05 16:42:18 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac \ No newline at end of file