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