DC Motor control using current time

Dependencies:   4DGL-uLCD-SE EthernetNetIf Motor NTPClient_NetServices mbed

Fork of Internet_Nokia_LCD_Clock by jim hamblen

Committer:
nturakhia
Date:
Mon Mar 24 15:05:00 2014 +0000
Revision:
3:dc6edb51a46e
Parent:
2:944077f530be
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:da7f4b6d2b7c 1 #include "mbed.h"
4180_1 0:da7f4b6d2b7c 2 #include "EthernetNetIf.h"
4180_1 0:da7f4b6d2b7c 3 #include "NTPClient.h"
nturakhia 1:ebe96d5a5825 4 #include "Motor.h"
nturakhia 1:ebe96d5a5825 5 #include "uLCD_4DGL.h"
nturakhia 1:ebe96d5a5825 6 #include<string>
nturakhia 1:ebe96d5a5825 7 #include<iostream>
nturakhia 1:ebe96d5a5825 8 #include<sstream>
nturakhia 1:ebe96d5a5825 9 using namespace std;
nturakhia 1:ebe96d5a5825 10
nturakhia 1:ebe96d5a5825 11 Serial pc(USBTX,USBRX);
nturakhia 1:ebe96d5a5825 12 Motor m(p22, p28, p21); // pwm, fwd, rev
nturakhia 1:ebe96d5a5825 13 DigitalIn pin_up(p13);
nturakhia 1:ebe96d5a5825 14 DigitalIn pin_down(p14);
nturakhia 1:ebe96d5a5825 15 DigitalIn pin_menu(p15);
nturakhia 1:ebe96d5a5825 16 DigitalIn pin_enter(p16);
nturakhia 1:ebe96d5a5825 17 uLCD_4DGL lcd(p9, p10, p11); // create a global lcd object
4180_1 0:da7f4b6d2b7c 18 // Internet of Things clock example: LCD time is set via internet NTP time server
4180_1 0:da7f4b6d2b7c 19 EthernetNetIf eth;
nturakhia 1:ebe96d5a5825 20 DigitalOut led(LED1);
4180_1 0:da7f4b6d2b7c 21 NTPClient ntp;
nturakhia 1:ebe96d5a5825 22 DigitalIn pin(p20);
4180_1 0:da7f4b6d2b7c 23
4180_1 0:da7f4b6d2b7c 24 int main() {
nturakhia 1:ebe96d5a5825 25 pc.printf("beginning");
nturakhia 1:ebe96d5a5825 26 m.speed(1);
nturakhia 1:ebe96d5a5825 27 pin_up.mode(PullUp);
nturakhia 1:ebe96d5a5825 28 pin_down.mode(PullUp);
nturakhia 1:ebe96d5a5825 29 pin_menu.mode(PullUp);
nturakhia 1:ebe96d5a5825 30 pin_enter.mode(PullUp);
nturakhia 1:ebe96d5a5825 31
4180_1 0:da7f4b6d2b7c 32 //system time structure
4180_1 0:da7f4b6d2b7c 33 time_t ctTime;
4180_1 0:da7f4b6d2b7c 34 char *time_str;
4180_1 0:da7f4b6d2b7c 35 //clear LCD
4180_1 0:da7f4b6d2b7c 36 lcd.cls();
4180_1 0:da7f4b6d2b7c 37 lcd.locate(0,2);
4180_1 0:da7f4b6d2b7c 38 // lcd.printf prints to LCD display;
4180_1 0:da7f4b6d2b7c 39 lcd.printf("Get IP addr...");
4180_1 0:da7f4b6d2b7c 40 EthernetErr ethErr = eth.setup();
4180_1 0:da7f4b6d2b7c 41 //Get an Internet IP address using DHCP
4180_1 0:da7f4b6d2b7c 42 if (ethErr) {
4180_1 0:da7f4b6d2b7c 43 //error or timeout getting an IP address
4180_1 0:da7f4b6d2b7c 44 lcd.cls();
4180_1 0:da7f4b6d2b7c 45 lcd.locate(0,2);
4180_1 0:da7f4b6d2b7c 46 lcd.printf("Net Error %d",ethErr);
4180_1 0:da7f4b6d2b7c 47 return -1;
4180_1 0:da7f4b6d2b7c 48 }
4180_1 0:da7f4b6d2b7c 49 lcd.locate(0,3);
4180_1 0:da7f4b6d2b7c 50 lcd.printf("Reading Time...");
4180_1 0:da7f4b6d2b7c 51 //specify time server URL
4180_1 0:da7f4b6d2b7c 52 Host server(IpAddr(), 123, "0.uk.pool.ntp.org");
4180_1 0:da7f4b6d2b7c 53 //Read time from server
4180_1 0:da7f4b6d2b7c 54 ntp.setTime(server);
4180_1 0:da7f4b6d2b7c 55 lcd.locate(0,4);
4180_1 0:da7f4b6d2b7c 56 lcd.printf("Time set");
4180_1 0:da7f4b6d2b7c 57 //Delay for human time to read LCD display
4180_1 0:da7f4b6d2b7c 58 wait(1);
nturakhia 1:ebe96d5a5825 59 float motor_speed=1.0;
nturakhia 1:ebe96d5a5825 60 int start_time_hr=14;
nturakhia 1:ebe96d5a5825 61 int start_time_min=0;
nturakhia 1:ebe96d5a5825 62 int end_time_hr=21;
nturakhia 1:ebe96d5a5825 63 int end_time_min=0;
4180_1 0:da7f4b6d2b7c 64 while (1) {
4180_1 0:da7f4b6d2b7c 65 // loop and periodically update the LCD's time display
nturakhia 1:ebe96d5a5825 66
nturakhia 1:ebe96d5a5825 67 if(pin_menu==0)
nturakhia 1:ebe96d5a5825 68 {
nturakhia 1:ebe96d5a5825 69 lcd.cls();
nturakhia 1:ebe96d5a5825 70 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 71 lcd.printf("Start time:\n%d hour ",start_time_hr);
nturakhia 1:ebe96d5a5825 72 while(1)
nturakhia 1:ebe96d5a5825 73 {
nturakhia 1:ebe96d5a5825 74 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 75 if(pin_up==0)
nturakhia 1:ebe96d5a5825 76 {
nturakhia 1:ebe96d5a5825 77
nturakhia 1:ebe96d5a5825 78 start_time_hr=(start_time_hr+1) % 24;
nturakhia 1:ebe96d5a5825 79 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 80 lcd.printf("%d hour ",start_time_hr);
nturakhia 1:ebe96d5a5825 81 wait(2);
nturakhia 1:ebe96d5a5825 82 }
nturakhia 1:ebe96d5a5825 83 else if(pin_down==0)
nturakhia 1:ebe96d5a5825 84 {
nturakhia 1:ebe96d5a5825 85 if(start_time_hr==0)
nturakhia 1:ebe96d5a5825 86 start_time_hr=23;
nturakhia 1:ebe96d5a5825 87 else
nturakhia 1:ebe96d5a5825 88 start_time_hr=(start_time_hr-1) % 24;
nturakhia 1:ebe96d5a5825 89 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 90 lcd.printf("%d hour ",start_time_hr);
nturakhia 1:ebe96d5a5825 91 wait(2);
nturakhia 1:ebe96d5a5825 92 }
nturakhia 1:ebe96d5a5825 93 else if(pin_enter==0)
nturakhia 1:ebe96d5a5825 94 {
nturakhia 1:ebe96d5a5825 95 wait(2);
nturakhia 1:ebe96d5a5825 96 break;
nturakhia 1:ebe96d5a5825 97 }
nturakhia 1:ebe96d5a5825 98 }
nturakhia 1:ebe96d5a5825 99 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 100 lcd.printf("%d min ",start_time_min);
nturakhia 1:ebe96d5a5825 101 while(1)
nturakhia 1:ebe96d5a5825 102 {
nturakhia 1:ebe96d5a5825 103 if(pin_up==0)
nturakhia 1:ebe96d5a5825 104 {
nturakhia 1:ebe96d5a5825 105 start_time_min=(start_time_min+1) % 60;
nturakhia 1:ebe96d5a5825 106 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 107 lcd.printf("%d min ",start_time_min);
nturakhia 1:ebe96d5a5825 108 wait(2);
nturakhia 1:ebe96d5a5825 109 }
nturakhia 1:ebe96d5a5825 110 else if(pin_down==0)
nturakhia 1:ebe96d5a5825 111 {
nturakhia 1:ebe96d5a5825 112 if(start_time_min==0)
nturakhia 1:ebe96d5a5825 113 start_time_min=59;
nturakhia 1:ebe96d5a5825 114 else
nturakhia 1:ebe96d5a5825 115 start_time_min=(start_time_min-1) % 60;
nturakhia 1:ebe96d5a5825 116 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 117 lcd.printf("%d min ",start_time_min);
nturakhia 1:ebe96d5a5825 118 wait(2);
nturakhia 1:ebe96d5a5825 119 }
nturakhia 1:ebe96d5a5825 120 else if(pin_enter==0)
nturakhia 1:ebe96d5a5825 121 {
nturakhia 1:ebe96d5a5825 122 wait(2);
nturakhia 1:ebe96d5a5825 123 break;
nturakhia 1:ebe96d5a5825 124 }
nturakhia 1:ebe96d5a5825 125 }
nturakhia 1:ebe96d5a5825 126 lcd.cls();
nturakhia 1:ebe96d5a5825 127 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 128 lcd.printf("End time:\n%d hour",end_time_hr);
nturakhia 1:ebe96d5a5825 129 while(1)
nturakhia 1:ebe96d5a5825 130 {
nturakhia 1:ebe96d5a5825 131 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 132 if(pin_up==0)
nturakhia 1:ebe96d5a5825 133 {
nturakhia 1:ebe96d5a5825 134 end_time_hr=(end_time_hr+1) % 24;
nturakhia 1:ebe96d5a5825 135 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 136 lcd.printf("%d hour ",end_time_hr);
nturakhia 1:ebe96d5a5825 137 wait(2);
nturakhia 1:ebe96d5a5825 138 }
nturakhia 1:ebe96d5a5825 139 else if(pin_down==0)
nturakhia 1:ebe96d5a5825 140 {
nturakhia 1:ebe96d5a5825 141 if(end_time_hr==0)
nturakhia 1:ebe96d5a5825 142 end_time_hr=23;
nturakhia 1:ebe96d5a5825 143 else
nturakhia 1:ebe96d5a5825 144 end_time_hr=(end_time_hr-1) % 24;
nturakhia 1:ebe96d5a5825 145 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 146 lcd.printf("%d hour ",end_time_hr);
nturakhia 1:ebe96d5a5825 147 wait(2);
nturakhia 1:ebe96d5a5825 148 }
nturakhia 1:ebe96d5a5825 149 else if(pin_enter==0)
nturakhia 1:ebe96d5a5825 150 {
nturakhia 1:ebe96d5a5825 151 wait(2);
nturakhia 1:ebe96d5a5825 152 break;
nturakhia 1:ebe96d5a5825 153 }
nturakhia 1:ebe96d5a5825 154 }
nturakhia 1:ebe96d5a5825 155 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 156 lcd.printf("%d min ",end_time_min);
nturakhia 1:ebe96d5a5825 157 while(1)
nturakhia 1:ebe96d5a5825 158 {
nturakhia 1:ebe96d5a5825 159 if(pin_up==0)
nturakhia 1:ebe96d5a5825 160 {
nturakhia 1:ebe96d5a5825 161 end_time_min=(end_time_min+1) % 60;
nturakhia 1:ebe96d5a5825 162 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 163 lcd.printf("%d min ",end_time_min);
nturakhia 1:ebe96d5a5825 164 wait(2);
nturakhia 1:ebe96d5a5825 165 }
nturakhia 1:ebe96d5a5825 166 else if(pin_down==0)
nturakhia 1:ebe96d5a5825 167 {
nturakhia 1:ebe96d5a5825 168 if(end_time_min==0)
nturakhia 1:ebe96d5a5825 169 end_time_min=59;
nturakhia 1:ebe96d5a5825 170 else
nturakhia 1:ebe96d5a5825 171 end_time_min=(end_time_min-1) % 60;
nturakhia 1:ebe96d5a5825 172 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 173 lcd.printf("%d min ",end_time_min);
nturakhia 1:ebe96d5a5825 174 wait(2);
nturakhia 1:ebe96d5a5825 175 }
nturakhia 1:ebe96d5a5825 176 else if(pin_enter==0)
nturakhia 1:ebe96d5a5825 177 {
nturakhia 1:ebe96d5a5825 178 wait(2);
nturakhia 1:ebe96d5a5825 179 break;
nturakhia 1:ebe96d5a5825 180 }
nturakhia 1:ebe96d5a5825 181 }
nturakhia 1:ebe96d5a5825 182 lcd.cls();
nturakhia 1:ebe96d5a5825 183 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 184 lcd.printf("Motor speed: \n%2.1f (normalized)",motor_speed);
nturakhia 1:ebe96d5a5825 185 while(1)
nturakhia 1:ebe96d5a5825 186 {
nturakhia 1:ebe96d5a5825 187 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 188 if(pin_up==0)
nturakhia 1:ebe96d5a5825 189 {
nturakhia 1:ebe96d5a5825 190 if(motor_speed==1.0)
nturakhia 1:ebe96d5a5825 191 motor_speed=1.0;
nturakhia 1:ebe96d5a5825 192 else
nturakhia 1:ebe96d5a5825 193 motor_speed=motor_speed+0.1;
nturakhia 1:ebe96d5a5825 194
nturakhia 1:ebe96d5a5825 195 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 196 lcd.printf("%2.1f (normalized)",motor_speed);
nturakhia 1:ebe96d5a5825 197 wait(2);
nturakhia 1:ebe96d5a5825 198 }
nturakhia 1:ebe96d5a5825 199 else if(pin_down==0)
nturakhia 1:ebe96d5a5825 200 {
nturakhia 1:ebe96d5a5825 201 if(motor_speed==0.0)
nturakhia 1:ebe96d5a5825 202 motor_speed=0.0;
nturakhia 1:ebe96d5a5825 203 else
nturakhia 1:ebe96d5a5825 204 motor_speed=motor_speed-0.1;
nturakhia 1:ebe96d5a5825 205
nturakhia 1:ebe96d5a5825 206 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 207 lcd.printf("%2.1f (normalized)",motor_speed);
nturakhia 1:ebe96d5a5825 208 wait(2);
nturakhia 1:ebe96d5a5825 209 }
nturakhia 1:ebe96d5a5825 210 else if(pin_enter==0)
nturakhia 1:ebe96d5a5825 211 {
nturakhia 1:ebe96d5a5825 212 wait(2);
nturakhia 1:ebe96d5a5825 213 break;
nturakhia 1:ebe96d5a5825 214 }
nturakhia 1:ebe96d5a5825 215 }
nturakhia 1:ebe96d5a5825 216 }
nturakhia 1:ebe96d5a5825 217
nturakhia 1:ebe96d5a5825 218
nturakhia 1:ebe96d5a5825 219 led=pin;
4180_1 0:da7f4b6d2b7c 220 lcd.cls();
4180_1 0:da7f4b6d2b7c 221 ctTime = time(NULL);
4180_1 0:da7f4b6d2b7c 222 lcd.locate(0,1);
nturakhia 1:ebe96d5a5825 223 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 224 lcd.printf("Current time(UTC):");
nturakhia 1:ebe96d5a5825 225 lcd.color(GREEN);
4180_1 0:da7f4b6d2b7c 226 lcd.locate(0,3);
4180_1 0:da7f4b6d2b7c 227 time_str = ctime(&ctTime);
4180_1 0:da7f4b6d2b7c 228 time_str[strlen(time_str)-1] = 0;
nturakhia 1:ebe96d5a5825 229 lcd.printf("%s\n", time_str);
nturakhia 1:ebe96d5a5825 230 string s(time_str);
nturakhia 1:ebe96d5a5825 231 int ind=s.find(":");
nturakhia 1:ebe96d5a5825 232 char* bh;
nturakhia 1:ebe96d5a5825 233 bh[0]=s[ind-2];
nturakhia 1:ebe96d5a5825 234 bh[1]=s[ind-1];
nturakhia 1:ebe96d5a5825 235 bh[2]=0;
nturakhia 1:ebe96d5a5825 236 int hour=atoi(bh);
nturakhia 1:ebe96d5a5825 237 char* b;
nturakhia 1:ebe96d5a5825 238 b[0]=s[ind+1];
nturakhia 1:ebe96d5a5825 239 b[1]=s[ind+2];
nturakhia 1:ebe96d5a5825 240 b[2]=0;
nturakhia 1:ebe96d5a5825 241 int min=atoi(b);
nturakhia 1:ebe96d5a5825 242 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 243 lcd.printf("\nMotor run time:\n");
nturakhia 1:ebe96d5a5825 244 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 245 lcd.printf("%d:%d to %d:%d (UTC)\n \n",start_time_hr,start_time_min,end_time_hr,end_time_min);
nturakhia 1:ebe96d5a5825 246 time(&ctTime);
nturakhia 1:ebe96d5a5825 247 struct tm *tmp = gmtime(&ctTime);
nturakhia 1:ebe96d5a5825 248 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 249 pc.printf("hour: %d min: %d",hour,min);
nturakhia 1:ebe96d5a5825 250 if((hour>start_time_hr && hour<end_time_hr))
nturakhia 1:ebe96d5a5825 251 {
nturakhia 1:ebe96d5a5825 252 m.speed(motor_speed);
nturakhia 1:ebe96d5a5825 253 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 254 lcd.printf("Motor running \n");
nturakhia 1:ebe96d5a5825 255 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 256 lcd.printf("Speed=%2.1f\n",motor_speed);
nturakhia 1:ebe96d5a5825 257 }
nturakhia 1:ebe96d5a5825 258 else if((hour==start_time_hr && hour==end_time_hr && min>=start_time_min && min<=end_time_min))
nturakhia 1:ebe96d5a5825 259 {
nturakhia 1:ebe96d5a5825 260 m.speed(motor_speed);
nturakhia 1:ebe96d5a5825 261 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 262 lcd.printf("Motor running \n");
nturakhia 1:ebe96d5a5825 263 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 264 lcd.printf("Speed=%2.1f\n",motor_speed);
nturakhia 1:ebe96d5a5825 265 }
nturakhia 1:ebe96d5a5825 266 else if(hour==start_time_hr && hour<end_time_hr && min>=start_time_min)
nturakhia 1:ebe96d5a5825 267 {
nturakhia 1:ebe96d5a5825 268 m.speed(motor_speed);
nturakhia 1:ebe96d5a5825 269 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 270 lcd.printf("Motor running \n");
nturakhia 1:ebe96d5a5825 271 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 272 lcd.printf("Speed=%2.1f\n",motor_speed);
nturakhia 1:ebe96d5a5825 273 }
nturakhia 1:ebe96d5a5825 274 else if(hour==end_time_hr && hour>start_time_hr && min<=end_time_min)
nturakhia 1:ebe96d5a5825 275 {
nturakhia 1:ebe96d5a5825 276 m.speed(motor_speed);
nturakhia 1:ebe96d5a5825 277 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 278 lcd.printf("Motor running \n");
nturakhia 1:ebe96d5a5825 279 lcd.color(GREEN);
nturakhia 1:ebe96d5a5825 280 lcd.printf("Speed=%2.1f\n",motor_speed);
nturakhia 1:ebe96d5a5825 281 }
nturakhia 1:ebe96d5a5825 282 else
nturakhia 1:ebe96d5a5825 283 {
nturakhia 1:ebe96d5a5825 284 m.speed(0);
nturakhia 1:ebe96d5a5825 285 lcd.color(LGREY);
nturakhia 1:ebe96d5a5825 286 lcd.printf("Motor stopped\n");
nturakhia 1:ebe96d5a5825 287
nturakhia 1:ebe96d5a5825 288 }
nturakhia 1:ebe96d5a5825 289
nturakhia 1:ebe96d5a5825 290 wait(5);
4180_1 0:da7f4b6d2b7c 291 }
4180_1 0:da7f4b6d2b7c 292 }