Library for Matrix Orbital VFD2041 display. Also useable for LCD2041 modules.
VFD.cpp@3:b96f8fff00e8, 2012-03-10 (annotated)
- Committer:
- wsalis01
- Date:
- Sat Mar 10 22:18:27 2012 +0000
- Revision:
- 3:b96f8fff00e8
- Parent:
- 2:b170a67a8dae
- Child:
- 4:f17ce5ab5d01
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wsalis01 | 0:f0e9065504cd | 1 | #include "mbed.h" |
wsalis01 | 0:f0e9065504cd | 2 | #include <string> |
wsalis01 | 0:f0e9065504cd | 3 | #include "VFD.h" |
wsalis01 | 0:f0e9065504cd | 4 | |
wsalis01 | 2:b170a67a8dae | 5 | /** VFD::VFD() Constructor |
wsalis01 | 2:b170a67a8dae | 6 | * Initizlizes the I2C Bus |
wsalis01 | 2:b170a67a8dae | 7 | */ |
wsalis01 | 0:f0e9065504cd | 8 | VFD::VFD() : _i2c(SDA, SCL) { |
wsalis01 | 0:f0e9065504cd | 9 | //Nothing to see here |
wsalis01 | 0:f0e9065504cd | 10 | } |
wsalis01 | 0:f0e9065504cd | 11 | |
wsalis01 | 3:b96f8fff00e8 | 12 | VFD::VFD(PinName data, PinName clock) : _i2c(data, clock) { |
wsalis01 | 3:b96f8fff00e8 | 13 | //Nothing to see here |
wsalis01 | 3:b96f8fff00e8 | 14 | } |
wsalis01 | 3:b96f8fff00e8 | 15 | |
wsalis01 | 0:f0e9065504cd | 16 | VFD::~VFD() { |
wsalis01 | 0:f0e9065504cd | 17 | //Nothing to see here |
wsalis01 | 0:f0e9065504cd | 18 | } |
wsalis01 | 0:f0e9065504cd | 19 | |
wsalis01 | 2:b170a67a8dae | 20 | /** VFD2041 initialization function |
wsalis01 | 2:b170a67a8dae | 21 | * @returns I2C write() return value |
wsalis01 | 2:b170a67a8dae | 22 | */ |
wsalis01 | 0:f0e9065504cd | 23 | int VFD::init() { |
wsalis01 | 0:f0e9065504cd | 24 | const char cmd[] = {254,160,0}; |
wsalis01 | 0:f0e9065504cd | 25 | int length = 3; |
wsalis01 | 0:f0e9065504cd | 26 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 27 | } |
wsalis01 | 0:f0e9065504cd | 28 | |
wsalis01 | 2:b170a67a8dae | 29 | /** Prints a string to the VFD |
wsalis01 | 2:b170a67a8dae | 30 | * @param msg is a string to be printed to the display |
wsalis01 | 2:b170a67a8dae | 31 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 32 | */ |
wsalis01 | 1:770ec826c555 | 33 | int VFD::print(string msg) { |
wsalis01 | 2:b170a67a8dae | 34 | return write(msg.data(), msg.size()); |
wsalis01 | 0:f0e9065504cd | 35 | } |
wsalis01 | 0:f0e9065504cd | 36 | |
wsalis01 | 2:b170a67a8dae | 37 | /** Turns on display autoscroll |
wsalis01 | 2:b170a67a8dae | 38 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 39 | */ |
wsalis01 | 0:f0e9065504cd | 40 | int VFD::autoScrollOn() { |
wsalis01 | 0:f0e9065504cd | 41 | const char cmd[] = {254, 81}; |
wsalis01 | 0:f0e9065504cd | 42 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 43 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 44 | } |
wsalis01 | 0:f0e9065504cd | 45 | |
wsalis01 | 2:b170a67a8dae | 46 | /** Turns off diaplay autoscroll |
wsalis01 | 2:b170a67a8dae | 47 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 48 | */ |
wsalis01 | 0:f0e9065504cd | 49 | int VFD::autoScrollOff() { |
wsalis01 | 0:f0e9065504cd | 50 | const char cmd[] = {254, 82}; |
wsalis01 | 0:f0e9065504cd | 51 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 52 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 53 | } |
wsalis01 | 0:f0e9065504cd | 54 | |
wsalis01 | 2:b170a67a8dae | 55 | /** Turns on display linewrap |
wsalis01 | 2:b170a67a8dae | 56 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 57 | */ |
wsalis01 | 0:f0e9065504cd | 58 | int VFD::lineWrapOn() { |
wsalis01 | 0:f0e9065504cd | 59 | const char cmd[] = {254, 67}; |
wsalis01 | 0:f0e9065504cd | 60 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 61 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 62 | } |
wsalis01 | 0:f0e9065504cd | 63 | |
wsalis01 | 2:b170a67a8dae | 64 | /** Turns off display linewrap |
wsalis01 | 2:b170a67a8dae | 65 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 66 | */ |
wsalis01 | 0:f0e9065504cd | 67 | int VFD::lineWrapOff() { |
wsalis01 | 0:f0e9065504cd | 68 | const char cmd[] = {254, 68}; |
wsalis01 | 0:f0e9065504cd | 69 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 70 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 71 | } |
wsalis01 | 0:f0e9065504cd | 72 | |
wsalis01 | 2:b170a67a8dae | 73 | /** Sets the cursor position on the display |
wsalis01 | 2:b170a67a8dae | 74 | * @param col is the column to set the cursor |
wsalis01 | 2:b170a67a8dae | 75 | * @param row is the row to set the cursor |
wsalis01 | 2:b170a67a8dae | 76 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 77 | */ |
wsalis01 | 0:f0e9065504cd | 78 | int VFD::setCursor(const int col, const int row) { |
wsalis01 | 0:f0e9065504cd | 79 | const char cmd[] = {254, 71, col, row}; |
wsalis01 | 0:f0e9065504cd | 80 | int length = 4; |
wsalis01 | 0:f0e9065504cd | 81 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 82 | } |
wsalis01 | 0:f0e9065504cd | 83 | |
wsalis01 | 2:b170a67a8dae | 84 | /** Clears the entire contents of the display |
wsalis01 | 2:b170a67a8dae | 85 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 86 | */ |
wsalis01 | 0:f0e9065504cd | 87 | int VFD::clearScreen() { |
wsalis01 | 0:f0e9065504cd | 88 | const char cmd[] = {254, 88}; |
wsalis01 | 0:f0e9065504cd | 89 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 90 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 91 | } |
wsalis01 | 0:f0e9065504cd | 92 | |
wsalis01 | 2:b170a67a8dae | 93 | /** Sets the cursor position to col 0, row 0 ( top left position ) |
wsalis01 | 2:b170a67a8dae | 94 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 95 | */ |
wsalis01 | 0:f0e9065504cd | 96 | int VFD::goHome() { |
wsalis01 | 0:f0e9065504cd | 97 | const char cmd[] = {254, 72}; |
wsalis01 | 0:f0e9065504cd | 98 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 99 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 100 | } |
wsalis01 | 0:f0e9065504cd | 101 | |
wsalis01 | 2:b170a67a8dae | 102 | /** Initialize memory for the display of large numbers ( 4 rows high ) |
wsalis01 | 2:b170a67a8dae | 103 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 104 | */ |
wsalis01 | 0:f0e9065504cd | 105 | int VFD::initLargeNumbers() { |
wsalis01 | 0:f0e9065504cd | 106 | const char cmd[] = {254, 110}; |
wsalis01 | 0:f0e9065504cd | 107 | int length = 2; |
wsalis01 | 0:f0e9065504cd | 108 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 109 | } |
wsalis01 | 0:f0e9065504cd | 110 | |
wsalis01 | 2:b170a67a8dae | 111 | /** Sets the brightness of the display |
wsalis01 | 2:b170a67a8dae | 112 | * @param val determines the brightness as follows: 0 -> 100%, 1 -> 75%, 2 -> 50%, 3 -> 25%. |
wsalis01 | 2:b170a67a8dae | 113 | * @returns I2c write() return value |
wsalis01 | 2:b170a67a8dae | 114 | */ |
wsalis01 | 0:f0e9065504cd | 115 | int VFD::setBrightness(const int val) { |
wsalis01 | 0:f0e9065504cd | 116 | if (val < 0 || val > 3) |
wsalis01 | 0:f0e9065504cd | 117 | return -1; |
wsalis01 | 0:f0e9065504cd | 118 | const char cmd[] = {254, 89, val}; |
wsalis01 | 0:f0e9065504cd | 119 | int length = 3; |
wsalis01 | 0:f0e9065504cd | 120 | return write(cmd, length); |
wsalis01 | 0:f0e9065504cd | 121 | } |
wsalis01 | 0:f0e9065504cd | 122 | |
wsalis01 | 2:b170a67a8dae | 123 | |
wsalis01 | 2:b170a67a8dae | 124 | /** VFD::write |
wsalis01 | 2:b170a67a8dae | 125 | * @param data is a non-null terminated array of characters to write to the display |
wsalis01 | 2:b170a67a8dae | 126 | * @param length is the number of characters in the data array |
wsalis01 | 2:b170a67a8dae | 127 | * @returns I2C write return value |
wsalis01 | 2:b170a67a8dae | 128 | */ |
wsalis01 | 0:f0e9065504cd | 129 | int VFD::write(const char * data, int length) { |
wsalis01 | 3:b96f8fff00e8 | 130 | int ret = _i2c.write(ADDRESS, data, length); //Performs a complete write transaction |
wsalis01 | 0:f0e9065504cd | 131 | wait_us(625); |
wsalis01 | 0:f0e9065504cd | 132 | return ret; //Return I2C.write(...) return value |
wsalis01 | 0:f0e9065504cd | 133 | } |
wsalis01 | 0:f0e9065504cd | 134 | |
wsalis01 | 2:b170a67a8dae | 135 | /** VFD::read |
wsalis01 | 2:b170a67a8dae | 136 | * @param data is a pointer to a char array to copy read data into |
wsalis01 | 2:b170a67a8dae | 137 | * @param length is the number of characters to copy into the data array |
wsalis01 | 2:b170a67a8dae | 138 | * @returns I2C read return value |
wsalis01 | 2:b170a67a8dae | 139 | */ |
wsalis01 | 0:f0e9065504cd | 140 | int VFD::read(char * data, int length) { |
wsalis01 | 3:b96f8fff00e8 | 141 | int ret = _i2c.read(ADDRESS, data, length); //Performs a complete write transaction |
wsalis01 | 0:f0e9065504cd | 142 | wait_us(625); |
wsalis01 | 0:f0e9065504cd | 143 | return ret; //Return I2C.write(...) return value |
wsalis01 | 0:f0e9065504cd | 144 | } |