TCS3200 color sensor

Dependencies:   TCS3200 mbed

Fork of my_example_TCS3200 by liang brain

Committer:
zhangyx
Date:
Wed Mar 21 05:01:18 2018 +0000
Revision:
1:1550b3529045
example with LCD

Who changed what in which revision?

UserRevisionLine numberNew contents of line
zhangyx 1:1550b3529045 1 /* mbed TextLCD Library, for a 4-bit LCD based on HD44780
zhangyx 1:1550b3529045 2 * Copyright (c) 2007-2010, sford, http://mbed.org
zhangyx 1:1550b3529045 3 *
zhangyx 1:1550b3529045 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
zhangyx 1:1550b3529045 5 * of this software and associated documentation files (the "Software"), to deal
zhangyx 1:1550b3529045 6 * in the Software without restriction, including without limitation the rights
zhangyx 1:1550b3529045 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
zhangyx 1:1550b3529045 8 * copies of the Software, and to permit persons to whom the Software is
zhangyx 1:1550b3529045 9 * furnished to do so, subject to the following conditions:
zhangyx 1:1550b3529045 10 *
zhangyx 1:1550b3529045 11 * The above copyright notice and this permission notice shall be included in
zhangyx 1:1550b3529045 12 * all copies or substantial portions of the Software.
zhangyx 1:1550b3529045 13 *
zhangyx 1:1550b3529045 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
zhangyx 1:1550b3529045 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
zhangyx 1:1550b3529045 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
zhangyx 1:1550b3529045 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
zhangyx 1:1550b3529045 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
zhangyx 1:1550b3529045 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
zhangyx 1:1550b3529045 20 * THE SOFTWARE.
zhangyx 1:1550b3529045 21 */
zhangyx 1:1550b3529045 22
zhangyx 1:1550b3529045 23 #include "TextLCD.h"
zhangyx 1:1550b3529045 24 #include "mbed.h"
zhangyx 1:1550b3529045 25
zhangyx 1:1550b3529045 26 TextLCD::TextLCD(PinName rs, PinName e, PinName d4, PinName d5,
zhangyx 1:1550b3529045 27 PinName d6, PinName d7, LCDType type) : _rs(rs),
zhangyx 1:1550b3529045 28 _e(e,1), _d(d4, d5, d6, d7),
zhangyx 1:1550b3529045 29 _type(type) {
zhangyx 1:1550b3529045 30
zhangyx 1:1550b3529045 31 _e = 1;
zhangyx 1:1550b3529045 32 _rs = 0; // command mode
zhangyx 1:1550b3529045 33
zhangyx 1:1550b3529045 34 wait(0.015); // Wait 15ms to ensure powered up
zhangyx 1:1550b3529045 35
zhangyx 1:1550b3529045 36 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
zhangyx 1:1550b3529045 37 for (int i=0; i<3; i++) {
zhangyx 1:1550b3529045 38 writeByte(0x3);
zhangyx 1:1550b3529045 39 wait(0.00164); // this command takes 1.64ms, so wait for it
zhangyx 1:1550b3529045 40 }
zhangyx 1:1550b3529045 41 writeByte(0x2); // 4-bit mode
zhangyx 1:1550b3529045 42 wait(0.00164); // 1.64ms
zhangyx 1:1550b3529045 43
zhangyx 1:1550b3529045 44 writeCommand(0x28); // Function set 001 BW N F - -
zhangyx 1:1550b3529045 45 writeCommand(0x0C);
zhangyx 1:1550b3529045 46 writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
zhangyx 1:1550b3529045 47 cls();
zhangyx 1:1550b3529045 48
zhangyx 1:1550b3529045 49 }
zhangyx 1:1550b3529045 50
zhangyx 1:1550b3529045 51 void TextLCD::character(int column, int row, int c) {
zhangyx 1:1550b3529045 52 int a = address(column, row);
zhangyx 1:1550b3529045 53 writeCommand(a);
zhangyx 1:1550b3529045 54 writeData(c);
zhangyx 1:1550b3529045 55 }
zhangyx 1:1550b3529045 56
zhangyx 1:1550b3529045 57 void TextLCD::cls() {
zhangyx 1:1550b3529045 58 writeCommand(0x01); // cls, and set cursor to 0
zhangyx 1:1550b3529045 59 wait(0.00164f); // This command takes 1.64 ms
zhangyx 1:1550b3529045 60 locate(0, 0);
zhangyx 1:1550b3529045 61 }
zhangyx 1:1550b3529045 62
zhangyx 1:1550b3529045 63 void TextLCD::locate(int column, int row) {
zhangyx 1:1550b3529045 64 _column = column;
zhangyx 1:1550b3529045 65 _row = row;
zhangyx 1:1550b3529045 66 }
zhangyx 1:1550b3529045 67
zhangyx 1:1550b3529045 68 int TextLCD::_putc(int value) {
zhangyx 1:1550b3529045 69 if (value == '\n') {
zhangyx 1:1550b3529045 70 _column = 0;
zhangyx 1:1550b3529045 71 _row++;
zhangyx 1:1550b3529045 72 if (_row >= rows()) {
zhangyx 1:1550b3529045 73 _row = 0;
zhangyx 1:1550b3529045 74 }
zhangyx 1:1550b3529045 75 } else {
zhangyx 1:1550b3529045 76 character(_column, _row, value);
zhangyx 1:1550b3529045 77 _column++;
zhangyx 1:1550b3529045 78 if (_column >= columns()) {
zhangyx 1:1550b3529045 79 _column = 0;
zhangyx 1:1550b3529045 80 _row++;
zhangyx 1:1550b3529045 81 if (_row >= rows()) {
zhangyx 1:1550b3529045 82 _row = 0;
zhangyx 1:1550b3529045 83 }
zhangyx 1:1550b3529045 84 }
zhangyx 1:1550b3529045 85 }
zhangyx 1:1550b3529045 86 return value;
zhangyx 1:1550b3529045 87 }
zhangyx 1:1550b3529045 88
zhangyx 1:1550b3529045 89 int TextLCD::_getc() {
zhangyx 1:1550b3529045 90 return -1;
zhangyx 1:1550b3529045 91 }
zhangyx 1:1550b3529045 92
zhangyx 1:1550b3529045 93 void TextLCD::writeByte(int value) {
zhangyx 1:1550b3529045 94 _d = value >> 4;
zhangyx 1:1550b3529045 95 wait(0.000040f); // most instructions take 40us
zhangyx 1:1550b3529045 96 _e = 0;
zhangyx 1:1550b3529045 97 wait(0.000040f);
zhangyx 1:1550b3529045 98 _e = 1;
zhangyx 1:1550b3529045 99 _d = value >> 0;
zhangyx 1:1550b3529045 100 wait(0.000040f);
zhangyx 1:1550b3529045 101 _e = 0;
zhangyx 1:1550b3529045 102 wait(0.000040f); // most instructions take 40us
zhangyx 1:1550b3529045 103 _e = 1;
zhangyx 1:1550b3529045 104 }
zhangyx 1:1550b3529045 105
zhangyx 1:1550b3529045 106 void TextLCD::writeCommand(int command) {
zhangyx 1:1550b3529045 107 _rs = 0;
zhangyx 1:1550b3529045 108 writeByte(command);
zhangyx 1:1550b3529045 109 }
zhangyx 1:1550b3529045 110
zhangyx 1:1550b3529045 111 void TextLCD::writeData(int data) {
zhangyx 1:1550b3529045 112 _rs = 1;
zhangyx 1:1550b3529045 113 writeByte(data);
zhangyx 1:1550b3529045 114 }
zhangyx 1:1550b3529045 115
zhangyx 1:1550b3529045 116 int TextLCD::address(int column, int row) {
zhangyx 1:1550b3529045 117 switch (_type) {
zhangyx 1:1550b3529045 118 case LCD20x4:
zhangyx 1:1550b3529045 119 switch (row) {
zhangyx 1:1550b3529045 120 case 0:
zhangyx 1:1550b3529045 121 return 0x80 + column;
zhangyx 1:1550b3529045 122 case 1:
zhangyx 1:1550b3529045 123 return 0xc0 + column;
zhangyx 1:1550b3529045 124 case 2:
zhangyx 1:1550b3529045 125 return 0x94 + column;
zhangyx 1:1550b3529045 126 case 3:
zhangyx 1:1550b3529045 127 return 0xd4 + column;
zhangyx 1:1550b3529045 128 }
zhangyx 1:1550b3529045 129 case LCD16x2B:
zhangyx 1:1550b3529045 130 return 0x80 + (row * 40) + column;
zhangyx 1:1550b3529045 131 case LCD16x2:
zhangyx 1:1550b3529045 132 case LCD20x2:
zhangyx 1:1550b3529045 133 default:
zhangyx 1:1550b3529045 134 return 0x80 + (row * 0x40) + column;
zhangyx 1:1550b3529045 135 }
zhangyx 1:1550b3529045 136 }
zhangyx 1:1550b3529045 137
zhangyx 1:1550b3529045 138 int TextLCD::columns() {
zhangyx 1:1550b3529045 139 switch (_type) {
zhangyx 1:1550b3529045 140 case LCD20x4:
zhangyx 1:1550b3529045 141 case LCD20x2:
zhangyx 1:1550b3529045 142 return 20;
zhangyx 1:1550b3529045 143 case LCD16x2:
zhangyx 1:1550b3529045 144 case LCD16x2B:
zhangyx 1:1550b3529045 145 default:
zhangyx 1:1550b3529045 146 return 16;
zhangyx 1:1550b3529045 147 }
zhangyx 1:1550b3529045 148 }
zhangyx 1:1550b3529045 149
zhangyx 1:1550b3529045 150 int TextLCD::rows() {
zhangyx 1:1550b3529045 151 switch (_type) {
zhangyx 1:1550b3529045 152 case LCD20x4:
zhangyx 1:1550b3529045 153 return 4;
zhangyx 1:1550b3529045 154 case LCD16x2:
zhangyx 1:1550b3529045 155 case LCD16x2B:
zhangyx 1:1550b3529045 156 case LCD20x2:
zhangyx 1:1550b3529045 157 default:
zhangyx 1:1550b3529045 158 return 2;
zhangyx 1:1550b3529045 159 }
zhangyx 1:1550b3529045 160 }