A smart alarm that combines flashlights and games to makes you wake up happily!

Dependencies:   Servo DigitDisplay-another HC-SR04-another buzzer TM1637

Committer:
yungsung
Date:
Thu Jan 09 19:24:53 2020 +0000
Revision:
1:074829331740
Parent:
0:fcd980d5ee5f
A smart alarm that combines flashlights and games to makes you wake up happily!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yungsung 0:fcd980d5ee5f 1 /* mbed Microcontroller Library
yungsung 0:fcd980d5ee5f 2 * Copyright (c) 2006-2013 ARM Limited
yungsung 0:fcd980d5ee5f 3 *
yungsung 0:fcd980d5ee5f 4 * Licensed under the Apache License, Version 2.0 (the "License");
yungsung 0:fcd980d5ee5f 5 * you may not use this file except in compliance with the License.
yungsung 0:fcd980d5ee5f 6 * You may obtain a copy of the License at
yungsung 0:fcd980d5ee5f 7 *
yungsung 0:fcd980d5ee5f 8 * http://www.apache.org/licenses/LICENSE-2.0
yungsung 0:fcd980d5ee5f 9 *
yungsung 0:fcd980d5ee5f 10 * Unless required by applicable law or agreed to in writing, software
yungsung 0:fcd980d5ee5f 11 * distributed under the License is distributed on an "AS IS" BASIS,
yungsung 0:fcd980d5ee5f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
yungsung 0:fcd980d5ee5f 13 * See the License for the specific language governing permissions and
yungsung 0:fcd980d5ee5f 14 * limitations under the License.
yungsung 0:fcd980d5ee5f 15 */
yungsung 0:fcd980d5ee5f 16
yungsung 0:fcd980d5ee5f 17 #include <events/mbed_events.h>
yungsung 0:fcd980d5ee5f 18 #include <mbed.h>
yungsung 0:fcd980d5ee5f 19 #include "ble/BLE.h"
yungsung 0:fcd980d5ee5f 20 #include "LEDService.h"
yungsung 0:fcd980d5ee5f 21
yungsung 0:fcd980d5ee5f 22 #include "Servo.h"
yungsung 0:fcd980d5ee5f 23 #include "buzzer.h"
yungsung 0:fcd980d5ee5f 24 #include "HCSR04.h"
yungsung 0:fcd980d5ee5f 25 #include "TM1637.h"
yungsung 0:fcd980d5ee5f 26
yungsung 0:fcd980d5ee5f 27 #define CLK PA_15 // D9
yungsung 0:fcd980d5ee5f 28 #define DIO PB_2 // D8
yungsung 0:fcd980d5ee5f 29 #define ledPin PA_4 // D7
yungsung 0:fcd980d5ee5f 30 #define laserPin PA_3 // D4
yungsung 0:fcd980d5ee5f 31 #define SERVO_PIN PD_14 // D2
yungsung 0:fcd980d5ee5f 32 #define buzzerPin PA_2 // D10
yungsung 0:fcd980d5ee5f 33 #define trigPin PB_4 // D5
yungsung 0:fcd980d5ee5f 34 #define echoPin PB_1 // D6
yungsung 0:fcd980d5ee5f 35 #define CDSPin A0 // light sensor in pin A0
yungsung 0:fcd980d5ee5f 36
yungsung 0:fcd980d5ee5f 37 DigitalOut alivenessLED(LED1, 0);
yungsung 0:fcd980d5ee5f 38 DigitalOut actuatedLED(LED2, 0);
yungsung 0:fcd980d5ee5f 39 Serial pc(USBTX, USBRX);
yungsung 0:fcd980d5ee5f 40 Beep buzzer(buzzerPin);
yungsung 0:fcd980d5ee5f 41 HCSR04 sonar(trigPin, echoPin);
yungsung 0:fcd980d5ee5f 42
yungsung 0:fcd980d5ee5f 43 // Setup: Pin Mode In/Out
yungsung 0:fcd980d5ee5f 44 DigitalOut myled(LED1);
yungsung 0:fcd980d5ee5f 45 DigitalOut out_led(PA_4);
yungsung 0:fcd980d5ee5f 46 DigitalOut out_laser(PA_3);
yungsung 0:fcd980d5ee5f 47 PwmOut servoVer(SERVO_PIN);
yungsung 0:fcd980d5ee5f 48 AnalogIn light_sensor(CDSPin);
yungsung 0:fcd980d5ee5f 49
yungsung 0:fcd980d5ee5f 50 //DisplayData_t size is 6 bytes (6 grids @ 8 segments)
yungsung 0:fcd980d5ee5f 51 char digits[] = {63,6,91,79,102,109,125,7,127,111};
yungsung 0:fcd980d5ee5f 52 char numdigits[4];
yungsung 0:fcd980d5ee5f 53
yungsung 0:fcd980d5ee5f 54 TM1637::DisplayData_t all_str = {0xFF, 0xFF, 0xFF, 0xFF};
yungsung 0:fcd980d5ee5f 55 TM1637::DisplayData_t data_bits = {0xFF, 0xFF, 0xFF, 0xFF};
yungsung 0:fcd980d5ee5f 56
yungsung 0:fcd980d5ee5f 57 // KeyData_t size is 1 bytes
yungsung 0:fcd980d5ee5f 58 TM1637::KeyData_t keydata;
yungsung 0:fcd980d5ee5f 59
yungsung 0:fcd980d5ee5f 60 // TM1637 declaration, Select the desired type in TM1637_Config.h
yungsung 0:fcd980d5ee5f 61 TM1637 CATALEX(DIO, CLK); //F401
yungsung 0:fcd980d5ee5f 62
yungsung 0:fcd980d5ee5f 63
yungsung 0:fcd980d5ee5f 64 // Declare: Global Variables
yungsung 0:fcd980d5ee5f 65 long duration, cm, inches;
yungsung 0:fcd980d5ee5f 66 float my_dist[21];
yungsung 0:fcd980d5ee5f 67 int16_t remain = 5;
yungsung 0:fcd980d5ee5f 68 const float start_pos = 120.0;
yungsung 0:fcd980d5ee5f 69 const float end_pos = 60.0;
yungsung 0:fcd980d5ee5f 70 int CDSVal; // initial value for light sensor = 0
yungsung 0:fcd980d5ee5f 71
yungsung 0:fcd980d5ee5f 72 // TODO: replace the virtual timing with RTC clock
yungsung 0:fcd980d5ee5f 73 int hr = 15;
yungsung 0:fcd980d5ee5f 74 int minutes = 35;
yungsung 0:fcd980d5ee5f 75 int sec = 40;
yungsung 0:fcd980d5ee5f 76
yungsung 0:fcd980d5ee5f 77 const static char DEVICE_NAME[] = "AwesomeAlarm";
yungsung 0:fcd980d5ee5f 78 static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID};
yungsung 0:fcd980d5ee5f 79 int i = 0;
yungsung 0:fcd980d5ee5f 80 int ble_read_value = 0;
yungsung 0:fcd980d5ee5f 81 static EventQueue eventQueue(/* event count */ 10 * EVENTS_EVENT_SIZE);
yungsung 0:fcd980d5ee5f 82 bool end_ring = 0;
yungsung 0:fcd980d5ee5f 83 bool display_time = 1;
yungsung 0:fcd980d5ee5f 84 // Define Threads
yungsung 0:fcd980d5ee5f 85 Thread* thread_ring = new Thread(); // ring tone while waiting for laser gun shot
yungsung 0:fcd980d5ee5f 86 Thread* thread_ble = new Thread(); // read ble while main program is executed
yungsung 0:fcd980d5ee5f 87 Thread* thread_scan = new Thread(); // scan the distance while count the time
yungsung 0:fcd980d5ee5f 88 Thread* thread_time = new Thread(); // ount the time and display it when main program is running
yungsung 0:fcd980d5ee5f 89
yungsung 0:fcd980d5ee5f 90 LEDService *ledServicePtr;
yungsung 0:fcd980d5ee5f 91
yungsung 0:fcd980d5ee5f 92 // Function: Buzzer Beep ring
yungsung 0:fcd980d5ee5f 93 void ringTone() {
yungsung 0:fcd980d5ee5f 94 int num = 10;
yungsung 0:fcd980d5ee5f 95 for (int j=0; j<num; j++) { //repeat num times
yungsung 0:fcd980d5ee5f 96 for (int i=0; i<10; i++) { //repeat 10 times
yungsung 0:fcd980d5ee5f 97 buzzer.beep(1000,0.05);
yungsung 0:fcd980d5ee5f 98 wait(0.05);
yungsung 0:fcd980d5ee5f 99 buzzer.beep(500,0.05);
yungsung 0:fcd980d5ee5f 100 wait(0.05);
yungsung 0:fcd980d5ee5f 101 }
yungsung 0:fcd980d5ee5f 102 buzzer.nobeep();
yungsung 0:fcd980d5ee5f 103 wait(2);
yungsung 0:fcd980d5ee5f 104 if (end_ring) {
yungsung 0:fcd980d5ee5f 105 end_ring = 0;
yungsung 0:fcd980d5ee5f 106 break;
yungsung 0:fcd980d5ee5f 107 }
yungsung 0:fcd980d5ee5f 108 }
yungsung 0:fcd980d5ee5f 109 }
yungsung 0:fcd980d5ee5f 110
yungsung 0:fcd980d5ee5f 111 // Function convert digits to data bits and write to TM1637
yungsung 0:fcd980d5ee5f 112 void write_digits(int num){
yungsung 0:fcd980d5ee5f 113 int i=0;
yungsung 0:fcd980d5ee5f 114 while(i<4)
yungsung 0:fcd980d5ee5f 115 {
yungsung 0:fcd980d5ee5f 116 int digit = num % 10;
yungsung 0:fcd980d5ee5f 117 num = num / 10;
yungsung 0:fcd980d5ee5f 118 numdigits[i]=digit;
yungsung 0:fcd980d5ee5f 119 i++;
yungsung 0:fcd980d5ee5f 120 }
yungsung 0:fcd980d5ee5f 121 TM1637::DisplayData_t dat = {digits[numdigits[3]],digits[numdigits[2]],digits[numdigits[1]],digits[numdigits[0]]};
yungsung 0:fcd980d5ee5f 122 CATALEX.writeData(dat);
yungsung 0:fcd980d5ee5f 123 }
yungsung 0:fcd980d5ee5f 124
yungsung 0:fcd980d5ee5f 125
yungsung 0:fcd980d5ee5f 126 // Function to write Servo motor by degrees
yungsung 0:fcd980d5ee5f 127 void write_servo(int degree){
yungsung 0:fcd980d5ee5f 128 servoVer.pulsewidth(0.0009+(0.0033-0.0009)*degree/240.0);
yungsung 0:fcd980d5ee5f 129 }
yungsung 0:fcd980d5ee5f 130
yungsung 0:fcd980d5ee5f 131 // Function: measure distance
yungsung 0:fcd980d5ee5f 132 void scan(){
yungsung 0:fcd980d5ee5f 133 float dis = 0;
yungsung 0:fcd980d5ee5f 134 int idx = 0;
yungsung 0:fcd980d5ee5f 135 for(int i=start_pos; i>=end_pos; i-=5.0) {
yungsung 0:fcd980d5ee5f 136 write_servo(i);
yungsung 0:fcd980d5ee5f 137 wait(1);
yungsung 0:fcd980d5ee5f 138 dis = sonar.getCm();
yungsung 0:fcd980d5ee5f 139 if (dis < 20.0){
yungsung 0:fcd980d5ee5f 140 wait(1);
yungsung 0:fcd980d5ee5f 141 dis = sonar.getCm();
yungsung 0:fcd980d5ee5f 142 }
yungsung 0:fcd980d5ee5f 143 printf("Angle %d degree ", i);
yungsung 0:fcd980d5ee5f 144 printf("Distance %.2f cm \n", dis);
yungsung 0:fcd980d5ee5f 145 my_dist[idx] = dis;
yungsung 0:fcd980d5ee5f 146 idx += 1;
yungsung 0:fcd980d5ee5f 147 }
yungsung 0:fcd980d5ee5f 148 }
yungsung 0:fcd980d5ee5f 149
yungsung 0:fcd980d5ee5f 150 // Function: measure distance
yungsung 0:fcd980d5ee5f 151 void lowest(){
yungsung 0:fcd980d5ee5f 152 float dis = 0.0;
yungsung 0:fcd980d5ee5f 153 int idx = 0;
yungsung 0:fcd980d5ee5f 154 float new_dist = 0;
yungsung 0:fcd980d5ee5f 155 float maximum = 0;
yungsung 0:fcd980d5ee5f 156 int maximum_t = 0;
yungsung 0:fcd980d5ee5f 157 int max_angle = 0;
yungsung 0:fcd980d5ee5f 158 for(int i=start_pos; i>=end_pos; i-=5.0) {
yungsung 0:fcd980d5ee5f 159 write_servo(i);
yungsung 0:fcd980d5ee5f 160 wait(1);
yungsung 0:fcd980d5ee5f 161 dis = sonar.getCm();
yungsung 0:fcd980d5ee5f 162 if (dis < 20.0){
yungsung 0:fcd980d5ee5f 163 printf("Distance %.2f cm , is too short\n", dis);
yungsung 0:fcd980d5ee5f 164 wait(1);
yungsung 0:fcd980d5ee5f 165 dis = sonar.getCm();
yungsung 0:fcd980d5ee5f 166 }
yungsung 0:fcd980d5ee5f 167 printf("Angle %d degree ", i);
yungsung 0:fcd980d5ee5f 168 printf("Distance %.2f cm ", dis);
yungsung 0:fcd980d5ee5f 169 printf("Origin %.2f cm ", my_dist[idx]);
yungsung 0:fcd980d5ee5f 170 new_dist = my_dist[idx] - dis;
yungsung 0:fcd980d5ee5f 171 printf("Diff %.2f cm \n", new_dist);
yungsung 0:fcd980d5ee5f 172 if (new_dist > maximum && new_dist < 20.0){
yungsung 0:fcd980d5ee5f 173 maximum = new_dist;
yungsung 0:fcd980d5ee5f 174 maximum_t = idx;
yungsung 0:fcd980d5ee5f 175 max_angle = i;
yungsung 0:fcd980d5ee5f 176 }
yungsung 0:fcd980d5ee5f 177 idx += 1;
yungsung 0:fcd980d5ee5f 178 }
yungsung 0:fcd980d5ee5f 179 printf("MIN Angle %d degree ", 120- 5*maximum_t);
yungsung 0:fcd980d5ee5f 180 printf("MIN Distance %.2f cm ", maximum);
yungsung 0:fcd980d5ee5f 181 printf("MIN Origin %.2f cm\n", my_dist[maximum_t]);
yungsung 0:fcd980d5ee5f 182 idx = 0;
yungsung 0:fcd980d5ee5f 183 write_servo(max_angle);
yungsung 0:fcd980d5ee5f 184 }
yungsung 0:fcd980d5ee5f 185
yungsung 0:fcd980d5ee5f 186 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
yungsung 0:fcd980d5ee5f 187 {
yungsung 0:fcd980d5ee5f 188 (void) params;
yungsung 0:fcd980d5ee5f 189 BLE::Instance().gap().startAdvertising();
yungsung 0:fcd980d5ee5f 190 }
yungsung 0:fcd980d5ee5f 191
yungsung 0:fcd980d5ee5f 192 void blinkCallback(void)
yungsung 0:fcd980d5ee5f 193 {
yungsung 0:fcd980d5ee5f 194 alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */
yungsung 0:fcd980d5ee5f 195 // pc.printf("CallBack!\n");
yungsung 0:fcd980d5ee5f 196 }
yungsung 0:fcd980d5ee5f 197
yungsung 0:fcd980d5ee5f 198 /**
yungsung 0:fcd980d5ee5f 199 * This callback allows the LEDService to receive updates to the ledState Characteristic.
yungsung 0:fcd980d5ee5f 200 *
yungsung 0:fcd980d5ee5f 201 * @param[in] params
yungsung 0:fcd980d5ee5f 202 * Information about the characterisitc being updated.
yungsung 0:fcd980d5ee5f 203 */
yungsung 0:fcd980d5ee5f 204 void onDataWrittenCallback(const GattWriteCallbackParams *params) {
yungsung 0:fcd980d5ee5f 205
yungsung 0:fcd980d5ee5f 206 ble_read_value = *(params->data);
yungsung 0:fcd980d5ee5f 207 if ((params->handle == ledServicePtr->getValueHandle())) {
yungsung 0:fcd980d5ee5f 208 actuatedLED = *(params->data);
yungsung 0:fcd980d5ee5f 209 pc.printf("\nSet Values: ");
yungsung 0:fcd980d5ee5f 210 pc.printf("%d ", *(params->data));
yungsung 0:fcd980d5ee5f 211 pc.printf("Length: %d", params->len);
yungsung 0:fcd980d5ee5f 212 pc.printf("\n");
yungsung 0:fcd980d5ee5f 213 } else{
yungsung 0:fcd980d5ee5f 214 pc.printf("\nFailed to Set Values: ");
yungsung 0:fcd980d5ee5f 215 pc.printf("%d ", *(params->data));
yungsung 0:fcd980d5ee5f 216 pc.printf("Length: %d", params->len);
yungsung 0:fcd980d5ee5f 217 pc.printf("\n");
yungsung 0:fcd980d5ee5f 218 }
yungsung 0:fcd980d5ee5f 219
yungsung 0:fcd980d5ee5f 220 }
yungsung 0:fcd980d5ee5f 221
yungsung 0:fcd980d5ee5f 222 /**
yungsung 0:fcd980d5ee5f 223 * This function is called when the ble initialization process has failled
yungsung 0:fcd980d5ee5f 224 */
yungsung 0:fcd980d5ee5f 225 void onBleInitError(BLE &ble, ble_error_t error)
yungsung 0:fcd980d5ee5f 226 {
yungsung 0:fcd980d5ee5f 227 /* Initialization error handling should go here */
yungsung 0:fcd980d5ee5f 228 }
yungsung 0:fcd980d5ee5f 229
yungsung 0:fcd980d5ee5f 230 /**
yungsung 0:fcd980d5ee5f 231 * Callback triggered when the ble initialization process has finished
yungsung 0:fcd980d5ee5f 232 */
yungsung 0:fcd980d5ee5f 233 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
yungsung 0:fcd980d5ee5f 234 {
yungsung 0:fcd980d5ee5f 235 BLE& ble = params->ble;
yungsung 0:fcd980d5ee5f 236 ble_error_t error = params->error;
yungsung 0:fcd980d5ee5f 237
yungsung 0:fcd980d5ee5f 238 if (error != BLE_ERROR_NONE) {
yungsung 0:fcd980d5ee5f 239 /* In case of error, forward the error handling to onBleInitError */
yungsung 0:fcd980d5ee5f 240 onBleInitError(ble, error);
yungsung 0:fcd980d5ee5f 241 return;
yungsung 0:fcd980d5ee5f 242 }
yungsung 0:fcd980d5ee5f 243
yungsung 0:fcd980d5ee5f 244 /* Ensure that it is the default instance of BLE */
yungsung 0:fcd980d5ee5f 245 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
yungsung 0:fcd980d5ee5f 246 return;
yungsung 0:fcd980d5ee5f 247 }
yungsung 0:fcd980d5ee5f 248
yungsung 0:fcd980d5ee5f 249 ble.gap().onDisconnection(disconnectionCallback);
yungsung 0:fcd980d5ee5f 250 ble.gattServer().onDataWritten(onDataWrittenCallback);
yungsung 0:fcd980d5ee5f 251
yungsung 0:fcd980d5ee5f 252 bool initialValueForLEDCharacteristic = false;
yungsung 0:fcd980d5ee5f 253 ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic);
yungsung 0:fcd980d5ee5f 254
yungsung 0:fcd980d5ee5f 255 /* setup advertising */
yungsung 0:fcd980d5ee5f 256 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
yungsung 0:fcd980d5ee5f 257 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
yungsung 0:fcd980d5ee5f 258 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
yungsung 0:fcd980d5ee5f 259 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
yungsung 0:fcd980d5ee5f 260 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */
yungsung 0:fcd980d5ee5f 261 ble.gap().startAdvertising();
yungsung 0:fcd980d5ee5f 262 }
yungsung 0:fcd980d5ee5f 263
yungsung 0:fcd980d5ee5f 264 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
yungsung 0:fcd980d5ee5f 265 BLE &ble = BLE::Instance();
yungsung 0:fcd980d5ee5f 266 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
yungsung 0:fcd980d5ee5f 267 }
yungsung 0:fcd980d5ee5f 268
yungsung 0:fcd980d5ee5f 269 void run_ble(){
yungsung 0:fcd980d5ee5f 270
yungsung 0:fcd980d5ee5f 271 BLE &ble = BLE::Instance();
yungsung 0:fcd980d5ee5f 272 ble.onEventsToProcess(scheduleBleEventsProcessing);
yungsung 0:fcd980d5ee5f 273 ble.init(bleInitComplete);
yungsung 0:fcd980d5ee5f 274
yungsung 0:fcd980d5ee5f 275 eventQueue.dispatch_forever();
yungsung 0:fcd980d5ee5f 276 }
yungsung 0:fcd980d5ee5f 277
yungsung 0:fcd980d5ee5f 278 void count_time() {
yungsung 0:fcd980d5ee5f 279 while(1){
yungsung 0:fcd980d5ee5f 280 wait(1);
yungsung 0:fcd980d5ee5f 281 sec = sec + 1;
yungsung 0:fcd980d5ee5f 282 if (sec == 60){
yungsung 0:fcd980d5ee5f 283 minutes = minutes + 1;
yungsung 0:fcd980d5ee5f 284 sec = 0;
yungsung 0:fcd980d5ee5f 285 }
yungsung 0:fcd980d5ee5f 286 if (minutes == 60) {
yungsung 0:fcd980d5ee5f 287 hr = hr + 1;
yungsung 0:fcd980d5ee5f 288 minutes = 0;
yungsung 0:fcd980d5ee5f 289 }
yungsung 0:fcd980d5ee5f 290 if (hr == 24) {
yungsung 0:fcd980d5ee5f 291 hr = 0;
yungsung 0:fcd980d5ee5f 292 }
yungsung 0:fcd980d5ee5f 293 if (display_time)
yungsung 0:fcd980d5ee5f 294 write_digits(100*hr + minutes);
yungsung 0:fcd980d5ee5f 295 }
yungsung 0:fcd980d5ee5f 296
yungsung 0:fcd980d5ee5f 297 }
yungsung 0:fcd980d5ee5f 298
yungsung 0:fcd980d5ee5f 299
yungsung 0:fcd980d5ee5f 300 int main()
yungsung 0:fcd980d5ee5f 301 {
yungsung 0:fcd980d5ee5f 302 eventQueue.call_every(500, blinkCallback);
yungsung 0:fcd980d5ee5f 303 pc.printf("\nHelloWorld!\n");
yungsung 0:fcd980d5ee5f 304 thread_ble->start(run_ble);
yungsung 0:fcd980d5ee5f 305 thread_time->start(count_time);
yungsung 0:fcd980d5ee5f 306
yungsung 0:fcd980d5ee5f 307 pc.printf("BLE Setup Done!\n");
yungsung 0:fcd980d5ee5f 308
yungsung 0:fcd980d5ee5f 309 CATALEX.cls();
yungsung 0:fcd980d5ee5f 310 CATALEX.writeData(all_str);
yungsung 0:fcd980d5ee5f 311 CATALEX.setBrightness(TM1637_BRT3);
yungsung 0:fcd980d5ee5f 312
yungsung 0:fcd980d5ee5f 313 // Start infine loop!
yungsung 0:fcd980d5ee5f 314 while(1){
yungsung 0:fcd980d5ee5f 315 while (ble_read_value==0){
yungsung 0:fcd980d5ee5f 316 pc.printf("Waiting for write...\n");
yungsung 0:fcd980d5ee5f 317 wait(1);
yungsung 0:fcd980d5ee5f 318 }
yungsung 0:fcd980d5ee5f 319 thread_scan->start(scan);
yungsung 0:fcd980d5ee5f 320 display_time = 0;
yungsung 0:fcd980d5ee5f 321 for(remain=ble_read_value;remain>=0;remain--)
yungsung 0:fcd980d5ee5f 322 {
yungsung 0:fcd980d5ee5f 323 write_digits(remain);
yungsung 0:fcd980d5ee5f 324 wait(1);
yungsung 0:fcd980d5ee5f 325 }
yungsung 0:fcd980d5ee5f 326 lowest();
yungsung 0:fcd980d5ee5f 327 display_time = 1;
yungsung 0:fcd980d5ee5f 328 thread_ring->start(ringTone);
yungsung 0:fcd980d5ee5f 329 out_led = 1;
yungsung 0:fcd980d5ee5f 330 out_laser = 1;
yungsung 0:fcd980d5ee5f 331 // printf("RTC example\n");
yungsung 0:fcd980d5ee5f 332 // set_time(1387188323); // Set RTC time to 16 December 2013 10:05:23 UTC
yungsung 0:fcd980d5ee5f 333 // printf("Date and time are set.\n");
yungsung 0:fcd980d5ee5f 334
yungsung 0:fcd980d5ee5f 335 while(1) {
yungsung 0:fcd980d5ee5f 336
yungsung 0:fcd980d5ee5f 337 time_t seconds = time(NULL);
yungsung 0:fcd980d5ee5f 338
yungsung 0:fcd980d5ee5f 339 //printf("Time as seconds since January 1, 1970 = %d\n", seconds);
yungsung 0:fcd980d5ee5f 340
yungsung 0:fcd980d5ee5f 341 printf("Time as a basic string = %s", ctime(&seconds));
yungsung 0:fcd980d5ee5f 342
yungsung 0:fcd980d5ee5f 343 CDSVal = light_sensor.read_u16()/100;
yungsung 0:fcd980d5ee5f 344 pc.printf("READ %d", CDSVal);
yungsung 0:fcd980d5ee5f 345 if (CDSVal<100) {break;}
yungsung 0:fcd980d5ee5f 346
yungsung 0:fcd980d5ee5f 347 //char buffer[32];
yungsung 0:fcd980d5ee5f 348 //strftime(buffer, 32, "%I:%M:%S %p\n", localtime(&seconds));
yungsung 0:fcd980d5ee5f 349 //printf("Time as a custom formatted string = %s", buffer);
yungsung 0:fcd980d5ee5f 350
yungsung 0:fcd980d5ee5f 351 myled = !myled;
yungsung 0:fcd980d5ee5f 352 wait(1);
yungsung 0:fcd980d5ee5f 353 }
yungsung 0:fcd980d5ee5f 354 end_ring = 1;
yungsung 0:fcd980d5ee5f 355 out_led = 0;
yungsung 0:fcd980d5ee5f 356 out_laser = 0;
yungsung 0:fcd980d5ee5f 357 ble_read_value=0;
yungsung 0:fcd980d5ee5f 358 thread_ring->join();
yungsung 0:fcd980d5ee5f 359 thread_scan->join();
yungsung 0:fcd980d5ee5f 360 delete thread_ring;
yungsung 0:fcd980d5ee5f 361 delete thread_scan;
yungsung 0:fcd980d5ee5f 362 thread_ring = new Thread();
yungsung 0:fcd980d5ee5f 363 thread_scan = new Thread();
yungsung 0:fcd980d5ee5f 364 }
yungsung 0:fcd980d5ee5f 365 }