modifications to original autoblindscontroller
Fork of AutoBlindsController by
main.cpp@1:3fa00a470e50, 2013-10-17 (annotated)
- Committer:
- nparham3
- Date:
- Thu Oct 17 17:35:45 2013 +0000
- Revision:
- 1:3fa00a470e50
- Parent:
- 0:cf0ddcf40339
Made slight aesthetic modifications to fix LCD floating point and add labels. Continuing to work on real-time systems with ethernet.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mmujica6 | 0:cf0ddcf40339 | 1 | // Sweep the motor speed from full-speed reverse (-1.0) to full speed forwards (1.0) |
mmujica6 | 0:cf0ddcf40339 | 2 | |
mmujica6 | 0:cf0ddcf40339 | 3 | #include "mbed.h" |
mmujica6 | 0:cf0ddcf40339 | 4 | #include "Motor.h" |
mmujica6 | 0:cf0ddcf40339 | 5 | #include "TextLCD.h" |
mmujica6 | 0:cf0ddcf40339 | 6 | |
mmujica6 | 0:cf0ddcf40339 | 7 | Motor m(p21, p23, p28); // pwm, fwd, rev |
mmujica6 | 0:cf0ddcf40339 | 8 | DigitalOut led(LED1); |
nparham3 | 1:3fa00a470e50 | 9 | DigitalOut test(LED2); |
mmujica6 | 0:cf0ddcf40339 | 10 | TextLCD lcd(p14, p16, p17, p18, p19, p20, TextLCD::LCD20x4); // rs, e, d4-d7 |
mmujica6 | 0:cf0ddcf40339 | 11 | DigitalOut high(p22); |
mmujica6 | 0:cf0ddcf40339 | 12 | DigitalIn pb(p6); |
mmujica6 | 0:cf0ddcf40339 | 13 | DigitalOut high2(p29); |
mmujica6 | 0:cf0ddcf40339 | 14 | AnalogIn slider(p15); |
mmujica6 | 0:cf0ddcf40339 | 15 | Serial pc(USBTX, USBRX); |
mmujica6 | 0:cf0ddcf40339 | 16 | void open(); |
mmujica6 | 0:cf0ddcf40339 | 17 | void close(); |
mmujica6 | 0:cf0ddcf40339 | 18 | void printTime(double); |
mmujica6 | 0:cf0ddcf40339 | 19 | int state; |
mmujica6 | 0:cf0ddcf40339 | 20 | char buffer[32]; |
mmujica6 | 0:cf0ddcf40339 | 21 | time_t seconds; |
mmujica6 | 0:cf0ddcf40339 | 22 | double setTime; |
mmujica6 | 0:cf0ddcf40339 | 23 | struct tm* timeInfo; |
mmujica6 | 0:cf0ddcf40339 | 24 | |
mmujica6 | 0:cf0ddcf40339 | 25 | int main() { |
mmujica6 | 0:cf0ddcf40339 | 26 | set_time( 702000900 ); |
mmujica6 | 0:cf0ddcf40339 | 27 | state = 1; //Start with blinds closed (0 is open) |
mmujica6 | 0:cf0ddcf40339 | 28 | pb.mode(PullUp); |
mmujica6 | 0:cf0ddcf40339 | 29 | int lastPb = pb; |
mmujica6 | 0:cf0ddcf40339 | 30 | lcd.cls(); |
mmujica6 | 0:cf0ddcf40339 | 31 | wait(1); |
mmujica6 | 0:cf0ddcf40339 | 32 | while (1){ |
mmujica6 | 0:cf0ddcf40339 | 33 | seconds = time(NULL); |
nparham3 | 1:3fa00a470e50 | 34 | if (abs(slider.read()-setTime)>.006){ // <-- this is the line of percision |
nparham3 | 1:3fa00a470e50 | 35 | setTime = slider.read(); |
mmujica6 | 0:cf0ddcf40339 | 36 | } |
mmujica6 | 0:cf0ddcf40339 | 37 | printTime(setTime); |
nparham3 | 1:3fa00a470e50 | 38 | |
nparham3 | 1:3fa00a470e50 | 39 | pc.printf("%f \n", slider.read()); |
nparham3 | 1:3fa00a470e50 | 40 | high = 1; //seems unused |
nparham3 | 1:3fa00a470e50 | 41 | high2 = 1; //seems unused |
nparham3 | 1:3fa00a470e50 | 42 | if (!pb){ |
mmujica6 | 0:cf0ddcf40339 | 43 | if (state == 1){ |
mmujica6 | 0:cf0ddcf40339 | 44 | open(); |
mmujica6 | 0:cf0ddcf40339 | 45 | led = 1; |
mmujica6 | 0:cf0ddcf40339 | 46 | pc.printf("open"); |
mmujica6 | 0:cf0ddcf40339 | 47 | } |
mmujica6 | 0:cf0ddcf40339 | 48 | else { |
mmujica6 | 0:cf0ddcf40339 | 49 | close(); |
mmujica6 | 0:cf0ddcf40339 | 50 | led = 0; |
mmujica6 | 0:cf0ddcf40339 | 51 | pc.printf("close"); |
mmujica6 | 0:cf0ddcf40339 | 52 | } |
mmujica6 | 0:cf0ddcf40339 | 53 | } |
mmujica6 | 0:cf0ddcf40339 | 54 | m.speed(0); |
mmujica6 | 0:cf0ddcf40339 | 55 | wait(.2); |
mmujica6 | 0:cf0ddcf40339 | 56 | } |
mmujica6 | 0:cf0ddcf40339 | 57 | } |
mmujica6 | 0:cf0ddcf40339 | 58 | |
mmujica6 | 0:cf0ddcf40339 | 59 | void open() { |
mmujica6 | 0:cf0ddcf40339 | 60 | m.speed(-1); |
nparham3 | 1:3fa00a470e50 | 61 | test = 1; // for testing purposes, the system should be running |
mmujica6 | 0:cf0ddcf40339 | 62 | wait(2.6); |
nparham3 | 1:3fa00a470e50 | 63 | test = 0; |
mmujica6 | 0:cf0ddcf40339 | 64 | state = 0; |
mmujica6 | 0:cf0ddcf40339 | 65 | } |
mmujica6 | 0:cf0ddcf40339 | 66 | |
mmujica6 | 0:cf0ddcf40339 | 67 | void close() { |
mmujica6 | 0:cf0ddcf40339 | 68 | m.speed(1); |
mmujica6 | 0:cf0ddcf40339 | 69 | wait(2.6); |
mmujica6 | 0:cf0ddcf40339 | 70 | state = 1; |
mmujica6 | 0:cf0ddcf40339 | 71 | } |
mmujica6 | 0:cf0ddcf40339 | 72 | |
mmujica6 | 0:cf0ddcf40339 | 73 | // Takes analog input from 0 to 1 and displays a time based on that |
mmujica6 | 0:cf0ddcf40339 | 74 | void printTime(double in) { |
mmujica6 | 0:cf0ddcf40339 | 75 | int totMins = in*1440; //maps to integer based on mins in a day |
mmujica6 | 0:cf0ddcf40339 | 76 | int hrs = totMins/60; |
mmujica6 | 0:cf0ddcf40339 | 77 | int mins = totMins%60; |
mmujica6 | 0:cf0ddcf40339 | 78 | timeInfo = localtime(&seconds); |
mmujica6 | 0:cf0ddcf40339 | 79 | lcd.locate(0,0); |
nparham3 | 1:3fa00a470e50 | 80 | lcd.printf("time: %2.2d:%2.2d",timeInfo->tm_hour,timeInfo->tm_min); // added percision to make it more like a clock HH:MM |
mmujica6 | 0:cf0ddcf40339 | 81 | lcd.locate(0,1); |
nparham3 | 1:3fa00a470e50 | 82 | lcd.printf("start: %2.2d:%2.2d",hrs,mins); |
mmujica6 | 0:cf0ddcf40339 | 83 | if ((state == 1) && (hrs == timeInfo->tm_hour) && (mins == timeInfo->tm_min)){ |
mmujica6 | 0:cf0ddcf40339 | 84 | open(); |
mmujica6 | 0:cf0ddcf40339 | 85 | } |
mmujica6 | 0:cf0ddcf40339 | 86 | } |