Code for driving 9x OLED displays and reding from an HX711 load cell aplifier.
Dependencies: Adafruit_GFX SPI_TFT_ILI9341 TFT_fonts hx711 mbed
main.cpp@0:3745349c0c83, 2015-01-30 (annotated)
- Committer:
- jimconner
- Date:
- Fri Jan 30 00:01:26 2015 +0000
- Revision:
- 0:3745349c0c83
- Child:
- 1:c09b25119427
Added single pin mux support for a CD4067 (will add more pins later)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jimconner | 0:3745349c0c83 | 1 | /* |
jimconner | 0:3745349c0c83 | 2 | * Copyright (c) 2012 Neal Horman - http://www.wanlink.com |
jimconner | 0:3745349c0c83 | 3 | * |
jimconner | 0:3745349c0c83 | 4 | * License: MIT open source (http://opensource.org/licenses/MIT) |
jimconner | 0:3745349c0c83 | 5 | * Summary; |
jimconner | 0:3745349c0c83 | 6 | * Use / modify / distribute / publish it how you want and |
jimconner | 0:3745349c0c83 | 7 | * if you use it, or don't, you can't hold me liable for how |
jimconner | 0:3745349c0c83 | 8 | * it does or doesn't work. |
jimconner | 0:3745349c0c83 | 9 | * If it doesn't work how you want, don't use it, or change |
jimconner | 0:3745349c0c83 | 10 | * it so that it does work. |
jimconner | 0:3745349c0c83 | 11 | */ |
jimconner | 0:3745349c0c83 | 12 | |
jimconner | 0:3745349c0c83 | 13 | #include "mbed.h" |
jimconner | 0:3745349c0c83 | 14 | #include "Adafruit_SSD1306.h" |
jimconner | 0:3745349c0c83 | 15 | #include "Adafruit_GFX.h" |
jimconner | 0:3745349c0c83 | 16 | #include "PinNames.h" |
jimconner | 0:3745349c0c83 | 17 | |
jimconner | 0:3745349c0c83 | 18 | PwmOut led1(LED1); |
jimconner | 0:3745349c0c83 | 19 | PwmOut led2(LED2); |
jimconner | 0:3745349c0c83 | 20 | |
jimconner | 0:3745349c0c83 | 21 | |
jimconner | 0:3745349c0c83 | 22 | // an SPI sub-class that provides a constructed default |
jimconner | 0:3745349c0c83 | 23 | class SPIPreInit : public SPI |
jimconner | 0:3745349c0c83 | 24 | { |
jimconner | 0:3745349c0c83 | 25 | public: |
jimconner | 0:3745349c0c83 | 26 | SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) |
jimconner | 0:3745349c0c83 | 27 | { |
jimconner | 0:3745349c0c83 | 28 | format(8,3); |
jimconner | 0:3745349c0c83 | 29 | frequency(2000000); |
jimconner | 0:3745349c0c83 | 30 | }; |
jimconner | 0:3745349c0c83 | 31 | }; |
jimconner | 0:3745349c0c83 | 32 | |
jimconner | 0:3745349c0c83 | 33 | // an I2C sub-class that provides a constructed default |
jimconner | 0:3745349c0c83 | 34 | class I2CPreInit : public I2C |
jimconner | 0:3745349c0c83 | 35 | { |
jimconner | 0:3745349c0c83 | 36 | public: |
jimconner | 0:3745349c0c83 | 37 | I2CPreInit(PinName PTE0, PinName PTE1) : I2C(PTE0, PTE1) |
jimconner | 0:3745349c0c83 | 38 | { |
jimconner | 0:3745349c0c83 | 39 | frequency(800000); |
jimconner | 0:3745349c0c83 | 40 | start(); |
jimconner | 0:3745349c0c83 | 41 | wait(0.1); // needed so that the displays initialise properly at power-on. |
jimconner | 0:3745349c0c83 | 42 | }; |
jimconner | 0:3745349c0c83 | 43 | }; |
jimconner | 0:3745349c0c83 | 44 | |
jimconner | 0:3745349c0c83 | 45 | //SPIPreInit gSpi(p5,NC,p7); |
jimconner | 0:3745349c0c83 | 46 | //Adafruit_SSD1306_Spi gOled1(gSpi,p26,p25,p24); |
jimconner | 0:3745349c0c83 | 47 | |
jimconner | 0:3745349c0c83 | 48 | I2CPreInit gI2C(PTE0,PTE1); |
jimconner | 0:3745349c0c83 | 49 | mux_SSD1306_I2c gOled1(gI2C,PTD1,PTB0, 0, 0x78,64); |
jimconner | 0:3745349c0c83 | 50 | mux_SSD1306_I2c gOled2(gI2C,PTD1,PTB0, 0, 0x7A,64); |
jimconner | 0:3745349c0c83 | 51 | mux_SSD1306_I2c gOled3(gI2C,PTD1,PTB0, 1, 0x78,64); |
jimconner | 0:3745349c0c83 | 52 | mux_SSD1306_I2c gOled4(gI2C,PTD1,PTB0, 1, 0x7A,64); |
jimconner | 0:3745349c0c83 | 53 | |
jimconner | 0:3745349c0c83 | 54 | void testdrawline() { |
jimconner | 0:3745349c0c83 | 55 | for (int16_t i=0; i<gOled1.width(); i+=4) { |
jimconner | 0:3745349c0c83 | 56 | gOled1.drawLine(0, 0, i, gOled1.height()-1, WHITE); |
jimconner | 0:3745349c0c83 | 57 | gOled1.display(); |
jimconner | 0:3745349c0c83 | 58 | } |
jimconner | 0:3745349c0c83 | 59 | for (int16_t i=0; i<gOled2.height(); i+=4) { |
jimconner | 0:3745349c0c83 | 60 | gOled2.drawLine(0, 0, gOled2.width()-1, i, WHITE); |
jimconner | 0:3745349c0c83 | 61 | gOled2.display(); |
jimconner | 0:3745349c0c83 | 62 | } |
jimconner | 0:3745349c0c83 | 63 | for (int16_t i=0; i<gOled3.height(); i+=4) { |
jimconner | 0:3745349c0c83 | 64 | gOled3.drawLine(0, 0, gOled3.width()-1, i, WHITE); |
jimconner | 0:3745349c0c83 | 65 | gOled3.display(); |
jimconner | 0:3745349c0c83 | 66 | } |
jimconner | 0:3745349c0c83 | 67 | for (int16_t i=0; i<gOled4.width(); i+=4) { |
jimconner | 0:3745349c0c83 | 68 | gOled4.drawLine(0, 0, i, gOled4.height()-1, WHITE); |
jimconner | 0:3745349c0c83 | 69 | gOled4.display(); |
jimconner | 0:3745349c0c83 | 70 | } |
jimconner | 0:3745349c0c83 | 71 | |
jimconner | 0:3745349c0c83 | 72 | } |
jimconner | 0:3745349c0c83 | 73 | |
jimconner | 0:3745349c0c83 | 74 | |
jimconner | 0:3745349c0c83 | 75 | |
jimconner | 0:3745349c0c83 | 76 | int main() |
jimconner | 0:3745349c0c83 | 77 | { uint16_t x=0; |
jimconner | 0:3745349c0c83 | 78 | uint16_t y=65535; |
jimconner | 0:3745349c0c83 | 79 | uint16_t a=16348; |
jimconner | 0:3745349c0c83 | 80 | uint16_t b=49152; |
jimconner | 0:3745349c0c83 | 81 | led1=1; |
jimconner | 0:3745349c0c83 | 82 | led2=1; |
jimconner | 0:3745349c0c83 | 83 | |
jimconner | 0:3745349c0c83 | 84 | |
jimconner | 0:3745349c0c83 | 85 | gOled1.clearDisplay(); |
jimconner | 0:3745349c0c83 | 86 | gOled2.clearDisplay(); |
jimconner | 0:3745349c0c83 | 87 | gOled3.clearDisplay(); |
jimconner | 0:3745349c0c83 | 88 | gOled4.clearDisplay(); |
jimconner | 0:3745349c0c83 | 89 | |
jimconner | 0:3745349c0c83 | 90 | testdrawline(); |
jimconner | 0:3745349c0c83 | 91 | |
jimconner | 0:3745349c0c83 | 92 | gOled1.clearDisplay(); |
jimconner | 0:3745349c0c83 | 93 | gOled2.clearDisplay(); |
jimconner | 0:3745349c0c83 | 94 | gOled3.clearDisplay(); |
jimconner | 0:3745349c0c83 | 95 | gOled4.clearDisplay(); |
jimconner | 0:3745349c0c83 | 96 | |
jimconner | 0:3745349c0c83 | 97 | gOled1.printf(" Counting Up \r\n\n\n\n", gOled1.width(), gOled1.height()); |
jimconner | 0:3745349c0c83 | 98 | gOled2.printf(" Counting Down \r\n\n\n\n", gOled2.width(), gOled2.height()); |
jimconner | 0:3745349c0c83 | 99 | gOled3.printf(" More going up \r\n\n\n\n", gOled3.width(), gOled3.height()); |
jimconner | 0:3745349c0c83 | 100 | gOled4.printf(" More going down \r\n\n\n\n", gOled4.width(), gOled4.height()); |
jimconner | 0:3745349c0c83 | 101 | gOled1.setTextSize(2); |
jimconner | 0:3745349c0c83 | 102 | gOled2.setTextSize(2); |
jimconner | 0:3745349c0c83 | 103 | gOled3.setTextSize(2); |
jimconner | 0:3745349c0c83 | 104 | gOled4.setTextSize(2); |
jimconner | 0:3745349c0c83 | 105 | |
jimconner | 0:3745349c0c83 | 106 | |
jimconner | 0:3745349c0c83 | 107 | while(1) |
jimconner | 0:3745349c0c83 | 108 | { |
jimconner | 0:3745349c0c83 | 109 | led1 = 0.98; |
jimconner | 0:3745349c0c83 | 110 | gOled1.printf(" %uml\r",x); |
jimconner | 0:3745349c0c83 | 111 | gOled1.display(); |
jimconner | 0:3745349c0c83 | 112 | led1 = 1; |
jimconner | 0:3745349c0c83 | 113 | led2 = 0.98; |
jimconner | 0:3745349c0c83 | 114 | gOled2.printf(" %uml\r",y); |
jimconner | 0:3745349c0c83 | 115 | gOled2.display(); |
jimconner | 0:3745349c0c83 | 116 | gOled3.printf(" %uK\r",a); |
jimconner | 0:3745349c0c83 | 117 | gOled3.display(); |
jimconner | 0:3745349c0c83 | 118 | gOled4.printf(" %uK\r",b); |
jimconner | 0:3745349c0c83 | 119 | gOled4.display(); |
jimconner | 0:3745349c0c83 | 120 | led2 = 1; |
jimconner | 0:3745349c0c83 | 121 | x++; |
jimconner | 0:3745349c0c83 | 122 | y--; |
jimconner | 0:3745349c0c83 | 123 | a++; |
jimconner | 0:3745349c0c83 | 124 | b--; |
jimconner | 0:3745349c0c83 | 125 | //wait(0.1); |
jimconner | 0:3745349c0c83 | 126 | } |
jimconner | 0:3745349c0c83 | 127 | } |