For YRL Robot Arm

Dependents:   PR_RobotArm_Show_Positions

Fork of PR-RobotArmController by James Hilder

display.h

Committer:
jah128
Date:
2017-03-03
Revision:
1:aa92ba95a4bb
Parent:
0:b14dfd8816da

File content as of revision 1:aa92ba95a4bb:

/* University of York Robotics Laboratory Robot Arm Controller Board
 * 

 * File: display.cpp
 *
 * (C) Dept. Electronics & Computer Science, University of York
 * 
 * James Hilder, Alan Millard, Shuhei Miyashita, Homero Elizondo, Jon Timmis
 *
 *
 * January 2017
 *
 * Driver for the Midas 16x2 I2C LCD Display (MCCOG21605x6W) LCD
 * [Farnell part 2218942 or 2063206]
 *
 */ 


#ifndef DISPLAY_H
#define DISPLAY_H


/**
 * Display class
 * Functions for use with the Midas 16x2 I2C LCD Display (MCCOG21605x6W) LCD
 * Farnell part 2218942 or 2063206
 *
 * Example:
 * @code
 * #include "robotarm.h"
 *
 * Robotarm arm;
 *
 * int main() {
 *     arm.init();
 *     display.clear_display;       //Clears display
 *     display.set_position(0,2);   //Set cursor to row 0 column 2
 *     display.write_string("YORK ROBOTICS");
 *     display.set_position(1,3);   //Set cursor to row 1 column 3
 *     display.write_string("LABORATORY");
 * }
 * @endcode
*/
class Display : public Stream
{

// Public Functions

public:

    /** Create the LCD Display object connected to the default pins
     * (sda = p28, scl = p27)
     */
    Display();

    /** Create the LCD Display object connected to specific pins
     *
     * @param sda pin   - default is p28
     * @param scl pin   - default is p27
     */
    Display(PinName sda, PinName scl);

    /** Clear the display
    */
    void clear_display(void);

    /** Set cursor to home position
    */
    void home(void);

    /** Print string message
    * @param message - The null-terminated message to print
    */
    void write_string(char * message);

    /** Print string message of given length
    * @param message - The message to print
    * @param length - The number of characters to display
    */
    void write_string(char * message, char length);

    /** Set the row and column of cursor position
    * @param row - The row of the display to set the cursor to (either 0 or 1)
    * @param column - The column of the display to set the cursor to (range 0 to 15)
    */
    void set_position(char row, char column);

    /** Enable or disable cursor
    * @param enable - Set to 1 to enable the cursor visibility
    */
    void set_cursor(char enable);

    /** Enable or disable cursor blink
    * @param enable - Set to 1 to enable the cursor blinking mode
    */
    void set_blink(char enable);

    /** Enable or disable display
    * @param enable - Set to 1 to enable the display output
    */
    void set_display(char enable);

    //Parts of initialisation routine
    void post_init(void);
    void post_post_init(void);

    // Send a 1-byte control message to the display
    int i2c_message(char byte);

    // Default initialisation sequence for the display
    void init(void);

    int disp_putc(int c);


private :

    I2C _i2c;

    char display_on;
    char cursor_on;
    char blink_on;

    void _set_display();

    virtual int _putc(int c);
    virtual int _getc();

};

#endif // DISPLAY_H

/*
 * Copyright 2017 University of York
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and limitations under the License.
 */