Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: RF22_MAX_test_Send
TextLCDScroll.cpp@3:1d7a7a249647, 2013-03-12 (annotated)
- Committer:
- charly
- Date:
- Tue Mar 12 19:40:29 2013 +0000
- Revision:
- 3:1d7a7a249647
- Parent:
- 2:66723c542cef
- Child:
- 4:92a07dbc9222
TextLCDScroll changed to c-strings and removed printf from ISR
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| charly | 3:1d7a7a249647 | 1 | #include <string.h> |
| charly | 0:0ae9963c4e06 | 2 | #include "TextLCDScroll.h" |
| charly | 0:0ae9963c4e06 | 3 | #include "mbed.h" |
| charly | 0:0ae9963c4e06 | 4 | |
| charly | 2:66723c542cef | 5 | TextLCDScroll::TextLCDScroll(PinName rs, PinName e, PinName d4, PinName d5, |
| charly | 3:1d7a7a249647 | 6 | PinName d6, PinName d7, TextLCD::LCDType type): TextLCD(rs,e,d4,d5,d6,d7,type) |
| charly | 3:1d7a7a249647 | 7 | { |
| charly | 0:0ae9963c4e06 | 8 | |
| charly | 2:66723c542cef | 9 | _direction = new int[rows()]; |
| charly | 2:66723c542cef | 10 | _actPos = new int[rows()]; |
| charly | 3:1d7a7a249647 | 11 | |
| charly | 2:66723c542cef | 12 | //_mode = leftright; |
| charly | 2:66723c542cef | 13 | _mode = left; |
| charly | 0:0ae9963c4e06 | 14 | |
| charly | 2:66723c542cef | 15 | setSpeed(5); |
| charly | 3:1d7a7a249647 | 16 | cls(); |
| charly | 0:0ae9963c4e06 | 17 | |
| charly | 2:66723c542cef | 18 | // reduce interrupt level for the ticker timers. so other things (RF22 ) come first |
| charly | 3:1d7a7a249647 | 19 | //NVIC_SetPriority(TIMER3_IRQn, 10); |
| charly | 2:66723c542cef | 20 | |
| charly | 2:66723c542cef | 21 | } |
| charly | 0:0ae9963c4e06 | 22 | |
| charly | 3:1d7a7a249647 | 23 | void TextLCDScroll::cls() |
| charly | 3:1d7a7a249647 | 24 | { |
| charly | 3:1d7a7a249647 | 25 | for (int i=0; i<rows(); i++) { |
| charly | 3:1d7a7a249647 | 26 | _direction[i]=1; |
| charly | 3:1d7a7a249647 | 27 | _actPos[i] = 0; |
| charly | 3:1d7a7a249647 | 28 | setLine(i,""); |
| charly | 3:1d7a7a249647 | 29 | TextLCD::cls(); |
| charly | 3:1d7a7a249647 | 30 | } |
| charly | 3:1d7a7a249647 | 31 | } |
| charly | 0:0ae9963c4e06 | 32 | |
| charly | 3:1d7a7a249647 | 33 | bool TextLCDScroll::setLine( int Line, char *str) |
| charly | 3:1d7a7a249647 | 34 | { |
| charly | 2:66723c542cef | 35 | if (Line >= 0 && Line < rows()) { |
| charly | 3:1d7a7a249647 | 36 | // free the old memory |
| charly | 3:1d7a7a249647 | 37 | if (line[Line] != NULL) { |
| charly | 3:1d7a7a249647 | 38 | free(line[Line]); |
| charly | 3:1d7a7a249647 | 39 | } |
| charly | 3:1d7a7a249647 | 40 | // malloc new space for string |
| charly | 3:1d7a7a249647 | 41 | line[Line] = (char*)malloc((strlen(str)+1)*sizeof(char)); |
| charly | 3:1d7a7a249647 | 42 | //copy the string |
| charly | 3:1d7a7a249647 | 43 | strcpy(line[Line], str); |
| charly | 2:66723c542cef | 44 | // be sure to refresh the display |
| charly | 3:1d7a7a249647 | 45 | TextLCD::cls(); |
| charly | 2:66723c542cef | 46 | // start at beginning again |
| charly | 2:66723c542cef | 47 | _actPos[Line] = 0; |
| charly | 2:66723c542cef | 48 | _direction[Line] =1; |
| charly | 2:66723c542cef | 49 | return(true); |
| charly | 2:66723c542cef | 50 | } else { |
| charly | 2:66723c542cef | 51 | return (false); |
| charly | 2:66723c542cef | 52 | } |
| charly | 2:66723c542cef | 53 | } |
| charly | 0:0ae9963c4e06 | 54 | |
| charly | 3:1d7a7a249647 | 55 | bool TextLCDScroll::setSpeed( int speed) |
| charly | 3:1d7a7a249647 | 56 | { |
| charly | 2:66723c542cef | 57 | if ((speed >= 0.1) && (speed <= 10)) { |
| charly | 2:66723c542cef | 58 | tick.detach(); |
| charly | 2:66723c542cef | 59 | if (_mode == leftright) |
| charly | 2:66723c542cef | 60 | tick.attach(this,&TextLCDScroll::ScrollRightLeft, 1.0/speed); |
| charly | 2:66723c542cef | 61 | else |
| charly | 2:66723c542cef | 62 | tick.attach(this,&TextLCDScroll::ScrollLeft, 1.0/speed); |
| charly | 2:66723c542cef | 63 | return(true); |
| charly | 2:66723c542cef | 64 | } else { |
| charly | 2:66723c542cef | 65 | return(false); |
| charly | 2:66723c542cef | 66 | } |
| charly | 2:66723c542cef | 67 | } |
| charly | 2:66723c542cef | 68 | |
| charly | 3:1d7a7a249647 | 69 | bool TextLCDScroll::setScrollMode( ScrollModes mode) |
| charly | 3:1d7a7a249647 | 70 | { |
| charly | 2:66723c542cef | 71 | _mode = mode; |
| charly | 2:66723c542cef | 72 | return(true); |
| charly | 2:66723c542cef | 73 | } |
| charly | 2:66723c542cef | 74 | |
| charly | 3:1d7a7a249647 | 75 | void TextLCDScroll::ScrollRightLeft() |
| charly | 3:1d7a7a249647 | 76 | { |
| charly | 3:1d7a7a249647 | 77 | int i, j; |
| charly | 3:1d7a7a249647 | 78 | //all rows |
| charly | 2:66723c542cef | 79 | for (i=0; i<rows(); i++) { |
| charly | 3:1d7a7a249647 | 80 | // all columns |
| charly | 3:1d7a7a249647 | 81 | for (j=0; j<columns(); j++) { |
| charly | 3:1d7a7a249647 | 82 | |
| charly | 3:1d7a7a249647 | 83 | locate(j,i); |
| charly | 3:1d7a7a249647 | 84 | // is string shorter than width of display |
| charly | 3:1d7a7a249647 | 85 | if (strlen(line[i]) < columns()) { |
| charly | 3:1d7a7a249647 | 86 | if (j < strlen(line[i])) { |
| charly | 3:1d7a7a249647 | 87 | putc(line[i][j]); |
| charly | 2:66723c542cef | 88 | } else { |
| charly | 3:1d7a7a249647 | 89 | putc(' '); |
| charly | 2:66723c542cef | 90 | } |
| charly | 3:1d7a7a249647 | 91 | } else { // sting is longer -> scroll |
| charly | 3:1d7a7a249647 | 92 | if ((_actPos[i]+j < columns()) || (_actPos[i]+j >= columns()+strlen(line[i]))) { |
| charly | 3:1d7a7a249647 | 93 | putc(' '); |
| charly | 2:66723c542cef | 94 | } else { |
| charly | 3:1d7a7a249647 | 95 | putc(line[i][_actPos[i]-columns()+j]); |
| charly | 2:66723c542cef | 96 | } |
| charly | 2:66723c542cef | 97 | } |
| charly | 0:0ae9963c4e06 | 98 | } |
| charly | 3:1d7a7a249647 | 99 | // shift start-position of string |
| charly | 3:1d7a7a249647 | 100 | // left = ++ |
| charly | 3:1d7a7a249647 | 101 | if (_direction[i] == 1) { |
| charly | 3:1d7a7a249647 | 102 | if (_actPos[i] < (strlen(line[i])+(columns()))) { |
| charly | 3:1d7a7a249647 | 103 | _actPos[i]++; |
| charly | 3:1d7a7a249647 | 104 | } else { |
| charly | 3:1d7a7a249647 | 105 | _direction[i] = 0; // reverse direction |
| charly | 3:1d7a7a249647 | 106 | _actPos[i]--; |
| charly | 3:1d7a7a249647 | 107 | } |
| charly | 3:1d7a7a249647 | 108 | } else { //right = -- |
| charly | 3:1d7a7a249647 | 109 | if (_actPos[i] > 1 ) { |
| charly | 3:1d7a7a249647 | 110 | _actPos[i]--; |
| charly | 3:1d7a7a249647 | 111 | } else { |
| charly | 3:1d7a7a249647 | 112 | _direction[i] = 1; // reverse direction |
| charly | 3:1d7a7a249647 | 113 | _actPos[i]++; |
| charly | 3:1d7a7a249647 | 114 | } |
| charly | 3:1d7a7a249647 | 115 | } |
| charly | 3:1d7a7a249647 | 116 | |
| charly | 0:0ae9963c4e06 | 117 | } |
| charly | 3:1d7a7a249647 | 118 | |
| charly | 2:66723c542cef | 119 | } |
| charly | 0:0ae9963c4e06 | 120 | |
| charly | 3:1d7a7a249647 | 121 | void TextLCDScroll::ScrollLeft() |
| charly | 3:1d7a7a249647 | 122 | { |
| charly | 3:1d7a7a249647 | 123 | int i, j; |
| charly | 3:1d7a7a249647 | 124 | //all rows |
| charly | 2:66723c542cef | 125 | for (i=0; i<rows(); i++) { |
| charly | 3:1d7a7a249647 | 126 | // all columns |
| charly | 3:1d7a7a249647 | 127 | for (j=0; j<columns(); j++) { |
| charly | 3:1d7a7a249647 | 128 | |
| charly | 3:1d7a7a249647 | 129 | locate(j,i); |
| charly | 3:1d7a7a249647 | 130 | // is string shorter than width of display |
| charly | 3:1d7a7a249647 | 131 | if (strlen(line[i]) < columns()) { |
| charly | 3:1d7a7a249647 | 132 | if (j < strlen(line[i])) { |
| charly | 3:1d7a7a249647 | 133 | putc(line[i][j]); |
| charly | 0:0ae9963c4e06 | 134 | } else { |
| charly | 3:1d7a7a249647 | 135 | putc(' '); |
| charly | 3:1d7a7a249647 | 136 | } |
| charly | 3:1d7a7a249647 | 137 | } else { // sting is longer -> scroll |
| charly | 3:1d7a7a249647 | 138 | if ((_actPos[i]+j < columns()) || (_actPos[i]+j >= columns()+strlen(line[i]))) { |
| charly | 3:1d7a7a249647 | 139 | putc(' '); |
| charly | 3:1d7a7a249647 | 140 | } else { |
| charly | 3:1d7a7a249647 | 141 | putc(line[i][_actPos[i]-columns()+j]); |
| charly | 0:0ae9963c4e06 | 142 | } |
| charly | 0:0ae9963c4e06 | 143 | } |
| charly | 3:1d7a7a249647 | 144 | } |
| charly | 3:1d7a7a249647 | 145 | // shift start-position of string |
| charly | 3:1d7a7a249647 | 146 | if (_actPos[i] < (strlen(line[i])+(columns()))) { |
| charly | 3:1d7a7a249647 | 147 | _actPos[i]++; |
| charly | 2:66723c542cef | 148 | } else { |
| charly | 3:1d7a7a249647 | 149 | _actPos[i]=0; |
| charly | 0:0ae9963c4e06 | 150 | } |
| charly | 0:0ae9963c4e06 | 151 | } |
| charly | 3:1d7a7a249647 | 152 | |
| charly | 2:66723c542cef | 153 | } |