Replacement firmware for Dawson Dynamic OB dish positioner
Dependencies: ConfigFile PCF8574 TextOLED mbed
Fork of mbed_blinky by
main.cpp@14:ce9c322f95f2, 2017-08-20 (annotated)
- Committer:
- m0dts
- Date:
- Sun Aug 20 21:30:40 2017 +0000
- Revision:
- 14:ce9c322f95f2
- Parent:
- 4:81cea7a352b0
Functional Version with menu 20/8/2017
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dan | 0:7dec7e9ac085 | 1 | #include "mbed.h" |
m0dts | 14:ce9c322f95f2 | 2 | #include "PCF8574.h" |
m0dts | 14:ce9c322f95f2 | 3 | #include <string> |
m0dts | 14:ce9c322f95f2 | 4 | #include "ConfigFile.h" |
m0dts | 14:ce9c322f95f2 | 5 | |
m0dts | 14:ce9c322f95f2 | 6 | LocalFileSystem local("local"); |
m0dts | 14:ce9c322f95f2 | 7 | ConfigFile cfg; |
m0dts | 14:ce9c322f95f2 | 8 | |
m0dts | 14:ce9c322f95f2 | 9 | //Address of PCF8574 Button and LCD interface IC's |
m0dts | 14:ce9c322f95f2 | 10 | #define PCF8574_BUTTON_ADDR 1 //A0 |
m0dts | 14:ce9c322f95f2 | 11 | #define PCF8574_LCD_ADDR 0 |
m0dts | 14:ce9c322f95f2 | 12 | |
m0dts | 14:ce9c322f95f2 | 13 | DigitalOut led1(LED1); |
m0dts | 14:ce9c322f95f2 | 14 | DigitalOut led2(LED2); |
m0dts | 14:ce9c322f95f2 | 15 | DigitalOut led3(LED3); |
m0dts | 14:ce9c322f95f2 | 16 | DigitalOut led4(LED4); |
m0dts | 14:ce9c322f95f2 | 17 | |
m0dts | 14:ce9c322f95f2 | 18 | |
m0dts | 14:ce9c322f95f2 | 19 | //controller pins |
m0dts | 14:ce9c322f95f2 | 20 | DigitalOut Select_AZ (p20); |
m0dts | 14:ce9c322f95f2 | 21 | DigitalOut Select_EL (p16); |
m0dts | 14:ce9c322f95f2 | 22 | DigitalOut Direction (p25); |
m0dts | 14:ce9c322f95f2 | 23 | PwmOut Drive (p26); |
m0dts | 14:ce9c322f95f2 | 24 | DigitalIn Endstop_AZ (p18); |
m0dts | 14:ce9c322f95f2 | 25 | DigitalIn Endstop_EL (p15); |
m0dts | 14:ce9c322f95f2 | 26 | InterruptIn Pulse(p17); |
m0dts | 14:ce9c322f95f2 | 27 | DigitalOut rfled(p12); |
m0dts | 14:ce9c322f95f2 | 28 | |
m0dts | 14:ce9c322f95f2 | 29 | //LCD pin connections to PCF8574 |
m0dts | 14:ce9c322f95f2 | 30 | #define rs_pin 0 |
m0dts | 14:ce9c322f95f2 | 31 | #define e_pin 1 |
m0dts | 14:ce9c322f95f2 | 32 | #define d4_pin 2 |
m0dts | 14:ce9c322f95f2 | 33 | #define d5_pin 3 |
m0dts | 14:ce9c322f95f2 | 34 | #define d6_pin 4 |
m0dts | 14:ce9c322f95f2 | 35 | #define d7_pin 5 |
m0dts | 14:ce9c322f95f2 | 36 | |
m0dts | 14:ce9c322f95f2 | 37 | //scaling for pulses per degree |
m0dts | 14:ce9c322f95f2 | 38 | #define Az_scale = 15.378 |
m0dts | 14:ce9c322f95f2 | 39 | #define El_scale = 5.155 |
m0dts | 14:ce9c322f95f2 | 40 | |
m0dts | 14:ce9c322f95f2 | 41 | PCF8574 pcf_lcd(p9,p10,PCF8574_LCD_ADDR,true); |
m0dts | 14:ce9c322f95f2 | 42 | PCF8574 pcf_button(p9,p10,PCF8574_BUTTON_ADDR,true); |
m0dts | 14:ce9c322f95f2 | 43 | |
m0dts | 14:ce9c322f95f2 | 44 | Ticker Refresh_timer; |
dan | 0:7dec7e9ac085 | 45 | |
m0dts | 14:ce9c322f95f2 | 46 | int _column; |
m0dts | 14:ce9c322f95f2 | 47 | int _row; |
m0dts | 14:ce9c322f95f2 | 48 | int Az_Count; |
m0dts | 14:ce9c322f95f2 | 49 | int El_Count; |
m0dts | 14:ce9c322f95f2 | 50 | char buffer[20]; |
m0dts | 14:ce9c322f95f2 | 51 | char Last_Direction=0; |
m0dts | 14:ce9c322f95f2 | 52 | char Up=0,Down=0,Left=0,Right=0,OK=0; |
m0dts | 14:ce9c322f95f2 | 53 | float Azimuth,Elevation; |
m0dts | 14:ce9c322f95f2 | 54 | float pwm_freq=0.00005;//30khz |
m0dts | 14:ce9c322f95f2 | 55 | float pwm_duty=0.5; |
m0dts | 14:ce9c322f95f2 | 56 | float Az_ref=0,El_ref=0; |
m0dts | 14:ce9c322f95f2 | 57 | float Az_zero=0; |
m0dts | 14:ce9c322f95f2 | 58 | float El_zero=0; |
m0dts | 14:ce9c322f95f2 | 59 | int temp; |
m0dts | 14:ce9c322f95f2 | 60 | float temp2; |
m0dts | 14:ce9c322f95f2 | 61 | |
m0dts | 14:ce9c322f95f2 | 62 | |
m0dts | 14:ce9c322f95f2 | 63 | //settings available in menu |
m0dts | 14:ce9c322f95f2 | 64 | int setting_count=6; |
m0dts | 14:ce9c322f95f2 | 65 | int setting_val[] = {0,270,0,60,Az_zero,El_zero}; |
dan | 0:7dec7e9ac085 | 66 | |
m0dts | 14:ce9c322f95f2 | 67 | char * const setting_name[] = { |
m0dts | 14:ce9c322f95f2 | 68 | "Az CCW Limit:", |
m0dts | 14:ce9c322f95f2 | 69 | "Az CW Limit:", |
m0dts | 14:ce9c322f95f2 | 70 | "El Low Limit:", |
m0dts | 14:ce9c322f95f2 | 71 | "El High Limit:", |
m0dts | 14:ce9c322f95f2 | 72 | "Set Current Az:", |
m0dts | 14:ce9c322f95f2 | 73 | "Set Current El:", |
m0dts | 14:ce9c322f95f2 | 74 | }; |
m0dts | 14:ce9c322f95f2 | 75 | |
m0dts | 14:ce9c322f95f2 | 76 | |
m0dts | 14:ce9c322f95f2 | 77 | |
m0dts | 14:ce9c322f95f2 | 78 | |
m0dts | 14:ce9c322f95f2 | 79 | void writeByte(int byte); |
m0dts | 14:ce9c322f95f2 | 80 | void writeCommand(int command); |
m0dts | 14:ce9c322f95f2 | 81 | void locate(int column, int row); |
m0dts | 14:ce9c322f95f2 | 82 | void cls(); |
m0dts | 14:ce9c322f95f2 | 83 | void init(); |
m0dts | 14:ce9c322f95f2 | 84 | void write4bit(int value); |
m0dts | 14:ce9c322f95f2 | 85 | void character(int column, int row, int c); |
m0dts | 14:ce9c322f95f2 | 86 | int address(int column, int row); |
m0dts | 14:ce9c322f95f2 | 87 | void writeData(int data); |
m0dts | 14:ce9c322f95f2 | 88 | void writestring(int column, int row, string c); |
m0dts | 14:ce9c322f95f2 | 89 | void count_rise(); |
m0dts | 14:ce9c322f95f2 | 90 | void count_fall(); |
m0dts | 14:ce9c322f95f2 | 91 | void Refresh_oled(bool anytime); |
m0dts | 14:ce9c322f95f2 | 92 | void menu(void); |
m0dts | 14:ce9c322f95f2 | 93 | void WriteSettings(void); |
m0dts | 14:ce9c322f95f2 | 94 | void ReadSettings(void); |
m0dts | 14:ce9c322f95f2 | 95 | |
m0dts | 14:ce9c322f95f2 | 96 | |
m0dts | 14:ce9c322f95f2 | 97 | |
m0dts | 14:ce9c322f95f2 | 98 | //start of main program |
dan | 0:7dec7e9ac085 | 99 | int main() { |
m0dts | 14:ce9c322f95f2 | 100 | uint8_t val; |
m0dts | 14:ce9c322f95f2 | 101 | |
m0dts | 14:ce9c322f95f2 | 102 | El_Count=0; |
m0dts | 14:ce9c322f95f2 | 103 | Az_Count=0; |
m0dts | 14:ce9c322f95f2 | 104 | |
m0dts | 14:ce9c322f95f2 | 105 | Endstop_AZ.mode(PullUp); |
m0dts | 14:ce9c322f95f2 | 106 | Pulse.mode(PullUp); |
m0dts | 14:ce9c322f95f2 | 107 | |
m0dts | 14:ce9c322f95f2 | 108 | rfled=0; |
m0dts | 14:ce9c322f95f2 | 109 | |
m0dts | 14:ce9c322f95f2 | 110 | pcf_button=0xff; |
m0dts | 14:ce9c322f95f2 | 111 | |
m0dts | 14:ce9c322f95f2 | 112 | |
m0dts | 14:ce9c322f95f2 | 113 | if(cfg.read("/local/settings.cfg")){ |
m0dts | 14:ce9c322f95f2 | 114 | char cfgval[10]; |
m0dts | 14:ce9c322f95f2 | 115 | for(int i=0;i<setting_count;i++){ |
m0dts | 14:ce9c322f95f2 | 116 | cfg.getValue(setting_name[i], &cfgval[0], sizeof(setting_val)); |
m0dts | 14:ce9c322f95f2 | 117 | setting_val[i]=atoi(cfgval); |
m0dts | 14:ce9c322f95f2 | 118 | } |
m0dts | 14:ce9c322f95f2 | 119 | } |
m0dts | 14:ce9c322f95f2 | 120 | |
m0dts | 14:ce9c322f95f2 | 121 | init(); |
m0dts | 14:ce9c322f95f2 | 122 | sprintf(buffer,"Az/El Controller"); |
m0dts | 14:ce9c322f95f2 | 123 | writestring(2,0,buffer); |
m0dts | 14:ce9c322f95f2 | 124 | sprintf(buffer,"M0DTS 2017"); |
m0dts | 14:ce9c322f95f2 | 125 | writestring(4,1,buffer); |
m0dts | 14:ce9c322f95f2 | 126 | sprintf(buffer,"rob@m0dts.co.uk"); |
m0dts | 14:ce9c322f95f2 | 127 | writestring(2,2,buffer); |
m0dts | 14:ce9c322f95f2 | 128 | wait(2); |
m0dts | 14:ce9c322f95f2 | 129 | cls(); |
m0dts | 14:ce9c322f95f2 | 130 | sprintf(buffer,"Az/El Controller"); |
m0dts | 14:ce9c322f95f2 | 131 | writestring(0,0,buffer); |
m0dts | 14:ce9c322f95f2 | 132 | |
m0dts | 14:ce9c322f95f2 | 133 | |
m0dts | 14:ce9c322f95f2 | 134 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 135 | |
m0dts | 14:ce9c322f95f2 | 136 | Pulse.rise(&count_rise); |
m0dts | 14:ce9c322f95f2 | 137 | Pulse.fall(&count_fall); |
m0dts | 14:ce9c322f95f2 | 138 | Drive.period(pwm_freq); |
m0dts | 14:ce9c322f95f2 | 139 | |
m0dts | 14:ce9c322f95f2 | 140 | |
m0dts | 14:ce9c322f95f2 | 141 | |
m0dts | 14:ce9c322f95f2 | 142 | |
dan | 0:7dec7e9ac085 | 143 | while(1) { |
m0dts | 14:ce9c322f95f2 | 144 | |
m0dts | 14:ce9c322f95f2 | 145 | val = pcf_button.read(); |
m0dts | 14:ce9c322f95f2 | 146 | Up = ~(val>>3)&0x01; |
m0dts | 14:ce9c322f95f2 | 147 | Left = ~(val>>4)&0x01; |
m0dts | 14:ce9c322f95f2 | 148 | Right = ~(val>>5)&0x01; |
m0dts | 14:ce9c322f95f2 | 149 | Down = ~(val>>6)&0x01; |
m0dts | 14:ce9c322f95f2 | 150 | OK = ~(val>>7)&0x01; |
m0dts | 14:ce9c322f95f2 | 151 | |
m0dts | 14:ce9c322f95f2 | 152 | if(OK){ |
m0dts | 14:ce9c322f95f2 | 153 | //menu |
m0dts | 14:ce9c322f95f2 | 154 | menu(); |
m0dts | 14:ce9c322f95f2 | 155 | wait_ms(200); |
m0dts | 14:ce9c322f95f2 | 156 | cls(); |
m0dts | 14:ce9c322f95f2 | 157 | sprintf(buffer,"Az/El Controller"); |
m0dts | 14:ce9c322f95f2 | 158 | writestring(0,0,buffer); |
m0dts | 14:ce9c322f95f2 | 159 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 160 | } |
m0dts | 14:ce9c322f95f2 | 161 | |
m0dts | 14:ce9c322f95f2 | 162 | |
m0dts | 14:ce9c322f95f2 | 163 | if(Up){ |
m0dts | 14:ce9c322f95f2 | 164 | Last_Direction=0; |
m0dts | 14:ce9c322f95f2 | 165 | Select_EL=1; |
m0dts | 14:ce9c322f95f2 | 166 | Select_AZ=0; |
m0dts | 14:ce9c322f95f2 | 167 | Direction=1; |
m0dts | 14:ce9c322f95f2 | 168 | temp2 = 0.1; |
m0dts | 14:ce9c322f95f2 | 169 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 170 | while(Up & Elevation<=setting_val[3]){ |
m0dts | 14:ce9c322f95f2 | 171 | if(temp2<pwm_duty){ |
m0dts | 14:ce9c322f95f2 | 172 | temp2+=0.01; |
m0dts | 14:ce9c322f95f2 | 173 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 174 | } |
m0dts | 14:ce9c322f95f2 | 175 | Up = ~(pcf_button.read()>>3)&0x01; |
m0dts | 14:ce9c322f95f2 | 176 | Refresh_oled(false); |
m0dts | 14:ce9c322f95f2 | 177 | } |
m0dts | 14:ce9c322f95f2 | 178 | Drive.write(0.0f); |
m0dts | 14:ce9c322f95f2 | 179 | wait_ms(100); |
m0dts | 14:ce9c322f95f2 | 180 | Up=0; |
m0dts | 14:ce9c322f95f2 | 181 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 182 | } |
m0dts | 14:ce9c322f95f2 | 183 | |
m0dts | 14:ce9c322f95f2 | 184 | if(Down){ |
m0dts | 14:ce9c322f95f2 | 185 | if(!Endstop_EL){ |
m0dts | 14:ce9c322f95f2 | 186 | Last_Direction=1; |
m0dts | 14:ce9c322f95f2 | 187 | Select_EL=1; |
m0dts | 14:ce9c322f95f2 | 188 | Select_AZ=0; |
m0dts | 14:ce9c322f95f2 | 189 | Direction=0; |
m0dts | 14:ce9c322f95f2 | 190 | temp2 = 0.1; |
m0dts | 14:ce9c322f95f2 | 191 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 192 | while(Down & !Endstop_EL & Elevation>=setting_val[2]){ |
m0dts | 14:ce9c322f95f2 | 193 | if(temp2<pwm_duty){ |
m0dts | 14:ce9c322f95f2 | 194 | temp2+=0.01; |
m0dts | 14:ce9c322f95f2 | 195 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 196 | } |
m0dts | 14:ce9c322f95f2 | 197 | Down = ~(pcf_button.read()>>6)&0x01; |
m0dts | 14:ce9c322f95f2 | 198 | Refresh_oled(false); |
m0dts | 14:ce9c322f95f2 | 199 | } |
m0dts | 14:ce9c322f95f2 | 200 | Drive.write(0.0f); |
m0dts | 14:ce9c322f95f2 | 201 | wait_ms(100); |
m0dts | 14:ce9c322f95f2 | 202 | Down=0; |
m0dts | 14:ce9c322f95f2 | 203 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 204 | } |
m0dts | 14:ce9c322f95f2 | 205 | } |
m0dts | 14:ce9c322f95f2 | 206 | |
m0dts | 14:ce9c322f95f2 | 207 | if(Left){ |
m0dts | 14:ce9c322f95f2 | 208 | if(!Endstop_AZ){ |
m0dts | 14:ce9c322f95f2 | 209 | Last_Direction=2; |
m0dts | 14:ce9c322f95f2 | 210 | Select_EL=0; |
m0dts | 14:ce9c322f95f2 | 211 | Select_AZ=1; |
m0dts | 14:ce9c322f95f2 | 212 | Direction=1; |
m0dts | 14:ce9c322f95f2 | 213 | temp2 = 0.1; |
m0dts | 14:ce9c322f95f2 | 214 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 215 | while(Left & !Endstop_AZ & Azimuth>=setting_val[0]){ |
m0dts | 14:ce9c322f95f2 | 216 | if(temp2<pwm_duty){ |
m0dts | 14:ce9c322f95f2 | 217 | temp2+=0.01; |
m0dts | 14:ce9c322f95f2 | 218 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 219 | } |
m0dts | 14:ce9c322f95f2 | 220 | Left = ~(pcf_button.read()>>4)&0x01; |
m0dts | 14:ce9c322f95f2 | 221 | Refresh_oled(false); |
m0dts | 14:ce9c322f95f2 | 222 | } |
m0dts | 14:ce9c322f95f2 | 223 | Drive.write(0.0f); |
m0dts | 14:ce9c322f95f2 | 224 | wait_ms(100); |
m0dts | 14:ce9c322f95f2 | 225 | Left=0; |
m0dts | 14:ce9c322f95f2 | 226 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 227 | } |
m0dts | 14:ce9c322f95f2 | 228 | } |
m0dts | 14:ce9c322f95f2 | 229 | |
m0dts | 14:ce9c322f95f2 | 230 | if(Right){ |
m0dts | 14:ce9c322f95f2 | 231 | Last_Direction=3; |
m0dts | 14:ce9c322f95f2 | 232 | Select_EL=0; |
m0dts | 14:ce9c322f95f2 | 233 | Select_AZ=1; |
m0dts | 14:ce9c322f95f2 | 234 | Direction=0; |
m0dts | 14:ce9c322f95f2 | 235 | temp = Az_Count; |
m0dts | 14:ce9c322f95f2 | 236 | temp2 = 0.1; |
m0dts | 14:ce9c322f95f2 | 237 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 238 | while(Right & Azimuth<=setting_val[1]){ |
m0dts | 14:ce9c322f95f2 | 239 | if(temp2<pwm_duty){ |
m0dts | 14:ce9c322f95f2 | 240 | temp2+=0.01; |
m0dts | 14:ce9c322f95f2 | 241 | Drive.write(temp2); |
m0dts | 14:ce9c322f95f2 | 242 | } |
m0dts | 14:ce9c322f95f2 | 243 | Right = ~(pcf_button.read()>>5)&0x01; |
m0dts | 14:ce9c322f95f2 | 244 | Refresh_oled(false); |
m0dts | 14:ce9c322f95f2 | 245 | } |
m0dts | 14:ce9c322f95f2 | 246 | Drive.write(0.0f); |
m0dts | 14:ce9c322f95f2 | 247 | wait_ms(100); |
m0dts | 14:ce9c322f95f2 | 248 | Right=0; |
m0dts | 14:ce9c322f95f2 | 249 | Refresh_oled(true); |
m0dts | 14:ce9c322f95f2 | 250 | } |
stevep | 4:81cea7a352b0 | 251 | } |
dan | 0:7dec7e9ac085 | 252 | } |
m0dts | 14:ce9c322f95f2 | 253 | |
m0dts | 14:ce9c322f95f2 | 254 | void menu(void){ |
m0dts | 14:ce9c322f95f2 | 255 | |
m0dts | 14:ce9c322f95f2 | 256 | //grab current az/el |
m0dts | 14:ce9c322f95f2 | 257 | |
m0dts | 14:ce9c322f95f2 | 258 | setting_val[4]=(int)Azimuth; |
m0dts | 14:ce9c322f95f2 | 259 | setting_val[5]=(int)Elevation; |
m0dts | 14:ce9c322f95f2 | 260 | |
m0dts | 14:ce9c322f95f2 | 261 | int pos=0; |
m0dts | 14:ce9c322f95f2 | 262 | cls(); |
m0dts | 14:ce9c322f95f2 | 263 | sprintf(buffer,"Menu"); |
m0dts | 14:ce9c322f95f2 | 264 | sprintf(buffer + strlen(buffer)," %i:",pos+1); |
m0dts | 14:ce9c322f95f2 | 265 | writestring(0,0,buffer); |
m0dts | 14:ce9c322f95f2 | 266 | sprintf(buffer,setting_name[pos]); |
m0dts | 14:ce9c322f95f2 | 267 | writestring(0,1,buffer); |
m0dts | 14:ce9c322f95f2 | 268 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 269 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 270 | sprintf(buffer,"%i",setting_val[pos]); |
m0dts | 14:ce9c322f95f2 | 271 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 272 | wait_ms(200); |
m0dts | 14:ce9c322f95f2 | 273 | |
m0dts | 14:ce9c322f95f2 | 274 | int val; |
m0dts | 14:ce9c322f95f2 | 275 | while(1){ |
m0dts | 14:ce9c322f95f2 | 276 | val = pcf_button.read(); |
m0dts | 14:ce9c322f95f2 | 277 | Up = ~(val>>3)&0x01; |
m0dts | 14:ce9c322f95f2 | 278 | Left = ~(val>>4)&0x01; |
m0dts | 14:ce9c322f95f2 | 279 | Right = ~(val>>5)&0x01; |
m0dts | 14:ce9c322f95f2 | 280 | Down = ~(val>>6)&0x01; |
m0dts | 14:ce9c322f95f2 | 281 | OK = ~(val>>7)&0x01; |
m0dts | 14:ce9c322f95f2 | 282 | |
m0dts | 14:ce9c322f95f2 | 283 | if(OK){ |
m0dts | 14:ce9c322f95f2 | 284 | break; |
m0dts | 14:ce9c322f95f2 | 285 | } |
m0dts | 14:ce9c322f95f2 | 286 | |
m0dts | 14:ce9c322f95f2 | 287 | if(Down){ |
m0dts | 14:ce9c322f95f2 | 288 | cls(); |
m0dts | 14:ce9c322f95f2 | 289 | pos++; |
m0dts | 14:ce9c322f95f2 | 290 | if (pos==setting_count){ |
m0dts | 14:ce9c322f95f2 | 291 | pos=setting_count-1; |
m0dts | 14:ce9c322f95f2 | 292 | } |
m0dts | 14:ce9c322f95f2 | 293 | sprintf(buffer,"Menu"); |
m0dts | 14:ce9c322f95f2 | 294 | sprintf(buffer + strlen(buffer)," %i:",pos+1); |
m0dts | 14:ce9c322f95f2 | 295 | writestring(0,0,buffer); |
m0dts | 14:ce9c322f95f2 | 296 | |
m0dts | 14:ce9c322f95f2 | 297 | sprintf(buffer,setting_name[pos]); |
m0dts | 14:ce9c322f95f2 | 298 | writestring(0,1,buffer); |
m0dts | 14:ce9c322f95f2 | 299 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 300 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 301 | sprintf(buffer,"%i",setting_val[pos]); |
m0dts | 14:ce9c322f95f2 | 302 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 303 | |
m0dts | 14:ce9c322f95f2 | 304 | if(pos==setting_count-1){ |
m0dts | 14:ce9c322f95f2 | 305 | sprintf(buffer,"OK=Save"); |
m0dts | 14:ce9c322f95f2 | 306 | writestring(13,3,buffer); |
m0dts | 14:ce9c322f95f2 | 307 | } |
m0dts | 14:ce9c322f95f2 | 308 | wait_ms(200); |
m0dts | 14:ce9c322f95f2 | 309 | } |
m0dts | 14:ce9c322f95f2 | 310 | |
m0dts | 14:ce9c322f95f2 | 311 | |
m0dts | 14:ce9c322f95f2 | 312 | if(Up){ |
m0dts | 14:ce9c322f95f2 | 313 | pos--; |
m0dts | 14:ce9c322f95f2 | 314 | if (pos<0){pos=0;} |
m0dts | 14:ce9c322f95f2 | 315 | cls(); |
m0dts | 14:ce9c322f95f2 | 316 | sprintf(buffer,"Menu"); |
m0dts | 14:ce9c322f95f2 | 317 | sprintf(buffer + strlen(buffer)," %i:",pos+1); |
m0dts | 14:ce9c322f95f2 | 318 | writestring(0,0,buffer); |
m0dts | 14:ce9c322f95f2 | 319 | sprintf(buffer,setting_name[pos]); |
m0dts | 14:ce9c322f95f2 | 320 | writestring(0,1,buffer); |
m0dts | 14:ce9c322f95f2 | 321 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 322 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 323 | sprintf(buffer,"%i",setting_val[pos]); |
m0dts | 14:ce9c322f95f2 | 324 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 325 | wait_ms(200); |
m0dts | 14:ce9c322f95f2 | 326 | } |
m0dts | 14:ce9c322f95f2 | 327 | |
m0dts | 14:ce9c322f95f2 | 328 | |
m0dts | 14:ce9c322f95f2 | 329 | if(Left){ |
m0dts | 14:ce9c322f95f2 | 330 | switch (pos) { |
m0dts | 14:ce9c322f95f2 | 331 | case 0: |
m0dts | 14:ce9c322f95f2 | 332 | if(setting_val[pos]>0){ |
m0dts | 14:ce9c322f95f2 | 333 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 334 | } |
m0dts | 14:ce9c322f95f2 | 335 | break; |
m0dts | 14:ce9c322f95f2 | 336 | case 1: |
m0dts | 14:ce9c322f95f2 | 337 | if(setting_val[pos]>setting_val[0]){ |
m0dts | 14:ce9c322f95f2 | 338 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 339 | } |
m0dts | 14:ce9c322f95f2 | 340 | break; |
m0dts | 14:ce9c322f95f2 | 341 | case 2: |
m0dts | 14:ce9c322f95f2 | 342 | if(setting_val[pos]>0){ |
m0dts | 14:ce9c322f95f2 | 343 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 344 | } |
m0dts | 14:ce9c322f95f2 | 345 | break; |
m0dts | 14:ce9c322f95f2 | 346 | case 3: |
m0dts | 14:ce9c322f95f2 | 347 | if(setting_val[pos]>setting_val[2]){ |
m0dts | 14:ce9c322f95f2 | 348 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 349 | } |
m0dts | 14:ce9c322f95f2 | 350 | break; |
m0dts | 14:ce9c322f95f2 | 351 | case 4: |
m0dts | 14:ce9c322f95f2 | 352 | if(setting_val[pos]>0){ |
m0dts | 14:ce9c322f95f2 | 353 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 354 | } |
m0dts | 14:ce9c322f95f2 | 355 | break; |
m0dts | 14:ce9c322f95f2 | 356 | case 5: |
m0dts | 14:ce9c322f95f2 | 357 | if(setting_val[pos]>0){ |
m0dts | 14:ce9c322f95f2 | 358 | setting_val[pos]-=1; |
m0dts | 14:ce9c322f95f2 | 359 | } |
m0dts | 14:ce9c322f95f2 | 360 | break; |
m0dts | 14:ce9c322f95f2 | 361 | |
m0dts | 14:ce9c322f95f2 | 362 | } |
m0dts | 14:ce9c322f95f2 | 363 | |
m0dts | 14:ce9c322f95f2 | 364 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 365 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 366 | sprintf(buffer,"%i",setting_val[pos]); |
m0dts | 14:ce9c322f95f2 | 367 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 368 | wait_ms(50); |
m0dts | 14:ce9c322f95f2 | 369 | } |
m0dts | 14:ce9c322f95f2 | 370 | |
m0dts | 14:ce9c322f95f2 | 371 | if(Right){ |
m0dts | 14:ce9c322f95f2 | 372 | switch (pos) { |
m0dts | 14:ce9c322f95f2 | 373 | case 0: //360 |
m0dts | 14:ce9c322f95f2 | 374 | if(setting_val[pos]<setting_val[1]){ |
m0dts | 14:ce9c322f95f2 | 375 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 376 | } |
m0dts | 14:ce9c322f95f2 | 377 | case 1: //360 |
m0dts | 14:ce9c322f95f2 | 378 | if(setting_val[pos]<360){ |
m0dts | 14:ce9c322f95f2 | 379 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 380 | } |
m0dts | 14:ce9c322f95f2 | 381 | break; |
m0dts | 14:ce9c322f95f2 | 382 | case 2: //90 |
m0dts | 14:ce9c322f95f2 | 383 | if(setting_val[pos]<setting_val[3]){ |
m0dts | 14:ce9c322f95f2 | 384 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 385 | } |
m0dts | 14:ce9c322f95f2 | 386 | break; |
m0dts | 14:ce9c322f95f2 | 387 | case 3: //90 |
m0dts | 14:ce9c322f95f2 | 388 | if(setting_val[pos]<90){ |
m0dts | 14:ce9c322f95f2 | 389 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 390 | } |
m0dts | 14:ce9c322f95f2 | 391 | break; |
m0dts | 14:ce9c322f95f2 | 392 | case 4: //360 |
m0dts | 14:ce9c322f95f2 | 393 | if(setting_val[pos]<360){ |
m0dts | 14:ce9c322f95f2 | 394 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 395 | } |
m0dts | 14:ce9c322f95f2 | 396 | break; |
m0dts | 14:ce9c322f95f2 | 397 | case 5: //90 |
m0dts | 14:ce9c322f95f2 | 398 | if(setting_val[pos]<90){ |
m0dts | 14:ce9c322f95f2 | 399 | setting_val[pos]+=1; |
m0dts | 14:ce9c322f95f2 | 400 | } |
m0dts | 14:ce9c322f95f2 | 401 | break; |
m0dts | 14:ce9c322f95f2 | 402 | } |
m0dts | 14:ce9c322f95f2 | 403 | |
m0dts | 14:ce9c322f95f2 | 404 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 405 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 406 | sprintf(buffer,"%i",setting_val[pos]); |
m0dts | 14:ce9c322f95f2 | 407 | writestring(0,2,buffer); |
m0dts | 14:ce9c322f95f2 | 408 | wait_ms(50); |
m0dts | 14:ce9c322f95f2 | 409 | } |
m0dts | 14:ce9c322f95f2 | 410 | } |
m0dts | 14:ce9c322f95f2 | 411 | cls(); |
m0dts | 14:ce9c322f95f2 | 412 | sprintf(buffer,"Saving..."); |
m0dts | 14:ce9c322f95f2 | 413 | writestring(2,2,buffer); |
m0dts | 14:ce9c322f95f2 | 414 | |
m0dts | 14:ce9c322f95f2 | 415 | //store settings here |
m0dts | 14:ce9c322f95f2 | 416 | for(int i=0;i<setting_count;i++){ |
m0dts | 14:ce9c322f95f2 | 417 | sprintf(buffer,"%i",setting_val[i]); |
m0dts | 14:ce9c322f95f2 | 418 | cfg.setValue(setting_name[i], buffer) ; |
m0dts | 14:ce9c322f95f2 | 419 | } |
m0dts | 14:ce9c322f95f2 | 420 | |
m0dts | 14:ce9c322f95f2 | 421 | cfg.write("/local/settings.cfg", "# Az/El Controller Settings"); |
m0dts | 14:ce9c322f95f2 | 422 | cfg.removeAll(); |
m0dts | 14:ce9c322f95f2 | 423 | |
m0dts | 14:ce9c322f95f2 | 424 | //reset counters.... big problem! |
m0dts | 14:ce9c322f95f2 | 425 | Az_Count=0; |
m0dts | 14:ce9c322f95f2 | 426 | El_Count=0; |
m0dts | 14:ce9c322f95f2 | 427 | |
m0dts | 14:ce9c322f95f2 | 428 | //save delay?! |
m0dts | 14:ce9c322f95f2 | 429 | wait_ms(300); |
m0dts | 14:ce9c322f95f2 | 430 | } |
m0dts | 14:ce9c322f95f2 | 431 | |
m0dts | 14:ce9c322f95f2 | 432 | void count_rise(void){ |
m0dts | 14:ce9c322f95f2 | 433 | if(Up|Right){ |
m0dts | 14:ce9c322f95f2 | 434 | if(Up){ |
m0dts | 14:ce9c322f95f2 | 435 | El_Count++; |
m0dts | 14:ce9c322f95f2 | 436 | } |
m0dts | 14:ce9c322f95f2 | 437 | if(Right){ |
m0dts | 14:ce9c322f95f2 | 438 | Az_Count++; |
m0dts | 14:ce9c322f95f2 | 439 | } |
m0dts | 14:ce9c322f95f2 | 440 | //catch pulses after button released |
m0dts | 14:ce9c322f95f2 | 441 | }else{ |
m0dts | 14:ce9c322f95f2 | 442 | if(Last_Direction==0)//up |
m0dts | 14:ce9c322f95f2 | 443 | El_Count++; |
m0dts | 14:ce9c322f95f2 | 444 | if(Last_Direction==3)//right |
m0dts | 14:ce9c322f95f2 | 445 | Az_Count++; |
m0dts | 14:ce9c322f95f2 | 446 | } |
m0dts | 14:ce9c322f95f2 | 447 | } |
m0dts | 14:ce9c322f95f2 | 448 | |
m0dts | 14:ce9c322f95f2 | 449 | void count_fall(void){ |
m0dts | 14:ce9c322f95f2 | 450 | if(Down|Left){ |
m0dts | 14:ce9c322f95f2 | 451 | if(Down){ |
m0dts | 14:ce9c322f95f2 | 452 | El_Count--; |
m0dts | 14:ce9c322f95f2 | 453 | } |
m0dts | 14:ce9c322f95f2 | 454 | if(Left){ |
m0dts | 14:ce9c322f95f2 | 455 | Az_Count--; |
m0dts | 14:ce9c322f95f2 | 456 | } |
m0dts | 14:ce9c322f95f2 | 457 | //catch pulses after button released |
m0dts | 14:ce9c322f95f2 | 458 | }else{ |
m0dts | 14:ce9c322f95f2 | 459 | if(Last_Direction==1)//down |
m0dts | 14:ce9c322f95f2 | 460 | El_Count--; |
m0dts | 14:ce9c322f95f2 | 461 | if(Last_Direction==2)//left |
m0dts | 14:ce9c322f95f2 | 462 | Az_Count--; |
m0dts | 14:ce9c322f95f2 | 463 | } |
m0dts | 14:ce9c322f95f2 | 464 | } |
m0dts | 14:ce9c322f95f2 | 465 | |
m0dts | 14:ce9c322f95f2 | 466 | |
m0dts | 14:ce9c322f95f2 | 467 | void Refresh_oled(bool anytime){ |
m0dts | 14:ce9c322f95f2 | 468 | |
m0dts | 14:ce9c322f95f2 | 469 | Elevation = ((float)El_Count/15.378)+setting_val[5]; |
m0dts | 14:ce9c322f95f2 | 470 | Azimuth = ((float)Az_Count/5.155)+setting_val[4]; |
m0dts | 14:ce9c322f95f2 | 471 | |
m0dts | 14:ce9c322f95f2 | 472 | if(Up){ |
m0dts | 14:ce9c322f95f2 | 473 | sprintf(buffer,"El:% 05.1f",Elevation); |
m0dts | 14:ce9c322f95f2 | 474 | writestring(11,3,buffer); |
m0dts | 14:ce9c322f95f2 | 475 | buffer[0]=85;//'U' |
m0dts | 14:ce9c322f95f2 | 476 | buffer[1]=0; |
m0dts | 14:ce9c322f95f2 | 477 | writestring(19,3,buffer); |
m0dts | 14:ce9c322f95f2 | 478 | } |
m0dts | 14:ce9c322f95f2 | 479 | if(Down){ |
m0dts | 14:ce9c322f95f2 | 480 | sprintf(buffer,"El:% 05.1f",Elevation); |
m0dts | 14:ce9c322f95f2 | 481 | writestring(11,3,buffer); |
m0dts | 14:ce9c322f95f2 | 482 | buffer[0]=68;//'D' |
m0dts | 14:ce9c322f95f2 | 483 | buffer[1]=0; |
m0dts | 14:ce9c322f95f2 | 484 | writestring(19,3,buffer); |
m0dts | 14:ce9c322f95f2 | 485 | } |
m0dts | 14:ce9c322f95f2 | 486 | if(Left){ |
m0dts | 14:ce9c322f95f2 | 487 | sprintf(buffer,"Az:% 06.1f",Azimuth); |
m0dts | 14:ce9c322f95f2 | 488 | writestring(0,3,buffer); |
m0dts | 14:ce9c322f95f2 | 489 | buffer[0]=127;//arrow left |
m0dts | 14:ce9c322f95f2 | 490 | buffer[1]=0; |
m0dts | 14:ce9c322f95f2 | 491 | writestring(9,3,buffer); |
m0dts | 14:ce9c322f95f2 | 492 | } |
m0dts | 14:ce9c322f95f2 | 493 | if(Right){ |
m0dts | 14:ce9c322f95f2 | 494 | sprintf(buffer,"Az:% 06.1f",Azimuth); |
m0dts | 14:ce9c322f95f2 | 495 | writestring(0,3,buffer); |
m0dts | 14:ce9c322f95f2 | 496 | buffer[0]=126;//arrow right |
m0dts | 14:ce9c322f95f2 | 497 | buffer[1]=0; |
m0dts | 14:ce9c322f95f2 | 498 | writestring(9,3,buffer); |
m0dts | 14:ce9c322f95f2 | 499 | } |
m0dts | 14:ce9c322f95f2 | 500 | |
m0dts | 14:ce9c322f95f2 | 501 | if(!(Up|Down|Left|Right)){ |
m0dts | 14:ce9c322f95f2 | 502 | sprintf(buffer," "); |
m0dts | 14:ce9c322f95f2 | 503 | writestring(9,3,buffer); |
m0dts | 14:ce9c322f95f2 | 504 | writestring(19,3,buffer); |
m0dts | 14:ce9c322f95f2 | 505 | if(anytime){ |
m0dts | 14:ce9c322f95f2 | 506 | sprintf(buffer,"Az:% 06.1f",Azimuth); |
m0dts | 14:ce9c322f95f2 | 507 | writestring(0,3,buffer); |
m0dts | 14:ce9c322f95f2 | 508 | sprintf(buffer,"El:% 05.1f",Elevation); |
m0dts | 14:ce9c322f95f2 | 509 | writestring(11,3,buffer); |
m0dts | 14:ce9c322f95f2 | 510 | } |
m0dts | 14:ce9c322f95f2 | 511 | |
m0dts | 14:ce9c322f95f2 | 512 | if(Endstop_AZ|Endstop_EL){ |
m0dts | 14:ce9c322f95f2 | 513 | if(Endstop_AZ){ |
m0dts | 14:ce9c322f95f2 | 514 | sprintf(buffer,"L"); |
m0dts | 14:ce9c322f95f2 | 515 | writestring(9,3,buffer); |
m0dts | 14:ce9c322f95f2 | 516 | } |
m0dts | 14:ce9c322f95f2 | 517 | |
m0dts | 14:ce9c322f95f2 | 518 | if(Endstop_EL){ |
m0dts | 14:ce9c322f95f2 | 519 | sprintf(buffer,"L"); |
m0dts | 14:ce9c322f95f2 | 520 | writestring(19,3,buffer); |
m0dts | 14:ce9c322f95f2 | 521 | } |
m0dts | 14:ce9c322f95f2 | 522 | } |
m0dts | 14:ce9c322f95f2 | 523 | } |
m0dts | 14:ce9c322f95f2 | 524 | |
m0dts | 14:ce9c322f95f2 | 525 | |
m0dts | 14:ce9c322f95f2 | 526 | |
m0dts | 14:ce9c322f95f2 | 527 | } |
m0dts | 14:ce9c322f95f2 | 528 | |
m0dts | 14:ce9c322f95f2 | 529 | |
m0dts | 14:ce9c322f95f2 | 530 | //LCD routines *********************************************************************************************** |
m0dts | 14:ce9c322f95f2 | 531 | |
m0dts | 14:ce9c322f95f2 | 532 | void writeCommand(int command) { |
m0dts | 14:ce9c322f95f2 | 533 | pcf_lcd.write(rs_pin,0x00); |
m0dts | 14:ce9c322f95f2 | 534 | writeByte(command); |
m0dts | 14:ce9c322f95f2 | 535 | } |
m0dts | 14:ce9c322f95f2 | 536 | |
m0dts | 14:ce9c322f95f2 | 537 | void writeData(int data) { |
m0dts | 14:ce9c322f95f2 | 538 | pcf_lcd.write(rs_pin,0x01); |
m0dts | 14:ce9c322f95f2 | 539 | wait_us(10); |
m0dts | 14:ce9c322f95f2 | 540 | writeByte(data); |
m0dts | 14:ce9c322f95f2 | 541 | } |
m0dts | 14:ce9c322f95f2 | 542 | |
m0dts | 14:ce9c322f95f2 | 543 | void writeByte(int value) { |
m0dts | 14:ce9c322f95f2 | 544 | //send MSB 4 bits |
m0dts | 14:ce9c322f95f2 | 545 | write4bit(value>>4); |
m0dts | 14:ce9c322f95f2 | 546 | //send LSB 4 bits |
m0dts | 14:ce9c322f95f2 | 547 | write4bit(value); |
m0dts | 14:ce9c322f95f2 | 548 | } |
m0dts | 14:ce9c322f95f2 | 549 | |
m0dts | 14:ce9c322f95f2 | 550 | void writestring(int column, int row, string c) { |
m0dts | 14:ce9c322f95f2 | 551 | int a = address(column, row); |
m0dts | 14:ce9c322f95f2 | 552 | writeCommand(a); |
m0dts | 14:ce9c322f95f2 | 553 | for (int i = 0; c[i] != '\0'; i++){ |
m0dts | 14:ce9c322f95f2 | 554 | writeData(c[i]); |
m0dts | 14:ce9c322f95f2 | 555 | } |
m0dts | 14:ce9c322f95f2 | 556 | } |
m0dts | 14:ce9c322f95f2 | 557 | |
m0dts | 14:ce9c322f95f2 | 558 | void write4bit(int value) { |
m0dts | 14:ce9c322f95f2 | 559 | pcf_lcd.write(d7_pin,(value>>3)&0x01); |
m0dts | 14:ce9c322f95f2 | 560 | pcf_lcd.write(d6_pin,(value>>2)&0x01); |
m0dts | 14:ce9c322f95f2 | 561 | pcf_lcd.write(d5_pin,(value>>1)&0x01); |
m0dts | 14:ce9c322f95f2 | 562 | pcf_lcd.write(d4_pin,value&0x01); |
m0dts | 14:ce9c322f95f2 | 563 | wait_us(10); |
m0dts | 14:ce9c322f95f2 | 564 | pcf_lcd.write(e_pin,0x01); |
m0dts | 14:ce9c322f95f2 | 565 | wait_us(10); |
m0dts | 14:ce9c322f95f2 | 566 | pcf_lcd.write(e_pin,0x00); |
m0dts | 14:ce9c322f95f2 | 567 | } |
m0dts | 14:ce9c322f95f2 | 568 | |
m0dts | 14:ce9c322f95f2 | 569 | void cls() { |
m0dts | 14:ce9c322f95f2 | 570 | writeCommand(0x01); // cls, and set cursor to 0 |
m0dts | 14:ce9c322f95f2 | 571 | wait_ms(2); // This command takes 1.64 ms |
m0dts | 14:ce9c322f95f2 | 572 | locate(0, 0); |
m0dts | 14:ce9c322f95f2 | 573 | } |
m0dts | 14:ce9c322f95f2 | 574 | |
m0dts | 14:ce9c322f95f2 | 575 | void locate(int column, int row) { |
m0dts | 14:ce9c322f95f2 | 576 | _column = column; |
m0dts | 14:ce9c322f95f2 | 577 | _row = row; |
m0dts | 14:ce9c322f95f2 | 578 | } |
m0dts | 14:ce9c322f95f2 | 579 | |
m0dts | 14:ce9c322f95f2 | 580 | void init() { |
m0dts | 14:ce9c322f95f2 | 581 | //set default pin state for enable and reset |
m0dts | 14:ce9c322f95f2 | 582 | pcf_lcd.write(e_pin,0); |
m0dts | 14:ce9c322f95f2 | 583 | pcf_lcd.write(rs_pin,0); |
m0dts | 14:ce9c322f95f2 | 584 | |
m0dts | 14:ce9c322f95f2 | 585 | //Enter 4bit mode, write 2 twice |
m0dts | 14:ce9c322f95f2 | 586 | write4bit(0x2); //0010 |
m0dts | 14:ce9c322f95f2 | 587 | write4bit(0x2); //0010 |
m0dts | 14:ce9c322f95f2 | 588 | write4bit(0x8); //1000 english_japanese (default), 5x8 font, 2 line+ |
m0dts | 14:ce9c322f95f2 | 589 | wait_ms(10); |
m0dts | 14:ce9c322f95f2 | 590 | |
m0dts | 14:ce9c322f95f2 | 591 | //display off, cursor off, blink off |
m0dts | 14:ce9c322f95f2 | 592 | writeCommand(0x8); |
m0dts | 14:ce9c322f95f2 | 593 | wait_ms(1); |
m0dts | 14:ce9c322f95f2 | 594 | |
m0dts | 14:ce9c322f95f2 | 595 | //clear display |
m0dts | 14:ce9c322f95f2 | 596 | writeCommand(0x1); |
m0dts | 14:ce9c322f95f2 | 597 | wait_ms(1); |
m0dts | 14:ce9c322f95f2 | 598 | |
m0dts | 14:ce9c322f95f2 | 599 | //display home |
m0dts | 14:ce9c322f95f2 | 600 | writeCommand(0x2); |
m0dts | 14:ce9c322f95f2 | 601 | wait_ms(1); |
m0dts | 14:ce9c322f95f2 | 602 | |
m0dts | 14:ce9c322f95f2 | 603 | //increment, no shift |
m0dts | 14:ce9c322f95f2 | 604 | writeCommand(0x6); |
m0dts | 14:ce9c322f95f2 | 605 | wait_ms(1); |
m0dts | 14:ce9c322f95f2 | 606 | |
m0dts | 14:ce9c322f95f2 | 607 | //display on, cursor off, blink off |
m0dts | 14:ce9c322f95f2 | 608 | writeCommand(0x0c); |
m0dts | 14:ce9c322f95f2 | 609 | wait_ms(1); |
m0dts | 14:ce9c322f95f2 | 610 | |
m0dts | 14:ce9c322f95f2 | 611 | } |
m0dts | 14:ce9c322f95f2 | 612 | |
m0dts | 14:ce9c322f95f2 | 613 | void character(int column, int row, int c) { |
m0dts | 14:ce9c322f95f2 | 614 | int a = address(column, row); |
m0dts | 14:ce9c322f95f2 | 615 | writeCommand(a); |
m0dts | 14:ce9c322f95f2 | 616 | writeData(c);//data |
m0dts | 14:ce9c322f95f2 | 617 | } |
m0dts | 14:ce9c322f95f2 | 618 | |
m0dts | 14:ce9c322f95f2 | 619 | |
m0dts | 14:ce9c322f95f2 | 620 | |
m0dts | 14:ce9c322f95f2 | 621 | int address(int column, int row) { |
m0dts | 14:ce9c322f95f2 | 622 | switch (row) { |
m0dts | 14:ce9c322f95f2 | 623 | case 0: |
m0dts | 14:ce9c322f95f2 | 624 | return 0x80 + column; |
m0dts | 14:ce9c322f95f2 | 625 | case 1: |
m0dts | 14:ce9c322f95f2 | 626 | return 0xc0 + column; |
m0dts | 14:ce9c322f95f2 | 627 | case 2: |
m0dts | 14:ce9c322f95f2 | 628 | return 0x94 + column; |
m0dts | 14:ce9c322f95f2 | 629 | case 3: |
m0dts | 14:ce9c322f95f2 | 630 | return 0xd4 + column; |
m0dts | 14:ce9c322f95f2 | 631 | default: |
m0dts | 14:ce9c322f95f2 | 632 | return 0x80 + column; |
m0dts | 14:ce9c322f95f2 | 633 | } |
m0dts | 14:ce9c322f95f2 | 634 | } |
m0dts | 14:ce9c322f95f2 | 635 | |
m0dts | 14:ce9c322f95f2 | 636 | |
m0dts | 14:ce9c322f95f2 | 637 | |
m0dts | 14:ce9c322f95f2 | 638 | |
m0dts | 14:ce9c322f95f2 | 639 | |
m0dts | 14:ce9c322f95f2 | 640 |