summaryrefslogtreecommitdiff
path: root/libraries/MyLCD/MyLCD.h
blob: b56af9b566e7d7b005500c68aaae6d294fb27170 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#ifndef __MYLCD_H
#define __MYLCD_H
#include <MultiLCD.h>
class MyLCD : public LCD_ILI9325D {
  /* 2.8" ILI9325 based LCD 320x240x16bpp*/
  public:
  uint8_t column, line;
  MyLCD() {
    LCD_ILI9325D::setFontSize(FONT_SIZE_SMALL);
    this->clear();
  }
  void begin() {
    LCD_ILI9325D::begin();
  };
  /* Stub to be compatible with Serial interface. Can't find an abstract Class defined properly in Arduino core stuff */
  void begin(long speed) {
    this->begin();
  };
  /* Simulate more lines with 2 columns */
  byte getLines() { return 30*2; }
  byte getCols() { return 53/2; }
  void setCursor(uint8_t column, uint8_t line) {
    /* column and line as in a terminal, start at line 1, col 1. each column is one character wide*/
    this->column = (column==0)?1:column;
    this->line = (column==0)?1:line;
    /* Simulate more lines with 2 columns */
    if ( this->line <= this->getLines()/2 ) {
      LCD_ILI9325D::setCursor((column-1)*6, line-1);
    } else {
      LCD_ILI9325D::setCursor((this->getCols()+column-1)*6, line-1-this->getLines()/2);
    }
  }
  void clear() {
    LCD_ILI9325D::clear();
    this->setCursor(1, 1);
  }
  size_t println() {
    if ( this->line < this->getLines() ) {
      this->setCursor(1, this->line+1);
    } else {
      this->clear();
    }
  }
  void moveRight(size_t len) {
    if ( this->column+len <= this->getCols() ) {
      this->setCursor(this->column+len, this->line);
    } else {
      this->println();
    }
  }
  size_t println(const String &s) {
    size_t len = LCD_ILI9325D::print(s);
    this->println();
    return len;
  }
  size_t println(const char *s) {
    size_t len = LCD_ILI9325D::print(s);
    this->println();
    return len;
  }
  size_t println(const char c) {
    size_t len = LCD_ILI9325D::print(c);
    this->println();
    return len;
  }
  size_t print(const String &s) {
    size_t len = LCD_ILI9325D::print(s);
    this->moveRight(len);
    return len;
  }
  size_t print(const char *s) {
    size_t len = LCD_ILI9325D::print(s);
    this->moveRight(len);
    return len;
  }
  size_t print(const char c) {
    size_t len = LCD_ILI9325D::print(c);
    this->moveRight(len);
    return len;
  }
};
#endif