Programme complet de bâton de marche sauf capteur cardiaque

Dependencies:   mbed SimpleBLE X_NUCLEO_IDB0XA1 SDFileSystem MBed_Adafruit-GPS-Library Arduino USBDevice

Committer:
zmoutaou
Date:
Mon Jan 27 12:04:30 2020 +0000
Revision:
0:6e330c197193
BMC

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zmoutaou 0:6e330c197193 1 /*********************************************************************
zmoutaou 0:6e330c197193 2 This is a library for our Monochrome OLEDs based on SSD1306 drivers
zmoutaou 0:6e330c197193 3
zmoutaou 0:6e330c197193 4 Pick one up today in the adafruit shop!
zmoutaou 0:6e330c197193 5 ------> http://www.adafruit.com/category/63_98
zmoutaou 0:6e330c197193 6
zmoutaou 0:6e330c197193 7 These displays use SPI to communicate, 4 or 5 pins are required to
zmoutaou 0:6e330c197193 8 interface
zmoutaou 0:6e330c197193 9
zmoutaou 0:6e330c197193 10 Adafruit invests time and resources providing this open source code,
zmoutaou 0:6e330c197193 11 please support Adafruit and open-source hardware by purchasing
zmoutaou 0:6e330c197193 12 products from Adafruit!
zmoutaou 0:6e330c197193 13
zmoutaou 0:6e330c197193 14 Written by Limor Fried/Ladyada for Adafruit Industries.
zmoutaou 0:6e330c197193 15 BSD license, check license.txt for more information
zmoutaou 0:6e330c197193 16 All text above, and the splash screen must be included in any redistribution
zmoutaou 0:6e330c197193 17 *********************************************************************/
zmoutaou 0:6e330c197193 18
zmoutaou 0:6e330c197193 19 /*
zmoutaou 0:6e330c197193 20 * Modified by Neal Horman 7/14/2012 for use in mbed
zmoutaou 0:6e330c197193 21 */
zmoutaou 0:6e330c197193 22
zmoutaou 0:6e330c197193 23 #ifndef _ADAFRUIT_SSD1306_H_
zmoutaou 0:6e330c197193 24 #define _ADAFRUIT_SSD1306_H_
zmoutaou 0:6e330c197193 25
zmoutaou 0:6e330c197193 26 #include "mbed.h"
zmoutaou 0:6e330c197193 27 #include "Adafruit_GFX.h"
zmoutaou 0:6e330c197193 28
zmoutaou 0:6e330c197193 29 #include <vector>
zmoutaou 0:6e330c197193 30 #include <algorithm>
zmoutaou 0:6e330c197193 31
zmoutaou 0:6e330c197193 32 // A DigitalOut sub-class that provides a constructed default state
zmoutaou 0:6e330c197193 33 class DigitalOut2 : public DigitalOut
zmoutaou 0:6e330c197193 34 {
zmoutaou 0:6e330c197193 35 public:
zmoutaou 0:6e330c197193 36 DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); };
zmoutaou 0:6e330c197193 37 DigitalOut2& operator= (int value) { write(value); return *this; };
zmoutaou 0:6e330c197193 38 DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; };
zmoutaou 0:6e330c197193 39 operator int() { return read(); };
zmoutaou 0:6e330c197193 40 };
zmoutaou 0:6e330c197193 41
zmoutaou 0:6e330c197193 42 #define SSD1306_EXTERNALVCC 0x1
zmoutaou 0:6e330c197193 43 #define SSD1306_SWITCHCAPVCC 0x2
zmoutaou 0:6e330c197193 44
zmoutaou 0:6e330c197193 45 /** The pure base class for the SSD1306 display driver.
zmoutaou 0:6e330c197193 46 *
zmoutaou 0:6e330c197193 47 * You should derive from this for a new transport interface type,
zmoutaou 0:6e330c197193 48 * such as the SPI and I2C drivers.
zmoutaou 0:6e330c197193 49 */
zmoutaou 0:6e330c197193 50 class Adafruit_SSD1306 : public Adafruit_GFX
zmoutaou 0:6e330c197193 51 {
zmoutaou 0:6e330c197193 52 public:
zmoutaou 0:6e330c197193 53 Adafruit_SSD1306(PinName RST, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
zmoutaou 0:6e330c197193 54 : Adafruit_GFX(rawWidth,rawHeight)
zmoutaou 0:6e330c197193 55 , rst(RST,false)
zmoutaou 0:6e330c197193 56 {
zmoutaou 0:6e330c197193 57 buffer.resize(rawHeight * rawWidth / 8);
zmoutaou 0:6e330c197193 58 };
zmoutaou 0:6e330c197193 59
zmoutaou 0:6e330c197193 60 void begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC);
zmoutaou 0:6e330c197193 61
zmoutaou 0:6e330c197193 62 // These must be implemented in the derived transport driver
zmoutaou 0:6e330c197193 63 virtual void command(uint8_t c) = 0;
zmoutaou 0:6e330c197193 64 virtual void data(uint8_t c) = 0;
zmoutaou 0:6e330c197193 65 virtual void drawPixel(int16_t x, int16_t y, uint16_t color);
zmoutaou 0:6e330c197193 66
zmoutaou 0:6e330c197193 67 /// Clear the display buffer
zmoutaou 0:6e330c197193 68 void clearDisplay(void);
zmoutaou 0:6e330c197193 69 virtual void invertDisplay(bool i);
zmoutaou 0:6e330c197193 70
zmoutaou 0:6e330c197193 71 /// Cause the display to be updated with the buffer content.
zmoutaou 0:6e330c197193 72 void display();
zmoutaou 0:6e330c197193 73 /// Fill the buffer with the AdaFruit splash screen.
zmoutaou 0:6e330c197193 74 virtual void splash();
zmoutaou 0:6e330c197193 75
zmoutaou 0:6e330c197193 76 protected:
zmoutaou 0:6e330c197193 77 virtual void sendDisplayBuffer() = 0;
zmoutaou 0:6e330c197193 78 DigitalOut2 rst;
zmoutaou 0:6e330c197193 79
zmoutaou 0:6e330c197193 80 // the memory buffer for the LCD
zmoutaou 0:6e330c197193 81 std::vector<uint8_t> buffer;
zmoutaou 0:6e330c197193 82 };
zmoutaou 0:6e330c197193 83
zmoutaou 0:6e330c197193 84
zmoutaou 0:6e330c197193 85 /** This is the SPI SSD1306 display driver transport class
zmoutaou 0:6e330c197193 86 *
zmoutaou 0:6e330c197193 87 */
zmoutaou 0:6e330c197193 88 class Adafruit_SSD1306_Spi : public Adafruit_SSD1306
zmoutaou 0:6e330c197193 89 {
zmoutaou 0:6e330c197193 90 public:
zmoutaou 0:6e330c197193 91 /** Create a SSD1306 SPI transport display driver instance with the specified DC, RST, and CS pins, as well as the display dimentions
zmoutaou 0:6e330c197193 92 *
zmoutaou 0:6e330c197193 93 * Required parameters
zmoutaou 0:6e330c197193 94 * @param spi - a reference to an initialized SPI object
zmoutaou 0:6e330c197193 95 * @param DC (Data/Command) pin name
zmoutaou 0:6e330c197193 96 * @param RST (Reset) pin name
zmoutaou 0:6e330c197193 97 * @param CS (Chip Select) pin name
zmoutaou 0:6e330c197193 98 *
zmoutaou 0:6e330c197193 99 * Optional parameters
zmoutaou 0:6e330c197193 100 * @param rawHeight - the vertical number of pixels for the display, defaults to 32
zmoutaou 0:6e330c197193 101 * @param rawWidth - the horizonal number of pixels for the display, defaults to 128
zmoutaou 0:6e330c197193 102 */
zmoutaou 0:6e330c197193 103 Adafruit_SSD1306_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 32, uint8_t rawWidth = 128)
zmoutaou 0:6e330c197193 104 : Adafruit_SSD1306(RST, rawHieght, rawWidth)
zmoutaou 0:6e330c197193 105 , cs(CS,true)
zmoutaou 0:6e330c197193 106 , dc(DC,false)
zmoutaou 0:6e330c197193 107 , mspi(spi)
zmoutaou 0:6e330c197193 108 {
zmoutaou 0:6e330c197193 109 begin();
zmoutaou 0:6e330c197193 110 splash();
zmoutaou 0:6e330c197193 111 display();
zmoutaou 0:6e330c197193 112 };
zmoutaou 0:6e330c197193 113
zmoutaou 0:6e330c197193 114 virtual void command(uint8_t c)
zmoutaou 0:6e330c197193 115 {
zmoutaou 0:6e330c197193 116 cs = 1;
zmoutaou 0:6e330c197193 117 dc = 0;
zmoutaou 0:6e330c197193 118 cs = 0;
zmoutaou 0:6e330c197193 119 mspi.write(c);
zmoutaou 0:6e330c197193 120 cs = 1;
zmoutaou 0:6e330c197193 121 };
zmoutaou 0:6e330c197193 122
zmoutaou 0:6e330c197193 123 virtual void data(uint8_t c)
zmoutaou 0:6e330c197193 124 {
zmoutaou 0:6e330c197193 125 cs = 1;
zmoutaou 0:6e330c197193 126 dc = 1;
zmoutaou 0:6e330c197193 127 cs = 0;
zmoutaou 0:6e330c197193 128 mspi.write(c);
zmoutaou 0:6e330c197193 129 cs = 1;
zmoutaou 0:6e330c197193 130 };
zmoutaou 0:6e330c197193 131
zmoutaou 0:6e330c197193 132 protected:
zmoutaou 0:6e330c197193 133 virtual void sendDisplayBuffer()
zmoutaou 0:6e330c197193 134 {
zmoutaou 0:6e330c197193 135 cs = 1;
zmoutaou 0:6e330c197193 136 dc = 1;
zmoutaou 0:6e330c197193 137 cs = 0;
zmoutaou 0:6e330c197193 138
zmoutaou 0:6e330c197193 139 for(uint16_t i=0, q=buffer.size(); i<q; i++)
zmoutaou 0:6e330c197193 140 mspi.write(buffer[i]);
zmoutaou 0:6e330c197193 141
zmoutaou 0:6e330c197193 142 if(height() == 32)
zmoutaou 0:6e330c197193 143 {
zmoutaou 0:6e330c197193 144 for(uint16_t i=0, q=buffer.size(); i<q; i++)
zmoutaou 0:6e330c197193 145 mspi.write(0);
zmoutaou 0:6e330c197193 146 }
zmoutaou 0:6e330c197193 147
zmoutaou 0:6e330c197193 148 cs = 1;
zmoutaou 0:6e330c197193 149 };
zmoutaou 0:6e330c197193 150
zmoutaou 0:6e330c197193 151 DigitalOut2 cs, dc;
zmoutaou 0:6e330c197193 152 SPI &mspi;
zmoutaou 0:6e330c197193 153 };
zmoutaou 0:6e330c197193 154
zmoutaou 0:6e330c197193 155 /** This is the I2C SSD1306 display driver transport class
zmoutaou 0:6e330c197193 156 *
zmoutaou 0:6e330c197193 157 */
zmoutaou 0:6e330c197193 158 class Adafruit_SSD1306_I2c : public Adafruit_SSD1306
zmoutaou 0:6e330c197193 159 {
zmoutaou 0:6e330c197193 160 public:
zmoutaou 0:6e330c197193 161 #define SSD_I2C_ADDRESS 0x78
zmoutaou 0:6e330c197193 162 /** Create a SSD1306 I2C transport display driver instance with the specified RST pin name, the I2C address, as well as the display dimensions
zmoutaou 0:6e330c197193 163 *
zmoutaou 0:6e330c197193 164 * Required parameters
zmoutaou 0:6e330c197193 165 * @param i2c - A reference to an initialized I2C object
zmoutaou 0:6e330c197193 166 * @param RST - The Reset pin name
zmoutaou 0:6e330c197193 167 *
zmoutaou 0:6e330c197193 168 * Optional parameters
zmoutaou 0:6e330c197193 169 * @param i2cAddress - The i2c address of the display
zmoutaou 0:6e330c197193 170 * @param rawHeight - The vertical number of pixels for the display, defaults to 32
zmoutaou 0:6e330c197193 171 * @param rawWidth - The horizonal number of pixels for the display, defaults to 128
zmoutaou 0:6e330c197193 172 */
zmoutaou 0:6e330c197193 173 Adafruit_SSD1306_I2c(I2C &i2c, PinName RST, uint8_t i2cAddress = SSD_I2C_ADDRESS, uint8_t rawHeight = 32, uint8_t rawWidth = 128)
zmoutaou 0:6e330c197193 174 : Adafruit_SSD1306(RST, rawHeight, rawWidth)
zmoutaou 0:6e330c197193 175 , mi2c(i2c)
zmoutaou 0:6e330c197193 176 , mi2cAddress(i2cAddress)
zmoutaou 0:6e330c197193 177 {
zmoutaou 0:6e330c197193 178 begin();
zmoutaou 0:6e330c197193 179 splash();
zmoutaou 0:6e330c197193 180 display();
zmoutaou 0:6e330c197193 181 };
zmoutaou 0:6e330c197193 182
zmoutaou 0:6e330c197193 183 virtual void command(uint8_t c)
zmoutaou 0:6e330c197193 184 {
zmoutaou 0:6e330c197193 185 char buff[2];
zmoutaou 0:6e330c197193 186 buff[0] = 0; // Command Mode
zmoutaou 0:6e330c197193 187 buff[1] = c;
zmoutaou 0:6e330c197193 188 mi2c.write(mi2cAddress, buff, sizeof(buff));
zmoutaou 0:6e330c197193 189 }
zmoutaou 0:6e330c197193 190
zmoutaou 0:6e330c197193 191 virtual void data(uint8_t c)
zmoutaou 0:6e330c197193 192 {
zmoutaou 0:6e330c197193 193 char buff[2];
zmoutaou 0:6e330c197193 194 buff[0] = 0x40; // Data Mode
zmoutaou 0:6e330c197193 195 buff[1] = c;
zmoutaou 0:6e330c197193 196 mi2c.write(mi2cAddress, buff, sizeof(buff));
zmoutaou 0:6e330c197193 197 };
zmoutaou 0:6e330c197193 198
zmoutaou 0:6e330c197193 199 protected:
zmoutaou 0:6e330c197193 200 virtual void sendDisplayBuffer()
zmoutaou 0:6e330c197193 201 {
zmoutaou 0:6e330c197193 202 char buff[17];
zmoutaou 0:6e330c197193 203 buff[0] = 0x40; // Data Mode
zmoutaou 0:6e330c197193 204
zmoutaou 0:6e330c197193 205 // send display buffer in 16 byte chunks
zmoutaou 0:6e330c197193 206 for(uint16_t i=0, q=buffer.size(); i<q; i+=16 )
zmoutaou 0:6e330c197193 207 { uint8_t x ;
zmoutaou 0:6e330c197193 208
zmoutaou 0:6e330c197193 209 // TODO - this will segfault if buffer.size() % 16 != 0
zmoutaou 0:6e330c197193 210 for(x=1; x<sizeof(buff); x++)
zmoutaou 0:6e330c197193 211 buff[x] = buffer[i+x-1];
zmoutaou 0:6e330c197193 212 mi2c.write(mi2cAddress, buff, sizeof(buff));
zmoutaou 0:6e330c197193 213 }
zmoutaou 0:6e330c197193 214 };
zmoutaou 0:6e330c197193 215
zmoutaou 0:6e330c197193 216 I2C &mi2c;
zmoutaou 0:6e330c197193 217 uint8_t mi2cAddress;
zmoutaou 0:6e330c197193 218 };
zmoutaou 0:6e330c197193 219
zmoutaou 0:6e330c197193 220 #endif