HR and RR measurement

Dependencies:   mbed

Committer:
nizarpang
Date:
Mon Jun 12 04:10:51 2017 +0000
Revision:
1:16fb5b4d1024
Parent:
0:99c4524cab70
HR and RR measurement

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nizarpang 0:99c4524cab70 1 /*
nizarpang 0:99c4524cab70 2 * LCD module "SB1602E" library
nizarpang 0:99c4524cab70 3 *
nizarpang 0:99c4524cab70 4 * SB1602E is an I2C based low voltage text LCD panel (based Sitronix ST7032 chip)
nizarpang 0:99c4524cab70 5 * The module by StrawberryLinux
nizarpang 0:99c4524cab70 6 * http://strawberry-linux.com/catalog/items?code=27002 (Online shop page (Japanese))
nizarpang 0:99c4524cab70 7 * http://strawberry-linux.com/pub/ST7032i.pdf (datasheet of the chip)
nizarpang 0:99c4524cab70 8 *
nizarpang 0:99c4524cab70 9 * This is a library to operate this module easy.
nizarpang 0:99c4524cab70 10 *
nizarpang 0:99c4524cab70 11 * Copyright (c) 2010 Tedd OKANO
nizarpang 0:99c4524cab70 12 * Released under the MIT License: http://mbed.org/license/mit
nizarpang 0:99c4524cab70 13 *
nizarpang 0:99c4524cab70 14 * revision 1.0 22-Jan-2010 a. 1st release
nizarpang 0:99c4524cab70 15 * revision 1.1 23-Jan-2010 a. class name has been changed from lcd_SB1602E to TextLCD_SB1602E
nizarpang 0:99c4524cab70 16 * b. printf() added
nizarpang 0:99c4524cab70 17 * c. copyright notice added
nizarpang 0:99c4524cab70 18 */
nizarpang 0:99c4524cab70 19
nizarpang 0:99c4524cab70 20 #ifndef MBED_TextLCD_SB1602E
nizarpang 0:99c4524cab70 21 #define MBED_TextLCD_SB1602E
nizarpang 0:99c4524cab70 22
nizarpang 0:99c4524cab70 23 #include <stdarg.h>
nizarpang 0:99c4524cab70 24 #include "mbed.h"
nizarpang 0:99c4524cab70 25 #include "I2cBusDevice.h"
nizarpang 0:99c4524cab70 26
nizarpang 0:99c4524cab70 27 // SB1602E IIC address
nizarpang 0:99c4524cab70 28
nizarpang 0:99c4524cab70 29 const char SB1602E_addr = 0x7C;
nizarpang 0:99c4524cab70 30
nizarpang 0:99c4524cab70 31 // SB1602E initialization command sequence
nizarpang 0:99c4524cab70 32
nizarpang 0:99c4524cab70 33 #ifdef INIT_VALUE_DATASHEET_ORIGINAL
nizarpang 0:99c4524cab70 34
nizarpang 0:99c4524cab70 35 const char Comm_FunctionSet_Normal = 0x38;
nizarpang 0:99c4524cab70 36 const char Comm_FunctionSet_Extended = 0x39;
nizarpang 0:99c4524cab70 37 const char Comm_InternalOscFrequency = 0x14;
nizarpang 0:99c4524cab70 38 const char Comm_ContrastSet = 0x78;
nizarpang 0:99c4524cab70 39 const char Comm_PwrIconContrast = 0x5E;
nizarpang 0:99c4524cab70 40 const char Comm_FollowerCtrl = 0x6A;
nizarpang 0:99c4524cab70 41 const char Comm_DisplayOnOff = 0x0C;
nizarpang 0:99c4524cab70 42 const char Comm_ClearDisplay = 0x01;
nizarpang 0:99c4524cab70 43 const char Comm_EntryModeSet = 0x06;
nizarpang 0:99c4524cab70 44
nizarpang 0:99c4524cab70 45 #else
nizarpang 0:99c4524cab70 46
nizarpang 0:99c4524cab70 47 const char Comm_FunctionSet_Normal = 0x38;
nizarpang 0:99c4524cab70 48 const char Comm_FunctionSet_Extended = 0x39;
nizarpang 0:99c4524cab70 49 const char Comm_InternalOscFrequency = 0x14;
nizarpang 0:99c4524cab70 50 const char Comm_ContrastSet = 0x70;
nizarpang 0:99c4524cab70 51 const char Comm_PwrIconContrast = 0x5C;
nizarpang 0:99c4524cab70 52 const char Comm_FollowerCtrl = 0x60;
nizarpang 0:99c4524cab70 53 const char Comm_DisplayOnOff = 0x0C;
nizarpang 0:99c4524cab70 54 const char Comm_ClearDisplay = 0x01;
nizarpang 0:99c4524cab70 55 const char Comm_EntryModeSet = 0x04;
nizarpang 0:99c4524cab70 56 const char Comm_ReturnHome = 0x02;
nizarpang 0:99c4524cab70 57
nizarpang 0:99c4524cab70 58 #endif
nizarpang 0:99c4524cab70 59
nizarpang 0:99c4524cab70 60 // SB1602E general commands
nizarpang 0:99c4524cab70 61
nizarpang 0:99c4524cab70 62 const char Comm_SetDDRAMAddress = 0x80;
nizarpang 0:99c4524cab70 63 const char DDRAMAddress_Ofst[] = { 0x00, 0x40 };
nizarpang 0:99c4524cab70 64
nizarpang 0:99c4524cab70 65 const char Comm_SetCGRAM = 0x40;
nizarpang 0:99c4524cab70 66
nizarpang 0:99c4524cab70 67 // SB1602E setting values
nizarpang 0:99c4524cab70 68
nizarpang 0:99c4524cab70 69 const char default_Contrast = 0x35;
nizarpang 0:99c4524cab70 70
nizarpang 0:99c4524cab70 71 const char COMMAND = 0x00;
nizarpang 0:99c4524cab70 72 const char DATA = 0x40;
nizarpang 0:99c4524cab70 73
nizarpang 0:99c4524cab70 74 const char MaxCharsInALine = 0x10; // buffer deoth for one line (no scroll function used)
nizarpang 0:99c4524cab70 75
nizarpang 0:99c4524cab70 76 const char init_seq0_length = 7;
nizarpang 0:99c4524cab70 77 const char init_seq0[ init_seq0_length ]
nizarpang 0:99c4524cab70 78 = {
nizarpang 0:99c4524cab70 79 Comm_FunctionSet_Normal,
nizarpang 0:99c4524cab70 80 Comm_ReturnHome, // This may be required to reset the scroll function
nizarpang 0:99c4524cab70 81 Comm_FunctionSet_Extended,
nizarpang 0:99c4524cab70 82 Comm_InternalOscFrequency,
nizarpang 0:99c4524cab70 83 Comm_ContrastSet | ( default_Contrast & 0xF),
nizarpang 0:99c4524cab70 84 Comm_PwrIconContrast | ((default_Contrast >> 4) & 0x3),
nizarpang 0:99c4524cab70 85 Comm_FollowerCtrl | 0x0A,
nizarpang 0:99c4524cab70 86
nizarpang 0:99c4524cab70 87 };
nizarpang 0:99c4524cab70 88 // required 30us interval
nizarpang 0:99c4524cab70 89
nizarpang 0:99c4524cab70 90 const char init_seq1_length = 3;
nizarpang 0:99c4524cab70 91 const char init_seq1[ init_seq1_length ]
nizarpang 0:99c4524cab70 92 = {
nizarpang 0:99c4524cab70 93 Comm_DisplayOnOff,
nizarpang 0:99c4524cab70 94 Comm_ClearDisplay,
nizarpang 0:99c4524cab70 95 Comm_EntryModeSet,
nizarpang 0:99c4524cab70 96 };
nizarpang 0:99c4524cab70 97 // required 30us, 2ms interval
nizarpang 0:99c4524cab70 98
nizarpang 0:99c4524cab70 99
nizarpang 0:99c4524cab70 100 class TextLCD_SB1602E : I2cBusDevice {
nizarpang 0:99c4524cab70 101 public:
nizarpang 0:99c4524cab70 102
nizarpang 0:99c4524cab70 103 explicit TextLCD_SB1602E( I2C *i2c, char dev_address = SB1602E_addr, char *init_massage = NULL ) : I2cBusDevice( i2c, dev_address ) {
nizarpang 0:99c4524cab70 104 wait( 0.04 ); // interval after hardware reset
nizarpang 0:99c4524cab70 105
nizarpang 0:99c4524cab70 106 for ( int i = 0; i < init_seq0_length; i++ ) {
nizarpang 0:99c4524cab70 107 lcd_command( init_seq0[ i ] );
nizarpang 0:99c4524cab70 108 wait( 30e-6 );
nizarpang 0:99c4524cab70 109 }
nizarpang 0:99c4524cab70 110
nizarpang 0:99c4524cab70 111 wait( 0.2 );
nizarpang 0:99c4524cab70 112
nizarpang 0:99c4524cab70 113 for ( int i = 0; i < init_seq1_length; i++ ) {
nizarpang 0:99c4524cab70 114 lcd_command( init_seq1[ i ] );
nizarpang 0:99c4524cab70 115 wait( 2e-3 );
nizarpang 0:99c4524cab70 116 }
nizarpang 0:99c4524cab70 117
nizarpang 0:99c4524cab70 118 if ( init_massage )
nizarpang 0:99c4524cab70 119 puts( 0, init_massage );
nizarpang 0:99c4524cab70 120
nizarpang 0:99c4524cab70 121 set_CGRAM( 7, '\x1F' );
nizarpang 0:99c4524cab70 122
nizarpang 0:99c4524cab70 123 curs[ 0 ] = 0;
nizarpang 0:99c4524cab70 124 curs[ 1 ] = 0;
nizarpang 0:99c4524cab70 125 }
nizarpang 0:99c4524cab70 126
nizarpang 0:99c4524cab70 127
nizarpang 0:99c4524cab70 128 ~TextLCD_SB1602E() {
nizarpang 0:99c4524cab70 129 }
nizarpang 0:99c4524cab70 130
nizarpang 0:99c4524cab70 131 void clear( void ) {
nizarpang 0:99c4524cab70 132 lcd_command( Comm_ClearDisplay );
nizarpang 0:99c4524cab70 133 wait( 2e-3 );
nizarpang 0:99c4524cab70 134 curs[ 0 ] = 0;
nizarpang 0:99c4524cab70 135 curs[ 1 ] = 0;
nizarpang 0:99c4524cab70 136 }
nizarpang 0:99c4524cab70 137
nizarpang 0:99c4524cab70 138
nizarpang 0:99c4524cab70 139 void put_custom_char( char c_code, const char *cg, char x, char y ) {
nizarpang 0:99c4524cab70 140 for ( int i = 0; i < 5; i++ ) {
nizarpang 0:99c4524cab70 141 set_CGRAM( c_code, cg );
nizarpang 0:99c4524cab70 142 putcxy( c_code, x, y );
nizarpang 0:99c4524cab70 143 }
nizarpang 0:99c4524cab70 144 }
nizarpang 0:99c4524cab70 145
nizarpang 0:99c4524cab70 146 void contrast( char contrast ) {
nizarpang 0:99c4524cab70 147 lcd_command( Comm_FunctionSet_Extended );
nizarpang 0:99c4524cab70 148 lcd_command( Comm_ContrastSet | (contrast & 0x0f) );
nizarpang 0:99c4524cab70 149 lcd_command( Comm_PwrIconContrast | ((contrast>>4) & 0x03) );
nizarpang 0:99c4524cab70 150 lcd_command( Comm_FunctionSet_Normal );
nizarpang 0:99c4524cab70 151 }
nizarpang 0:99c4524cab70 152
nizarpang 0:99c4524cab70 153 void set_CGRAM( char char_code, const char* cg ) {
nizarpang 0:99c4524cab70 154 for ( int i = 0; i < 8; i++ ) {
nizarpang 0:99c4524cab70 155 lcd_command( (Comm_SetCGRAM | (char_code << 3) | i) );
nizarpang 0:99c4524cab70 156 lcd_data( *cg++ );
nizarpang 0:99c4524cab70 157 }
nizarpang 0:99c4524cab70 158 }
nizarpang 0:99c4524cab70 159
nizarpang 0:99c4524cab70 160 void set_CGRAM( char char_code, char v ) {
nizarpang 0:99c4524cab70 161 char c[ 8 ];
nizarpang 0:99c4524cab70 162
nizarpang 0:99c4524cab70 163 for ( int i = 0; i < 8; i++ )
nizarpang 0:99c4524cab70 164 c[ i ] = v;
nizarpang 0:99c4524cab70 165
nizarpang 0:99c4524cab70 166 set_CGRAM( char_code, c );
nizarpang 0:99c4524cab70 167 }
nizarpang 0:99c4524cab70 168
nizarpang 0:99c4524cab70 169 void putcxy( char c, char x, char y ) {
nizarpang 0:99c4524cab70 170 if ( (x >= MaxCharsInALine) || (y >= 2) )
nizarpang 0:99c4524cab70 171 return;
nizarpang 0:99c4524cab70 172
nizarpang 0:99c4524cab70 173 lcd_command( (Comm_SetDDRAMAddress | DDRAMAddress_Ofst[ y ]) + x );
nizarpang 0:99c4524cab70 174 lcd_data( c );
nizarpang 0:99c4524cab70 175 }
nizarpang 0:99c4524cab70 176
nizarpang 0:99c4524cab70 177 void putc( char line, char c ) {
nizarpang 0:99c4524cab70 178 if ( (c == '\n') || (c == '\r') ) {
nizarpang 0:99c4524cab70 179 clear_lest_of_line( line );
nizarpang 0:99c4524cab70 180 curs[ line ] = 0;
nizarpang 0:99c4524cab70 181 return;
nizarpang 0:99c4524cab70 182 }
nizarpang 0:99c4524cab70 183
nizarpang 0:99c4524cab70 184 putcxy( c, curs[ line ]++, line );
nizarpang 0:99c4524cab70 185 }
nizarpang 0:99c4524cab70 186
nizarpang 0:99c4524cab70 187 void puts( char line, char *s ) {
nizarpang 0:99c4524cab70 188 while ( char c = *s++ )
nizarpang 0:99c4524cab70 189 putc( line, c );
nizarpang 0:99c4524cab70 190 }
nizarpang 0:99c4524cab70 191
nizarpang 0:99c4524cab70 192 void printf( char line, char *format, ... ) {
nizarpang 0:99c4524cab70 193 char s[ 32 ];
nizarpang 0:99c4524cab70 194 va_list args;
nizarpang 0:99c4524cab70 195
nizarpang 0:99c4524cab70 196 va_start( args, format );
nizarpang 0:99c4524cab70 197 vsnprintf( s, 32, format, args );
nizarpang 0:99c4524cab70 198 va_end( args );
nizarpang 0:99c4524cab70 199
nizarpang 0:99c4524cab70 200 puts( line, s );
nizarpang 0:99c4524cab70 201 }
nizarpang 0:99c4524cab70 202
nizarpang 0:99c4524cab70 203 private:
nizarpang 0:99c4524cab70 204 char curs[2];
nizarpang 0:99c4524cab70 205
nizarpang 0:99c4524cab70 206 void clear_lest_of_line( char line ) {
nizarpang 0:99c4524cab70 207 for ( int i = curs[ line ]; i < MaxCharsInALine; i++ )
nizarpang 0:99c4524cab70 208 putcxy( ' ', i, line );
nizarpang 0:99c4524cab70 209 }
nizarpang 0:99c4524cab70 210
nizarpang 0:99c4524cab70 211 int lcd_write( char first, char second ) {
nizarpang 0:99c4524cab70 212 char cmd[2];
nizarpang 0:99c4524cab70 213
nizarpang 0:99c4524cab70 214 cmd[ 0 ] = first;
nizarpang 0:99c4524cab70 215 cmd[ 1 ] = second;
nizarpang 0:99c4524cab70 216
nizarpang 0:99c4524cab70 217 return ( write( cmd, 2 ) );
nizarpang 0:99c4524cab70 218
nizarpang 0:99c4524cab70 219 }
nizarpang 0:99c4524cab70 220
nizarpang 0:99c4524cab70 221 int lcd_command( char command ) {
nizarpang 0:99c4524cab70 222 return ( lcd_write( COMMAND, command ) );
nizarpang 0:99c4524cab70 223 }
nizarpang 0:99c4524cab70 224
nizarpang 0:99c4524cab70 225 int lcd_data( char data ) {
nizarpang 0:99c4524cab70 226 return ( lcd_write( DATA, data ) );
nizarpang 0:99c4524cab70 227 }
nizarpang 0:99c4524cab70 228 }
nizarpang 0:99c4524cab70 229 ;
nizarpang 0:99c4524cab70 230
nizarpang 0:99c4524cab70 231 #endif
nizarpang 0:99c4524cab70 232
nizarpang 0:99c4524cab70 233
nizarpang 0:99c4524cab70 234
nizarpang 0:99c4524cab70 235
nizarpang 0:99c4524cab70 236
nizarpang 0:99c4524cab70 237
nizarpang 0:99c4524cab70 238
nizarpang 0:99c4524cab70 239
nizarpang 0:99c4524cab70 240