NOT FINISHED YET!!! My first try to get a self built fully working Quadrocopter based on an mbed, a self built frame and some other more or less cheap parts.

Dependencies:   mbed MODI2C

Committer:
maetugr
Date:
Fri Feb 14 14:17:32 2014 +0000
Revision:
40:2ca410923691
Parent:
0:0c4fafa398b4
now with MPU6050 before taking it too FlyBed2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maetugr 0:0c4fafa398b4 1 /* mbed LCD Library, for a 4-bit LCD based on HD44780
maetugr 0:0c4fafa398b4 2 * Copyright (c) 2007-2010, hb9gaa
maetugr 0:0c4fafa398b4 3 *
maetugr 0:0c4fafa398b4 4 */
maetugr 0:0c4fafa398b4 5
maetugr 0:0c4fafa398b4 6 #include "LCD.h"
maetugr 0:0c4fafa398b4 7 #include "mbed.h"
maetugr 0:0c4fafa398b4 8
maetugr 0:0c4fafa398b4 9 TextLCD::TextLCD(PinName rs, PinName rw, PinName e, PinName d0, PinName d1,
maetugr 0:0c4fafa398b4 10 PinName d2, PinName d3, LCDType type) : _rs(rs), _rw(rw),
maetugr 0:0c4fafa398b4 11 _e(e), _d(d0, d1, d2, d3),
maetugr 0:0c4fafa398b4 12 _type(type) {
maetugr 0:0c4fafa398b4 13
maetugr 0:0c4fafa398b4 14 _e = 1;
maetugr 0:0c4fafa398b4 15 _rw = 0;
maetugr 0:0c4fafa398b4 16 _rs = 0; // command mode
maetugr 0:0c4fafa398b4 17
maetugr 0:0c4fafa398b4 18 wait(0.015); // Wait 15ms to ensure powered up
maetugr 0:0c4fafa398b4 19
maetugr 0:0c4fafa398b4 20 // send "Display Settings" 3 times (Only top nibble of 0x30 as we've got 4-bit bus)
maetugr 0:0c4fafa398b4 21 for (int i=0; i<3; i++) {
maetugr 0:0c4fafa398b4 22 writeByte(0x3);
maetugr 0:0c4fafa398b4 23 wait(0.00164); // this command takes 1.64ms, so wait for it
maetugr 0:0c4fafa398b4 24 }
maetugr 0:0c4fafa398b4 25 writeByte(0x2); // 4-bit mode
maetugr 0:0c4fafa398b4 26 wait(0.0001f); // most instructions take 100us
maetugr 0:0c4fafa398b4 27
maetugr 0:0c4fafa398b4 28 writeCommand(0x28); // Function set 001 BW N F - -
maetugr 0:0c4fafa398b4 29 writeCommand(0x0C);
maetugr 0:0c4fafa398b4 30 writeCommand(0x6); // Cursor Direction and Display Shift : 0000 01 CD S (CD 0-left, 1-right S(hift) 0-no, 1-yes
maetugr 0:0c4fafa398b4 31 cls();
maetugr 0:0c4fafa398b4 32 }
maetugr 0:0c4fafa398b4 33
maetugr 0:0c4fafa398b4 34 void TextLCD::character(int column, int row, int c) {
maetugr 0:0c4fafa398b4 35 int a = address(column, row);
maetugr 0:0c4fafa398b4 36 writeCommand(a);
maetugr 0:0c4fafa398b4 37 writeData(c);
maetugr 0:0c4fafa398b4 38 }
maetugr 0:0c4fafa398b4 39
maetugr 0:0c4fafa398b4 40 void TextLCD::cls() {
maetugr 0:0c4fafa398b4 41 writeCommand(0x01); // cls, and set cursor to 0
maetugr 0:0c4fafa398b4 42 wait(0.004100f); // This command takes 4.1 ms
maetugr 0:0c4fafa398b4 43 locate(0, 0);
maetugr 0:0c4fafa398b4 44 }
maetugr 0:0c4fafa398b4 45
maetugr 0:0c4fafa398b4 46 void TextLCD::locate(int row, int column) {
maetugr 0:0c4fafa398b4 47 _row = row;
maetugr 0:0c4fafa398b4 48 _column = column;
maetugr 0:0c4fafa398b4 49 }
maetugr 0:0c4fafa398b4 50
maetugr 0:0c4fafa398b4 51 int TextLCD::_putc(int value) {
maetugr 0:0c4fafa398b4 52 if (value == '\n') {
maetugr 0:0c4fafa398b4 53 _column = 0;
maetugr 0:0c4fafa398b4 54 _row++;
maetugr 0:0c4fafa398b4 55 if (_row >= rows()) {
maetugr 0:0c4fafa398b4 56 _row = 0;
maetugr 0:0c4fafa398b4 57 }
maetugr 0:0c4fafa398b4 58 } else {
maetugr 0:0c4fafa398b4 59 character(_column, _row, value);
maetugr 0:0c4fafa398b4 60 _column++;
maetugr 0:0c4fafa398b4 61 if (_column >= columns()) {
maetugr 0:0c4fafa398b4 62 _column = 0;
maetugr 0:0c4fafa398b4 63 _row++;
maetugr 0:0c4fafa398b4 64 if (_row >= rows()) {
maetugr 0:0c4fafa398b4 65 _row = 0;
maetugr 0:0c4fafa398b4 66 }
maetugr 0:0c4fafa398b4 67 }
maetugr 0:0c4fafa398b4 68 }
maetugr 0:0c4fafa398b4 69 return value;
maetugr 0:0c4fafa398b4 70 }
maetugr 0:0c4fafa398b4 71
maetugr 0:0c4fafa398b4 72 int TextLCD::_getc() {
maetugr 0:0c4fafa398b4 73 return -1;
maetugr 0:0c4fafa398b4 74 }
maetugr 0:0c4fafa398b4 75
maetugr 0:0c4fafa398b4 76 void TextLCD::writeByte(int value) {
maetugr 0:0c4fafa398b4 77 _d = value >> 4;
maetugr 0:0c4fafa398b4 78 wait(0.0001); // most instructions take 100us
maetugr 0:0c4fafa398b4 79 _e = 0;
maetugr 0:0c4fafa398b4 80 wait(0.0001);
maetugr 0:0c4fafa398b4 81 _e = 1;
maetugr 0:0c4fafa398b4 82 _d = value >> 0;
maetugr 0:0c4fafa398b4 83 wait(0.0001);
maetugr 0:0c4fafa398b4 84 _e = 0;
maetugr 0:0c4fafa398b4 85 wait(0.0001); // most instructions take 100us
maetugr 0:0c4fafa398b4 86 _e = 1;
maetugr 0:0c4fafa398b4 87 }
maetugr 0:0c4fafa398b4 88
maetugr 0:0c4fafa398b4 89 void TextLCD::writeCommand(int command) {
maetugr 0:0c4fafa398b4 90 _rs = 0;
maetugr 0:0c4fafa398b4 91 writeByte(command);
maetugr 0:0c4fafa398b4 92 }
maetugr 0:0c4fafa398b4 93
maetugr 0:0c4fafa398b4 94 void TextLCD::writeData(int data) {
maetugr 0:0c4fafa398b4 95 _rs = 1;
maetugr 0:0c4fafa398b4 96 writeByte(data);
maetugr 0:0c4fafa398b4 97 }
maetugr 0:0c4fafa398b4 98
maetugr 0:0c4fafa398b4 99 int TextLCD::address(int column, int row) {
maetugr 0:0c4fafa398b4 100 switch (_type) {
maetugr 0:0c4fafa398b4 101 case LCD20x4:
maetugr 0:0c4fafa398b4 102 switch (row) {
maetugr 0:0c4fafa398b4 103 case 0:
maetugr 0:0c4fafa398b4 104 return 0x80 + column;
maetugr 0:0c4fafa398b4 105 case 1:
maetugr 0:0c4fafa398b4 106 return 0xc0 + column;
maetugr 0:0c4fafa398b4 107 case 2:
maetugr 0:0c4fafa398b4 108 return 0x94 + column;
maetugr 0:0c4fafa398b4 109 case 3:
maetugr 0:0c4fafa398b4 110 return 0xd4 + column;
maetugr 0:0c4fafa398b4 111 }
maetugr 0:0c4fafa398b4 112 case LCD16x2B:
maetugr 0:0c4fafa398b4 113 return 0x80 + (row * 40) + column;
maetugr 0:0c4fafa398b4 114 case LCD16x2:
maetugr 0:0c4fafa398b4 115 case LCD20x2:
maetugr 0:0c4fafa398b4 116 default:
maetugr 0:0c4fafa398b4 117 return 0x80 + (row * 0x40) + column;
maetugr 0:0c4fafa398b4 118 }
maetugr 0:0c4fafa398b4 119 }
maetugr 0:0c4fafa398b4 120
maetugr 0:0c4fafa398b4 121 int TextLCD::columns() {
maetugr 0:0c4fafa398b4 122 switch (_type) {
maetugr 0:0c4fafa398b4 123 case LCD20x4:
maetugr 0:0c4fafa398b4 124 case LCD20x2:
maetugr 0:0c4fafa398b4 125 return 20;
maetugr 0:0c4fafa398b4 126 case LCD16x2:
maetugr 0:0c4fafa398b4 127 case LCD16x2B:
maetugr 0:0c4fafa398b4 128 default:
maetugr 0:0c4fafa398b4 129 return 16;
maetugr 0:0c4fafa398b4 130 }
maetugr 0:0c4fafa398b4 131 }
maetugr 0:0c4fafa398b4 132
maetugr 0:0c4fafa398b4 133 int TextLCD::rows() {
maetugr 0:0c4fafa398b4 134 switch (_type) {
maetugr 0:0c4fafa398b4 135 case LCD20x4:
maetugr 0:0c4fafa398b4 136 return 4;
maetugr 0:0c4fafa398b4 137 case LCD16x2:
maetugr 0:0c4fafa398b4 138 case LCD16x2B:
maetugr 0:0c4fafa398b4 139 case LCD20x2:
maetugr 0:0c4fafa398b4 140 default:
maetugr 0:0c4fafa398b4 141 return 2;
maetugr 0:0c4fafa398b4 142 }
maetugr 0:0c4fafa398b4 143 }