Bmag incl gps rettelse
Dependencies: mbed WDT MODSERIAL BME280
Diff: main.h
- Branch:
- MbedBMAGThrRev
- Revision:
- 27:efd122db8855
- Parent:
- 24:099df3fa2b13
- Child:
- 28:ed0d29f63b55
--- a/main.h Tue Aug 15 13:41:07 2017 +0000 +++ b/main.h Wed Aug 23 13:22:54 2017 +0000 @@ -1,5 +1,6 @@ #include <string> #include "mbed.h" +#include "rtos.h" #include <Ticker.h> #include "MODSERIAL/MODSERIAL.h" #include "NMEA/NMEA.h" @@ -7,7 +8,6 @@ #include "WDT/WDT.h" #include "SPS/SPS.h" #include "BMAG/BMAG.h" -#include "EA_OLED/EA_OLED.h" #include "ErrorHandler/ErrorHandler.h" #define FWSRCVERSION "x" @@ -37,9 +37,6 @@ //BMAG Rx callback prototype void bmagrxCallback(MODSERIAL_IRQ_INFO *q); -//EA_OLED display -static EA_OLED display; - //GPS NMEA Parser static NMEA gpsNMEA; @@ -47,6 +44,117 @@ static BMAG magParser; +//EA_OLED display +Thread thr_writelines; +SPI * spiptr; +DigitalOut * csptr; +string l1; +string l2; + +void init_config(char c){ + *csptr = 0; //chip select to start data transmission + spiptr->write(c); + *csptr = 1; //chip select to end data transmission + wait_us(2); +}; + + +void EA_OLED(){ + //clear l1 and l2 + + l1 = ""; + l2 = ""; + + spiptr = new SPI(p5, p6, p7); + csptr = new DigitalOut(p8); + + *csptr = 1; //high at idle + + spiptr->format(10,3); //10bit, high steady state clock + spiptr->frequency(1000000); //1MHz spi clock + + + //function set european chararacter set + init_config(0x39); + //display off + init_config(0x08); + //entry mode set increment cursor by 1 not shifting display + init_config(0x06); + //Character mode and internel power on + init_config(0x17); + //clear display + init_config(0x01); + //return home + init_config(0x02); + //display on + init_config(0x0C); + wait_ms(10); //Time to stabilize (wont work without) + + +}; +void clear_display(){ + //clear display + init_config(0x01); + Thread::wait(1); + Thread::yield(); + while(1){ + Thread::wait(2000); + Thread::yield(); + } + +}; +void clear_display_waiting(){ + //clear display + init_config(0x01); + wait_ms(1); + +}; + +void write_lines(){ + + //cursor return + *csptr = 0; //chip select to start data transmission + spiptr->write(0x02); + *csptr = 1; //chip select to end data transmission + Thread::wait(1); + + //write l1 + for(int i = 0; i < strlen(l1.c_str()); i++){ + *csptr = 0; //chip select to start data transmission + spiptr->write(0x200 | l1[i]); //add 0x02 for character transmission + *csptr = 1; //chip select to end data transmission + Thread::wait(1); + } + + //cursor return + cursor pos set + init_config(0x02); + Thread::wait(1); + for(int i = 0; i < 64; i++){ + + *csptr = 0; //chip select to start data transmission + spiptr->write(0x14); + *csptr = 1; //chip select to end data transmission + Thread::wait(1); + } + + + //write l2 + for(int i = 0; i < strlen(l2.c_str()); i++){ + *csptr = 0; //chip select to start data transmission + spiptr->write(0x200 | l2[i]); //add 0x02 for character transmission + *csptr = 1; //chip select to end data transmission + Thread::wait(1); + } + + Thread::yield(); + while(1){ + Thread::wait(2000); + Thread::yield(); + } + + +}; +