Robot Arm Controller Library
Dependents: PR_RobotArm lighthouse_2
display.cpp@0:9f7b70e0186e, 2017-02-16 (annotated)
- Committer:
- jah128
- Date:
- Thu Feb 16 23:57:45 2017 +0000
- Revision:
- 0:9f7b70e0186e
First commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jah128 | 0:9f7b70e0186e | 1 | /* University of York Robotics Laboratory Robot Arm Controller Board |
jah128 | 0:9f7b70e0186e | 2 | * |
jah128 | 0:9f7b70e0186e | 3 | * File: display.cpp |
jah128 | 0:9f7b70e0186e | 4 | * |
jah128 | 0:9f7b70e0186e | 5 | * |
jah128 | 0:9f7b70e0186e | 6 | * James Hilder, Alan Millard, Shuhei Miyashita, Homero Elizondo, Jon Timmis |
jah128 | 0:9f7b70e0186e | 7 | * |
jah128 | 0:9f7b70e0186e | 8 | * |
jah128 | 0:9f7b70e0186e | 9 | * February 2017 |
jah128 | 0:9f7b70e0186e | 10 | * |
jah128 | 0:9f7b70e0186e | 11 | * Driver for the Midas 16x2 I2C LCD Display (MCCOG21605x6W) LCD |
jah128 | 0:9f7b70e0186e | 12 | * [Farnell part 2218942 or 2063206] |
jah128 | 0:9f7b70e0186e | 13 | * |
jah128 | 0:9f7b70e0186e | 14 | */ |
jah128 | 0:9f7b70e0186e | 15 | |
jah128 | 0:9f7b70e0186e | 16 | #include "robotarm.h" |
jah128 | 0:9f7b70e0186e | 17 | |
jah128 | 0:9f7b70e0186e | 18 | |
jah128 | 0:9f7b70e0186e | 19 | Timeout init_timeout; |
jah128 | 0:9f7b70e0186e | 20 | |
jah128 | 0:9f7b70e0186e | 21 | |
jah128 | 0:9f7b70e0186e | 22 | Display::Display(PinName sda, PinName scl) : Stream("display"), _i2c(sda,scl) |
jah128 | 0:9f7b70e0186e | 23 | { |
jah128 | 0:9f7b70e0186e | 24 | } |
jah128 | 0:9f7b70e0186e | 25 | |
jah128 | 0:9f7b70e0186e | 26 | Display::Display() : Stream("display"), _i2c(p28,p27) |
jah128 | 0:9f7b70e0186e | 27 | { |
jah128 | 0:9f7b70e0186e | 28 | } |
jah128 | 0:9f7b70e0186e | 29 | |
jah128 | 0:9f7b70e0186e | 30 | int Display::i2c_message(char byte) |
jah128 | 0:9f7b70e0186e | 31 | { |
jah128 | 0:9f7b70e0186e | 32 | char bytes [2]; |
jah128 | 0:9f7b70e0186e | 33 | bytes[0]=0x80; |
jah128 | 0:9f7b70e0186e | 34 | bytes[1]=byte; |
jah128 | 0:9f7b70e0186e | 35 | int ret=_i2c.write(LCD_ADDRESS,bytes,2); |
jah128 | 0:9f7b70e0186e | 36 | wait(0.01); |
jah128 | 0:9f7b70e0186e | 37 | return ret; |
jah128 | 0:9f7b70e0186e | 38 | } |
jah128 | 0:9f7b70e0186e | 39 | |
jah128 | 0:9f7b70e0186e | 40 | int Display::disp_putc(int c) |
jah128 | 0:9f7b70e0186e | 41 | { |
jah128 | 0:9f7b70e0186e | 42 | char message [2]; |
jah128 | 0:9f7b70e0186e | 43 | message[0]=0x40; |
jah128 | 0:9f7b70e0186e | 44 | message[1]=c; |
jah128 | 0:9f7b70e0186e | 45 | _i2c.write(LCD_ADDRESS,message,2); |
jah128 | 0:9f7b70e0186e | 46 | wait(0.01); |
jah128 | 0:9f7b70e0186e | 47 | return c; |
jah128 | 0:9f7b70e0186e | 48 | } |
jah128 | 0:9f7b70e0186e | 49 | |
jah128 | 0:9f7b70e0186e | 50 | void Display::init() |
jah128 | 0:9f7b70e0186e | 51 | { |
jah128 | 0:9f7b70e0186e | 52 | //Set initial states: display on, cursor off |
jah128 | 0:9f7b70e0186e | 53 | display_on = 1; |
jah128 | 0:9f7b70e0186e | 54 | cursor_on = 0; |
jah128 | 0:9f7b70e0186e | 55 | blink_on = 0; |
jah128 | 0:9f7b70e0186e | 56 | |
jah128 | 0:9f7b70e0186e | 57 | i2c_message(0x38); |
jah128 | 0:9f7b70e0186e | 58 | i2c_message(0x39); |
jah128 | 0:9f7b70e0186e | 59 | i2c_message(0x14); |
jah128 | 0:9f7b70e0186e | 60 | i2c_message(0x74); |
jah128 | 0:9f7b70e0186e | 61 | i2c_message(0x54); |
jah128 | 0:9f7b70e0186e | 62 | i2c_message(0x6F); |
jah128 | 0:9f7b70e0186e | 63 | _set_display(); |
jah128 | 0:9f7b70e0186e | 64 | clear_display(); |
jah128 | 0:9f7b70e0186e | 65 | wait(0.05); |
jah128 | 0:9f7b70e0186e | 66 | clear_display(); |
jah128 | 0:9f7b70e0186e | 67 | set_position(0,0); |
jah128 | 0:9f7b70e0186e | 68 | write_string(" YORK ROBOTICS"); |
jah128 | 0:9f7b70e0186e | 69 | set_position(1,0); |
jah128 | 0:9f7b70e0186e | 70 | write_string(" LABORATORY"); |
jah128 | 0:9f7b70e0186e | 71 | init_timeout.attach(this,&Display::post_init,0.3); |
jah128 | 0:9f7b70e0186e | 72 | wait(0.62); |
jah128 | 0:9f7b70e0186e | 73 | } |
jah128 | 0:9f7b70e0186e | 74 | |
jah128 | 0:9f7b70e0186e | 75 | void Display::post_init() |
jah128 | 0:9f7b70e0186e | 76 | { |
jah128 | 0:9f7b70e0186e | 77 | clear_display(); |
jah128 | 0:9f7b70e0186e | 78 | home(); |
jah128 | 0:9f7b70e0186e | 79 | write_string("ROBOTIC ARM"); |
jah128 | 0:9f7b70e0186e | 80 | set_position(1,0); |
jah128 | 0:9f7b70e0186e | 81 | char line [17]; |
jah128 | 0:9f7b70e0186e | 82 | sprintf(line,"VERSION %1.2f", SOFTWARE_VERSION_CODE ); |
jah128 | 0:9f7b70e0186e | 83 | set_position(1,0); |
jah128 | 0:9f7b70e0186e | 84 | write_string(line); |
jah128 | 0:9f7b70e0186e | 85 | init_timeout.attach(this,&Display::post_post_init,0.3); |
jah128 | 0:9f7b70e0186e | 86 | } |
jah128 | 0:9f7b70e0186e | 87 | |
jah128 | 0:9f7b70e0186e | 88 | void Display::post_post_init() |
jah128 | 0:9f7b70e0186e | 89 | { |
jah128 | 0:9f7b70e0186e | 90 | clear_display(); |
jah128 | 0:9f7b70e0186e | 91 | home(); |
jah128 | 0:9f7b70e0186e | 92 | } |
jah128 | 0:9f7b70e0186e | 93 | |
jah128 | 0:9f7b70e0186e | 94 | void Display::write_string(char * message) |
jah128 | 0:9f7b70e0186e | 95 | { |
jah128 | 0:9f7b70e0186e | 96 | size_t length = strlen(message); |
jah128 | 0:9f7b70e0186e | 97 | if (length > 16) length = 16; |
jah128 | 0:9f7b70e0186e | 98 | char to_send [length+1]; |
jah128 | 0:9f7b70e0186e | 99 | to_send[0]=0x40; |
jah128 | 0:9f7b70e0186e | 100 | for(int i=0; i<length; i++) { |
jah128 | 0:9f7b70e0186e | 101 | to_send[i+1] = message[i]; |
jah128 | 0:9f7b70e0186e | 102 | } |
jah128 | 0:9f7b70e0186e | 103 | _i2c.write(LCD_ADDRESS,to_send,length+1); |
jah128 | 0:9f7b70e0186e | 104 | |
jah128 | 0:9f7b70e0186e | 105 | } |
jah128 | 0:9f7b70e0186e | 106 | |
jah128 | 0:9f7b70e0186e | 107 | |
jah128 | 0:9f7b70e0186e | 108 | void Display::write_string(char * message, char length) |
jah128 | 0:9f7b70e0186e | 109 | { |
jah128 | 0:9f7b70e0186e | 110 | char to_send [length+1]; |
jah128 | 0:9f7b70e0186e | 111 | to_send[0]=0x40; |
jah128 | 0:9f7b70e0186e | 112 | for(int i=0; i<length; i++) { |
jah128 | 0:9f7b70e0186e | 113 | to_send[i+1] = message[i]; |
jah128 | 0:9f7b70e0186e | 114 | } |
jah128 | 0:9f7b70e0186e | 115 | _i2c.write(LCD_ADDRESS,to_send,length+1); |
jah128 | 0:9f7b70e0186e | 116 | |
jah128 | 0:9f7b70e0186e | 117 | } |
jah128 | 0:9f7b70e0186e | 118 | |
jah128 | 0:9f7b70e0186e | 119 | void Display::set_position(char row, char column) |
jah128 | 0:9f7b70e0186e | 120 | { |
jah128 | 0:9f7b70e0186e | 121 | if(row < 2 && column < 16) { |
jah128 | 0:9f7b70e0186e | 122 | char pos = 128 +((row * 64)+column); |
jah128 | 0:9f7b70e0186e | 123 | i2c_message(pos); |
jah128 | 0:9f7b70e0186e | 124 | } |
jah128 | 0:9f7b70e0186e | 125 | } |
jah128 | 0:9f7b70e0186e | 126 | |
jah128 | 0:9f7b70e0186e | 127 | void Display::set_cursor(char enable) |
jah128 | 0:9f7b70e0186e | 128 | { |
jah128 | 0:9f7b70e0186e | 129 | cursor_on=enable; |
jah128 | 0:9f7b70e0186e | 130 | _set_display(); |
jah128 | 0:9f7b70e0186e | 131 | } |
jah128 | 0:9f7b70e0186e | 132 | |
jah128 | 0:9f7b70e0186e | 133 | void Display::set_blink(char enable) |
jah128 | 0:9f7b70e0186e | 134 | { |
jah128 | 0:9f7b70e0186e | 135 | blink_on=enable; |
jah128 | 0:9f7b70e0186e | 136 | _set_display(); |
jah128 | 0:9f7b70e0186e | 137 | } |
jah128 | 0:9f7b70e0186e | 138 | |
jah128 | 0:9f7b70e0186e | 139 | void Display::set_display(char enable) |
jah128 | 0:9f7b70e0186e | 140 | { |
jah128 | 0:9f7b70e0186e | 141 | display_on=enable; |
jah128 | 0:9f7b70e0186e | 142 | _set_display(); |
jah128 | 0:9f7b70e0186e | 143 | } |
jah128 | 0:9f7b70e0186e | 144 | |
jah128 | 0:9f7b70e0186e | 145 | |
jah128 | 0:9f7b70e0186e | 146 | void Display::clear_display() |
jah128 | 0:9f7b70e0186e | 147 | { |
jah128 | 0:9f7b70e0186e | 148 | i2c_message(0x01); |
jah128 | 0:9f7b70e0186e | 149 | } |
jah128 | 0:9f7b70e0186e | 150 | |
jah128 | 0:9f7b70e0186e | 151 | void Display::home() |
jah128 | 0:9f7b70e0186e | 152 | { |
jah128 | 0:9f7b70e0186e | 153 | i2c_message(0x02); |
jah128 | 0:9f7b70e0186e | 154 | } |
jah128 | 0:9f7b70e0186e | 155 | |
jah128 | 0:9f7b70e0186e | 156 | |
jah128 | 0:9f7b70e0186e | 157 | void Display::_set_display() |
jah128 | 0:9f7b70e0186e | 158 | { |
jah128 | 0:9f7b70e0186e | 159 | char mode = 8; |
jah128 | 0:9f7b70e0186e | 160 | if(display_on>0) mode += 4; |
jah128 | 0:9f7b70e0186e | 161 | if(cursor_on>0) mode += 2; |
jah128 | 0:9f7b70e0186e | 162 | if(blink_on>0) mode ++; |
jah128 | 0:9f7b70e0186e | 163 | i2c_message(mode); |
jah128 | 0:9f7b70e0186e | 164 | } |
jah128 | 0:9f7b70e0186e | 165 | |
jah128 | 0:9f7b70e0186e | 166 | |
jah128 | 0:9f7b70e0186e | 167 | int Display::_putc (int c) |
jah128 | 0:9f7b70e0186e | 168 | { |
jah128 | 0:9f7b70e0186e | 169 | putc(c); |
jah128 | 0:9f7b70e0186e | 170 | return(c); |
jah128 | 0:9f7b70e0186e | 171 | } |
jah128 | 0:9f7b70e0186e | 172 | |
jah128 | 0:9f7b70e0186e | 173 | int Display::_getc (void) |
jah128 | 0:9f7b70e0186e | 174 | { |
jah128 | 0:9f7b70e0186e | 175 | char r = 0; |
jah128 | 0:9f7b70e0186e | 176 | return(r); |
jah128 | 0:9f7b70e0186e | 177 | } |
jah128 | 0:9f7b70e0186e | 178 | |
jah128 | 0:9f7b70e0186e | 179 | /* |
jah128 | 0:9f7b70e0186e | 180 | * Copyright 2017 University of York |
jah128 | 0:9f7b70e0186e | 181 | * |
jah128 | 0:9f7b70e0186e | 182 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. |
jah128 | 0:9f7b70e0186e | 183 | * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 |
jah128 | 0:9f7b70e0186e | 184 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS |
jah128 | 0:9f7b70e0186e | 185 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
jah128 | 0:9f7b70e0186e | 186 | * See the License for the specific language governing permissions and limitations under the License. |
jah128 | 0:9f7b70e0186e | 187 | */ |