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@1:c09b25119427, 2015-02-05 (annotated)
- Committer:
- jimconner
- Date:
- Thu Feb 05 22:08:34 2015 +0000
- Revision:
- 1:c09b25119427
- Parent:
- 0:3745349c0c83
- Child:
- 2:c5f60c130f9a
Test code for running 9 oled displays - I seem to only be able to get 7 working at a time - I suspect I'm running out of memory on the KL25-Z
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 | 1:c09b25119427 | 21 | #define MUX_MASK 0x0000000F |
jimconner | 1:c09b25119427 | 22 | PortOut MuxPortOut(PortB, MUX_MASK); |
jimconner | 0:3745349c0c83 | 23 | |
jimconner | 0:3745349c0c83 | 24 | // an SPI sub-class that provides a constructed default |
jimconner | 0:3745349c0c83 | 25 | class SPIPreInit : public SPI |
jimconner | 0:3745349c0c83 | 26 | { |
jimconner | 0:3745349c0c83 | 27 | public: |
jimconner | 0:3745349c0c83 | 28 | SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) |
jimconner | 0:3745349c0c83 | 29 | { |
jimconner | 0:3745349c0c83 | 30 | format(8,3); |
jimconner | 0:3745349c0c83 | 31 | frequency(2000000); |
jimconner | 0:3745349c0c83 | 32 | }; |
jimconner | 0:3745349c0c83 | 33 | }; |
jimconner | 0:3745349c0c83 | 34 | |
jimconner | 0:3745349c0c83 | 35 | // an I2C sub-class that provides a constructed default |
jimconner | 0:3745349c0c83 | 36 | class I2CPreInit : public I2C |
jimconner | 0:3745349c0c83 | 37 | { |
jimconner | 0:3745349c0c83 | 38 | public: |
jimconner | 0:3745349c0c83 | 39 | I2CPreInit(PinName PTE0, PinName PTE1) : I2C(PTE0, PTE1) |
jimconner | 0:3745349c0c83 | 40 | { |
jimconner | 0:3745349c0c83 | 41 | frequency(800000); |
jimconner | 0:3745349c0c83 | 42 | start(); |
jimconner | 0:3745349c0c83 | 43 | wait(0.1); // needed so that the displays initialise properly at power-on. |
jimconner | 0:3745349c0c83 | 44 | }; |
jimconner | 0:3745349c0c83 | 45 | }; |
jimconner | 0:3745349c0c83 | 46 | |
jimconner | 0:3745349c0c83 | 47 | //SPIPreInit gSpi(p5,NC,p7); |
jimconner | 0:3745349c0c83 | 48 | //Adafruit_SSD1306_Spi gOled1(gSpi,p26,p25,p24); |
jimconner | 0:3745349c0c83 | 49 | |
jimconner | 0:3745349c0c83 | 50 | I2CPreInit gI2C(PTE0,PTE1); |
jimconner | 1:c09b25119427 | 51 | //mux_SSD1306_I2c gOled1(gI2C,Reset_Pin,muxport, muxmask, 0, 0x78,64); |
jimconner | 1:c09b25119427 | 52 | |
jimconner | 1:c09b25119427 | 53 | mux_SSD1306_I2c gOled1(gI2C,PTD1,MuxPortOut, 0, 0x78,64); |
jimconner | 1:c09b25119427 | 54 | mux_SSD1306_I2c gOled2(gI2C,PTD1,MuxPortOut, 0, 0x7A,64); |
jimconner | 1:c09b25119427 | 55 | mux_SSD1306_I2c gOled3(gI2C,PTD1,MuxPortOut, 1, 0x78,64); |
jimconner | 1:c09b25119427 | 56 | //mux_SSD1306_I2c gOled4(gI2C,PTD1,MuxPortOut, 1, 0x7A,64); |
jimconner | 1:c09b25119427 | 57 | mux_SSD1306_I2c gOled5(gI2C,PTD1,MuxPortOut, 2, 0x78,64); |
jimconner | 1:c09b25119427 | 58 | mux_SSD1306_I2c gOled6(gI2C,PTD1,MuxPortOut, 2, 0x7A,64); |
jimconner | 1:c09b25119427 | 59 | //mux_SSD1306_I2c gOled7(gI2C,PTD1,MuxPortOut, 3, 0x78,64); |
jimconner | 1:c09b25119427 | 60 | mux_SSD1306_I2c gOled8(gI2C,PTD1,MuxPortOut, 3, 0x7A,64); |
jimconner | 1:c09b25119427 | 61 | mux_SSD1306_I2c gOled9(gI2C,PTD1,MuxPortOut, 4, 0x78,64); |
jimconner | 1:c09b25119427 | 62 | |
jimconner | 1:c09b25119427 | 63 | |
jimconner | 1:c09b25119427 | 64 | |
jimconner | 0:3745349c0c83 | 65 | |
jimconner | 0:3745349c0c83 | 66 | void testdrawline() { |
jimconner | 0:3745349c0c83 | 67 | for (int16_t i=0; i<gOled1.width(); i+=4) { |
jimconner | 0:3745349c0c83 | 68 | gOled1.drawLine(0, 0, i, gOled1.height()-1, WHITE); |
jimconner | 0:3745349c0c83 | 69 | gOled1.display(); |
jimconner | 0:3745349c0c83 | 70 | } |
jimconner | 0:3745349c0c83 | 71 | for (int16_t i=0; i<gOled2.height(); i+=4) { |
jimconner | 0:3745349c0c83 | 72 | gOled2.drawLine(0, 0, gOled2.width()-1, i, WHITE); |
jimconner | 0:3745349c0c83 | 73 | gOled2.display(); |
jimconner | 0:3745349c0c83 | 74 | } |
jimconner | 0:3745349c0c83 | 75 | for (int16_t i=0; i<gOled3.height(); i+=4) { |
jimconner | 0:3745349c0c83 | 76 | gOled3.drawLine(0, 0, gOled3.width()-1, i, WHITE); |
jimconner | 0:3745349c0c83 | 77 | gOled3.display(); |
jimconner | 0:3745349c0c83 | 78 | } |
jimconner | 1:c09b25119427 | 79 | // for (int16_t i=0; i<gOled4.width(); i+=4) { |
jimconner | 1:c09b25119427 | 80 | // gOled4.drawLine(0, 0, i, gOled4.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 81 | // gOled4.display(); |
jimconner | 1:c09b25119427 | 82 | // } |
jimconner | 1:c09b25119427 | 83 | for (int16_t i=0; i<gOled5.width(); i+=4) { |
jimconner | 1:c09b25119427 | 84 | gOled5.drawLine(0, 0, i, gOled5.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 85 | gOled5.display(); |
jimconner | 1:c09b25119427 | 86 | } |
jimconner | 1:c09b25119427 | 87 | for (int16_t i=0; i<gOled6.width(); i+=4) { |
jimconner | 1:c09b25119427 | 88 | gOled6.drawLine(0, 0, i, gOled6.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 89 | gOled6.display(); |
jimconner | 1:c09b25119427 | 90 | } |
jimconner | 1:c09b25119427 | 91 | // for (int16_t i=0; i<gOled7.width(); i+=4) { |
jimconner | 1:c09b25119427 | 92 | // gOled7.drawLine(0, 0, i, gOled7.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 93 | // gOled7.display(); |
jimconner | 1:c09b25119427 | 94 | // } |
jimconner | 1:c09b25119427 | 95 | for (int16_t i=0; i<gOled8.width(); i+=4) { |
jimconner | 1:c09b25119427 | 96 | gOled8.drawLine(0, 0, i, gOled8.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 97 | gOled8.display(); |
jimconner | 1:c09b25119427 | 98 | } |
jimconner | 1:c09b25119427 | 99 | for (int16_t i=0; i<gOled9.width(); i+=4) { |
jimconner | 1:c09b25119427 | 100 | gOled9.drawLine(0, 0, i, gOled9.height()-1, WHITE); |
jimconner | 1:c09b25119427 | 101 | gOled9.display(); |
jimconner | 0:3745349c0c83 | 102 | } |
jimconner | 0:3745349c0c83 | 103 | |
jimconner | 0:3745349c0c83 | 104 | } |
jimconner | 0:3745349c0c83 | 105 | |
jimconner | 0:3745349c0c83 | 106 | |
jimconner | 0:3745349c0c83 | 107 | |
jimconner | 0:3745349c0c83 | 108 | int main() |
jimconner | 0:3745349c0c83 | 109 | { uint16_t x=0; |
jimconner | 0:3745349c0c83 | 110 | uint16_t y=65535; |
jimconner | 0:3745349c0c83 | 111 | uint16_t a=16348; |
jimconner | 0:3745349c0c83 | 112 | uint16_t b=49152; |
jimconner | 0:3745349c0c83 | 113 | led1=1; |
jimconner | 0:3745349c0c83 | 114 | led2=1; |
jimconner | 0:3745349c0c83 | 115 | |
jimconner | 0:3745349c0c83 | 116 | |
jimconner | 0:3745349c0c83 | 117 | gOled1.clearDisplay(); |
jimconner | 0:3745349c0c83 | 118 | gOled2.clearDisplay(); |
jimconner | 0:3745349c0c83 | 119 | gOled3.clearDisplay(); |
jimconner | 1:c09b25119427 | 120 | // gOled4.clearDisplay(); |
jimconner | 1:c09b25119427 | 121 | gOled5.clearDisplay(); |
jimconner | 1:c09b25119427 | 122 | gOled6.clearDisplay(); |
jimconner | 1:c09b25119427 | 123 | // gOled7.clearDisplay(); |
jimconner | 1:c09b25119427 | 124 | gOled8.clearDisplay(); |
jimconner | 1:c09b25119427 | 125 | gOled9.clearDisplay(); |
jimconner | 0:3745349c0c83 | 126 | |
jimconner | 0:3745349c0c83 | 127 | testdrawline(); |
jimconner | 0:3745349c0c83 | 128 | |
jimconner | 0:3745349c0c83 | 129 | gOled1.clearDisplay(); |
jimconner | 0:3745349c0c83 | 130 | gOled2.clearDisplay(); |
jimconner | 0:3745349c0c83 | 131 | gOled3.clearDisplay(); |
jimconner | 1:c09b25119427 | 132 | // gOled4.clearDisplay(); |
jimconner | 1:c09b25119427 | 133 | gOled5.clearDisplay(); |
jimconner | 1:c09b25119427 | 134 | gOled6.clearDisplay(); |
jimconner | 1:c09b25119427 | 135 | // gOled7.clearDisplay(); |
jimconner | 1:c09b25119427 | 136 | gOled8.clearDisplay(); |
jimconner | 1:c09b25119427 | 137 | gOled9.clearDisplay(); |
jimconner | 0:3745349c0c83 | 138 | |
jimconner | 1:c09b25119427 | 139 | gOled1.printf(" Aqua Vega A \r\n\n\n\n", gOled1.width(), gOled1.height()); |
jimconner | 1:c09b25119427 | 140 | gOled2.printf(" Aqua Vega B \r\n\n\n\n", gOled2.width(), gOled2.height()); |
jimconner | 1:c09b25119427 | 141 | gOled3.printf(" Cannazyme \r\n\n\n\n", gOled3.width(), gOled3.height()); |
jimconner | 1:c09b25119427 | 142 | // gOled4.printf(" Rhizotonic \r\n\n\n\n", gOled4.width(), gOled4.height()); |
jimconner | 1:c09b25119427 | 143 | gOled5.printf(" Aqua Flores A \r\n\n\n\n", gOled5.width(), gOled5.height()); |
jimconner | 1:c09b25119427 | 144 | gOled6.printf(" Aqua Flores B \r\n\n\n\n", gOled6.width(), gOled6.height()); |
jimconner | 1:c09b25119427 | 145 | // gOled7.printf(" PK13/14 \r\n\n\n\n", gOled7.width(), gOled7.height()); |
jimconner | 1:c09b25119427 | 146 | gOled8.printf(" Cannaboost \r\n\n\n\n", gOled8.width(), gOled8.height()); |
jimconner | 1:c09b25119427 | 147 | gOled9.printf(" pH-Down \r\n\n\n\n", gOled9.width(), gOled9.height()); |
jimconner | 0:3745349c0c83 | 148 | gOled1.setTextSize(2); |
jimconner | 0:3745349c0c83 | 149 | gOled2.setTextSize(2); |
jimconner | 0:3745349c0c83 | 150 | gOled3.setTextSize(2); |
jimconner | 1:c09b25119427 | 151 | gOled5.setTextSize(2); |
jimconner | 1:c09b25119427 | 152 | gOled6.setTextSize(2); |
jimconner | 1:c09b25119427 | 153 | gOled8.setTextSize(2); |
jimconner | 1:c09b25119427 | 154 | gOled9.setTextSize(2); |
jimconner | 0:3745349c0c83 | 155 | |
jimconner | 0:3745349c0c83 | 156 | |
jimconner | 0:3745349c0c83 | 157 | while(1) |
jimconner | 0:3745349c0c83 | 158 | { |
jimconner | 0:3745349c0c83 | 159 | led1 = 0.98; |
jimconner | 0:3745349c0c83 | 160 | gOled1.printf(" %uml\r",x); |
jimconner | 0:3745349c0c83 | 161 | gOled1.display(); |
jimconner | 1:c09b25119427 | 162 | gOled6.printf(" %uml\r",x); |
jimconner | 1:c09b25119427 | 163 | gOled6.display(); |
jimconner | 1:c09b25119427 | 164 | |
jimconner | 0:3745349c0c83 | 165 | led1 = 1; |
jimconner | 0:3745349c0c83 | 166 | led2 = 0.98; |
jimconner | 0:3745349c0c83 | 167 | gOled2.printf(" %uml\r",y); |
jimconner | 0:3745349c0c83 | 168 | gOled2.display(); |
jimconner | 1:c09b25119427 | 169 | // gOled7.printf(" %uml\r",y); |
jimconner | 1:c09b25119427 | 170 | // gOled7.display(); |
jimconner | 1:c09b25119427 | 171 | gOled3.printf(" %uml\r",a); |
jimconner | 0:3745349c0c83 | 172 | gOled3.display(); |
jimconner | 1:c09b25119427 | 173 | gOled8.printf(" %uml\r",a); |
jimconner | 1:c09b25119427 | 174 | gOled8.display(); |
jimconner | 1:c09b25119427 | 175 | gOled5.printf(" %uml\r",b); |
jimconner | 1:c09b25119427 | 176 | gOled5.display(); |
jimconner | 1:c09b25119427 | 177 | gOled9.printf(" %uml\r",b); |
jimconner | 1:c09b25119427 | 178 | gOled9.display(); |
jimconner | 0:3745349c0c83 | 179 | led2 = 1; |
jimconner | 0:3745349c0c83 | 180 | x++; |
jimconner | 0:3745349c0c83 | 181 | y--; |
jimconner | 0:3745349c0c83 | 182 | a++; |
jimconner | 0:3745349c0c83 | 183 | b--; |
jimconner | 0:3745349c0c83 | 184 | //wait(0.1); |
jimconner | 0:3745349c0c83 | 185 | } |
jimconner | 0:3745349c0c83 | 186 | } |