Robot Arm Controller Library

Dependents:   PR_RobotArm lighthouse_2

Committer:
jah128
Date:
Thu Feb 16 23:57:45 2017 +0000
Revision:
0:9f7b70e0186e
First commit

Who changed what in which revision?

UserRevisionLine numberNew 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 */