JNP3 SmartAlarm / Mbed 2 deprecated budzik

Dependencies:   TextLCD nRF24L01P mbed

Committer:
jackmax
Date:
Tue Dec 20 10:47:22 2016 +0000
Revision:
6:19012a85ce35
Child:
8:0de75e0480aa
gdffhdhg

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jackmax 6:19012a85ce35 1 #include "mbed.h"
jackmax 6:19012a85ce35 2 #include "rtos.h"
jackmax 6:19012a85ce35 3 #include "TextLCD.h"
jackmax 6:19012a85ce35 4 #include "custom-chars.h"
jackmax 6:19012a85ce35 5
jackmax 6:19012a85ce35 6 // Host PC Communication channels
jackmax 6:19012a85ce35 7 Serial pc(USBTX, USBRX); // tx, rx
jackmax 6:19012a85ce35 8
jackmax 6:19012a85ce35 9 I2C i2c_lcd(D5,D7); // SDA, SCL pins. Change if necessary
jackmax 6:19012a85ce35 10 TextLCD_I2C lcd(&i2c_lcd, 0x4E, TextLCD::LCD16x2); // I2C exp: I2C bus, PCF8574 Slaveaddress, LCD Type
jackmax 6:19012a85ce35 11
jackmax 6:19012a85ce35 12 //Light sensor
jackmax 6:19012a85ce35 13 AnalogIn light_sensor(A1);
jackmax 6:19012a85ce35 14
jackmax 6:19012a85ce35 15 void backlightTimeout(void const *arg);
jackmax 6:19012a85ce35 16 RtosTimer backlightTimer(&backlightTimeout, osTimerPeriodic, (void*)0);
jackmax 6:19012a85ce35 17
jackmax 6:19012a85ce35 18 class Display{
jackmax 6:19012a85ce35 19 public:
jackmax 6:19012a85ce35 20 int wifi_on;
jackmax 6:19012a85ce35 21 int alarm_on;
jackmax 6:19012a85ce35 22 int sync_in_progress;
jackmax 6:19012a85ce35 23 int wireless_in_progress;
jackmax 6:19012a85ce35 24 int frame;
jackmax 6:19012a85ce35 25
jackmax 6:19012a85ce35 26 time_t seconds;
jackmax 6:19012a85ce35 27 char time_str[9];
jackmax 6:19012a85ce35 28 char date_str[9];
jackmax 6:19012a85ce35 29
jackmax 6:19012a85ce35 30 static const int backlightTime = 5000;
jackmax 6:19012a85ce35 31 int backlightState;
jackmax 6:19012a85ce35 32 Display()
jackmax 6:19012a85ce35 33 {
jackmax 6:19012a85ce35 34 wifi_on = 0;
jackmax 6:19012a85ce35 35 alarm_on = 0;
jackmax 6:19012a85ce35 36 sync_in_progress = 0;
jackmax 6:19012a85ce35 37 wireless_in_progress = 0;
jackmax 6:19012a85ce35 38 frame = 0;
jackmax 6:19012a85ce35 39 backlightState = 0;
jackmax 6:19012a85ce35 40
jackmax 6:19012a85ce35 41 lcd.setCursor(TextLCD::CurOff_BlkOff);
jackmax 6:19012a85ce35 42 lcd.setUDC(C_ALRM, cc_dzwonek);
jackmax 6:19012a85ce35 43 lcd.setUDC(C_WIFI, cc_wifi);
jackmax 6:19012a85ce35 44 lcd.setUDC(C_WLC , cc_wireless);
jackmax 6:19012a85ce35 45 }
jackmax 6:19012a85ce35 46
jackmax 6:19012a85ce35 47 void backlightOff(){
jackmax 6:19012a85ce35 48 lcd.setBacklight(TextLCD::LightOff);
jackmax 6:19012a85ce35 49 backlightState = 0;
jackmax 6:19012a85ce35 50 }
jackmax 6:19012a85ce35 51
jackmax 6:19012a85ce35 52 void backlightOn(){
jackmax 6:19012a85ce35 53 lcd.setBacklight(TextLCD::LightOn);
jackmax 6:19012a85ce35 54 backlightState = 1;
jackmax 6:19012a85ce35 55 backlightTimer.start(backlightTime);
jackmax 6:19012a85ce35 56 }
jackmax 6:19012a85ce35 57
jackmax 6:19012a85ce35 58 void update(){
jackmax 6:19012a85ce35 59 //Top row of display
jackmax 6:19012a85ce35 60 char ico1 = ' ';
jackmax 6:19012a85ce35 61 char ico2 = wireless_in_progress ? (frame % 2 ? C_WLC : ' ' ) : ' ';
jackmax 6:19012a85ce35 62 char ico3 = C_ALRM;
jackmax 6:19012a85ce35 63 int ah=85, am=84;
jackmax 6:19012a85ce35 64
jackmax 6:19012a85ce35 65 time_t seconds_now = time(NULL);
jackmax 6:19012a85ce35 66 if (seconds_now != seconds) {
jackmax 6:19012a85ce35 67 seconds = seconds_now;
jackmax 6:19012a85ce35 68 strftime(time_str, 9, "%X", localtime(&seconds));
jackmax 6:19012a85ce35 69 strftime(date_str, 9, "%x", localtime(&seconds));
jackmax 6:19012a85ce35 70 }
jackmax 6:19012a85ce35 71
jackmax 6:19012a85ce35 72 lcd.locate(0,0); //Put in top row
jackmax 6:19012a85ce35 73 lcd.printf("%s%c%c%c%02d:%02d",time_str,ico1,ico2,ico3,ah,am);
jackmax 6:19012a85ce35 74
jackmax 6:19012a85ce35 75 lcd.locate(0,1); //Put in bottom row
jackmax 6:19012a85ce35 76 if (sync_in_progress) {
jackmax 6:19012a85ce35 77 lcd.printf("Synchronizacja..");
jackmax 6:19012a85ce35 78 }
jackmax 6:19012a85ce35 79 else {
jackmax 6:19012a85ce35 80 if (frame % 60 < 30) {
jackmax 6:19012a85ce35 81 lcd.printf("SmartAlarm+ Pro ");
jackmax 6:19012a85ce35 82 }
jackmax 6:19012a85ce35 83 else {
jackmax 6:19012a85ce35 84 lcd.printf(" %08s ", date_str);
jackmax 6:19012a85ce35 85 }
jackmax 6:19012a85ce35 86 }
jackmax 6:19012a85ce35 87 frame++;
jackmax 6:19012a85ce35 88 }
jackmax 6:19012a85ce35 89 };
jackmax 6:19012a85ce35 90
jackmax 6:19012a85ce35 91 Display disp;
jackmax 6:19012a85ce35 92
jackmax 6:19012a85ce35 93 //Handling user button presses
jackmax 6:19012a85ce35 94 InterruptIn button(D6);
jackmax 6:19012a85ce35 95 int userButtonLongPress = 300; //Time in ms; threshold for long press
jackmax 6:19012a85ce35 96 Timer userButtonTimer;
jackmax 6:19012a85ce35 97
jackmax 6:19012a85ce35 98 int userButtonPressed = 0, userButtonReleased = 0, backlightTimedOut = 0;
jackmax 6:19012a85ce35 99
jackmax 6:19012a85ce35 100 void userButtonPress(){
jackmax 6:19012a85ce35 101 userButtonPressed = 1;
jackmax 6:19012a85ce35 102 }
jackmax 6:19012a85ce35 103
jackmax 6:19012a85ce35 104 void userButtonRelease(){
jackmax 6:19012a85ce35 105 userButtonReleased = 1;
jackmax 6:19012a85ce35 106 }
jackmax 6:19012a85ce35 107
jackmax 6:19012a85ce35 108 void backlightTimeout(void const *arg){
jackmax 6:19012a85ce35 109 backlightTimedOut = 1;
jackmax 6:19012a85ce35 110 }
jackmax 6:19012a85ce35 111
jackmax 6:19012a85ce35 112 Ticker display_update_ticker;
jackmax 6:19012a85ce35 113 int main() {
jackmax 6:19012a85ce35 114 set_time(1256729737); //DEBUG: Set RTC time to Wed, 28 Oct 2009 11:35:37
jackmax 6:19012a85ce35 115 //Initialization
jackmax 6:19012a85ce35 116 disp.backlightOn();
jackmax 6:19012a85ce35 117 //display_update_ticker.attach(&display_update,0.2);
jackmax 6:19012a85ce35 118 button.rise(&userButtonPress);
jackmax 6:19012a85ce35 119 button.fall(&userButtonRelease);
jackmax 6:19012a85ce35 120
jackmax 6:19012a85ce35 121 while (1){
jackmax 6:19012a85ce35 122 pc.printf("ok\r\n");
jackmax 6:19012a85ce35 123
jackmax 6:19012a85ce35 124 if (userButtonPressed) {
jackmax 6:19012a85ce35 125 userButtonPressed = 0;
jackmax 6:19012a85ce35 126 userButtonTimer.reset();
jackmax 6:19012a85ce35 127 userButtonTimer.start();
jackmax 6:19012a85ce35 128 }
jackmax 6:19012a85ce35 129
jackmax 6:19012a85ce35 130 if (userButtonReleased) {
jackmax 6:19012a85ce35 131 userButtonReleased = 0;
jackmax 6:19012a85ce35 132 userButtonTimer.stop();
jackmax 6:19012a85ce35 133 if (userButtonTimer.read_ms() > userButtonLongPress){
jackmax 6:19012a85ce35 134 pc.printf("User button long pressed");
jackmax 6:19012a85ce35 135 disp.backlightOff();
jackmax 6:19012a85ce35 136 }
jackmax 6:19012a85ce35 137 else {
jackmax 6:19012a85ce35 138 pc.printf("User button short pressed");
jackmax 6:19012a85ce35 139 disp.backlightOn();
jackmax 6:19012a85ce35 140 }
jackmax 6:19012a85ce35 141 }
jackmax 6:19012a85ce35 142
jackmax 6:19012a85ce35 143 if (backlightTimedOut){
jackmax 6:19012a85ce35 144 backlightTimedOut = 0;
jackmax 6:19012a85ce35 145 disp.backlightOff();
jackmax 6:19012a85ce35 146 }
jackmax 6:19012a85ce35 147
jackmax 6:19012a85ce35 148 disp.update();
jackmax 6:19012a85ce35 149 Thread::wait(100);
jackmax 6:19012a85ce35 150 };
jackmax 6:19012a85ce35 151 }
jackmax 6:19012a85ce35 152
jackmax 6:19012a85ce35 153
jackmax 6:19012a85ce35 154