Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: libmDot mbed-rtos mbed
main.cpp@0:208bd045dd31, 2016-05-12 (annotated)
- Committer:
- boddeke
- Date:
- Thu May 12 13:46:17 2016 +0000
- Revision:
- 0:208bd045dd31
- Child:
- 1:3348d15fefdb
initial checkin
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| boddeke | 0:208bd045dd31 | 1 | #include "mbed.h" |
| boddeke | 0:208bd045dd31 | 2 | #include "mDot.h" |
| boddeke | 0:208bd045dd31 | 3 | #include "MTSLog.h" |
| boddeke | 0:208bd045dd31 | 4 | #include "MTSText.h" |
| boddeke | 0:208bd045dd31 | 5 | |
| boddeke | 0:208bd045dd31 | 6 | using namespace mts; |
| boddeke | 0:208bd045dd31 | 7 | |
| boddeke | 0:208bd045dd31 | 8 | #define REED_PORT PA_3 |
| boddeke | 0:208bd045dd31 | 9 | Serial pc(USBTX,USBRX); |
| boddeke | 0:208bd045dd31 | 10 | DigitalIn reed_gpio(REED_PORT); |
| boddeke | 0:208bd045dd31 | 11 | |
| boddeke | 0:208bd045dd31 | 12 | |
| boddeke | 0:208bd045dd31 | 13 | int reed_lock_write = 0; |
| boddeke | 0:208bd045dd31 | 14 | int reed_lock_read = 0; |
| boddeke | 0:208bd045dd31 | 15 | int reed_has_changed = 0; |
| boddeke | 0:208bd045dd31 | 16 | int reed_value = 0; |
| boddeke | 0:208bd045dd31 | 17 | int reed_value_to_send = 0; |
| boddeke | 0:208bd045dd31 | 18 | int reed_value_last_sent = 0; |
| boddeke | 0:208bd045dd31 | 19 | |
| boddeke | 0:208bd045dd31 | 20 | void isr_reed_sensor_change(void) { |
| boddeke | 0:208bd045dd31 | 21 | |
| boddeke | 0:208bd045dd31 | 22 | while(reed_lock_read) {} |
| boddeke | 0:208bd045dd31 | 23 | reed_lock_write = 1; |
| boddeke | 0:208bd045dd31 | 24 | |
| boddeke | 0:208bd045dd31 | 25 | reed_has_changed = 1; |
| boddeke | 0:208bd045dd31 | 26 | reed_value = reed_gpio; |
| boddeke | 0:208bd045dd31 | 27 | |
| boddeke | 0:208bd045dd31 | 28 | reed_lock_write = 0; |
| boddeke | 0:208bd045dd31 | 29 | } |
| boddeke | 0:208bd045dd31 | 30 | |
| boddeke | 0:208bd045dd31 | 31 | int has_reed_changed(void) { |
| boddeke | 0:208bd045dd31 | 32 | |
| boddeke | 0:208bd045dd31 | 33 | int change; |
| boddeke | 0:208bd045dd31 | 34 | |
| boddeke | 0:208bd045dd31 | 35 | while(reed_lock_write) {} |
| boddeke | 0:208bd045dd31 | 36 | reed_lock_read = 1; |
| boddeke | 0:208bd045dd31 | 37 | |
| boddeke | 0:208bd045dd31 | 38 | change = reed_value_last_sent != reed_value; |
| boddeke | 0:208bd045dd31 | 39 | reed_value_to_send = reed_value; |
| boddeke | 0:208bd045dd31 | 40 | reed_has_changed = 0; |
| boddeke | 0:208bd045dd31 | 41 | |
| boddeke | 0:208bd045dd31 | 42 | reed_lock_read = 0; |
| boddeke | 0:208bd045dd31 | 43 | |
| boddeke | 0:208bd045dd31 | 44 | return(change); |
| boddeke | 0:208bd045dd31 | 45 | } |
| boddeke | 0:208bd045dd31 | 46 | |
| boddeke | 0:208bd045dd31 | 47 | void has_reed_changed_since_last_sent(void) { |
| boddeke | 0:208bd045dd31 | 48 | |
| boddeke | 0:208bd045dd31 | 49 | int change; |
| boddeke | 0:208bd045dd31 | 50 | |
| boddeke | 0:208bd045dd31 | 51 | has_reed_changed(); |
| boddeke | 0:208bd045dd31 | 52 | |
| boddeke | 0:208bd045dd31 | 53 | change = reed_value_to_send != reed_value_last_sent; |
| boddeke | 0:208bd045dd31 | 54 | |
| boddeke | 0:208bd045dd31 | 55 | return(change); |
| boddeke | 0:208bd045dd31 | 56 | } |
| boddeke | 0:208bd045dd31 | 57 | |
| boddeke | 0:208bd045dd31 | 58 | void send_reed(void) { |
| boddeke | 0:208bd045dd31 | 59 | |
| boddeke | 0:208bd045dd31 | 60 | reed_value_last_sent = reed_value_to_send; |
| boddeke | 0:208bd045dd31 | 61 | |
| boddeke | 0:208bd045dd31 | 62 | pc.printf("Sending REED = %d\r\n",reed_value_to_send); |
| boddeke | 0:208bd045dd31 | 63 | } |
| boddeke | 0:208bd045dd31 | 64 | |
| boddeke | 0:208bd045dd31 | 65 | |
| boddeke | 0:208bd045dd31 | 66 | int main() { |
| boddeke | 0:208bd045dd31 | 67 | |
| boddeke | 0:208bd045dd31 | 68 | mDot* dot; |
| boddeke | 0:208bd045dd31 | 69 | long last_sent = 0; |
| boddeke | 0:208bd045dd31 | 70 | |
| boddeke | 0:208bd045dd31 | 71 | pc.attach(&callback,RawSerial::RxIrq); |
| boddeke | 0:208bd045dd31 | 72 | pc.baud(115200); |
| boddeke | 0:208bd045dd31 | 73 | |
| boddeke | 0:208bd045dd31 | 74 | pc.printf("\r\n\r\n********************************\r\n"); |
| boddeke | 0:208bd045dd31 | 75 | pc.printf( "* *\r\n"); |
| boddeke | 0:208bd045dd31 | 76 | pc.printf( "* Edge Reed *\r\n"); |
| boddeke | 0:208bd045dd31 | 77 | pc.printf( "* *\r\n"); |
| boddeke | 0:208bd045dd31 | 78 | pc.printf( "* Build: " __DATE__ ", " __TIME__" *\r\n"); |
| boddeke | 0:208bd045dd31 | 79 | pc.printf( "********************************\r\n\r\n"); |
| boddeke | 0:208bd045dd31 | 80 | |
| boddeke | 0:208bd045dd31 | 81 | dot = mDot::getInstance(); |
| boddeke | 0:208bd045dd31 | 82 | |
| boddeke | 0:208bd045dd31 | 83 | InterruptIn *reed_sensor_change; |
| boddeke | 0:208bd045dd31 | 84 | reed_sensor_change = new InterruptIn(REED_PORT); |
| boddeke | 0:208bd045dd31 | 85 | reed_sensor_change->fall(&isr_reed_sensor_change); |
| boddeke | 0:208bd045dd31 | 86 | reed_sensor_change->rise(&isr_reed_sensor_change); |
| boddeke | 0:208bd045dd31 | 87 | |
| boddeke | 0:208bd045dd31 | 88 | while (true) { |
| boddeke | 0:208bd045dd31 | 89 | |
| boddeke | 0:208bd045dd31 | 90 | int time_since_last_sent = time(NULL) - last_sent; |
| boddeke | 0:208bd045dd31 | 91 | |
| boddeke | 0:208bd045dd31 | 92 | if(time_since_last_sent > 60) { |
| boddeke | 0:208bd045dd31 | 93 | |
| boddeke | 0:208bd045dd31 | 94 | has_reed_changed(); |
| boddeke | 0:208bd045dd31 | 95 | send_reed(); |
| boddeke | 0:208bd045dd31 | 96 | last_sent = time(NULL); |
| boddeke | 0:208bd045dd31 | 97 | } |
| boddeke | 0:208bd045dd31 | 98 | |
| boddeke | 0:208bd045dd31 | 99 | if(has_reed_changed() && time_since_last_sent>10) { |
| boddeke | 0:208bd045dd31 | 100 | |
| boddeke | 0:208bd045dd31 | 101 | Thread::wait(100); |
| boddeke | 0:208bd045dd31 | 102 | |
| boddeke | 0:208bd045dd31 | 103 | if(has_reed_changed_since_last_sent()) { |
| boddeke | 0:208bd045dd31 | 104 | |
| boddeke | 0:208bd045dd31 | 105 | send_reed(); |
| boddeke | 0:208bd045dd31 | 106 | last_sent = time(NULL); |
| boddeke | 0:208bd045dd31 | 107 | } |
| boddeke | 0:208bd045dd31 | 108 | } |
| boddeke | 0:208bd045dd31 | 109 | |
| boddeke | 0:208bd045dd31 | 110 | dot->sleep(sleep_time, mDot::RTC_ALARM_OR_INTERRUPT, true); |
| boddeke | 0:208bd045dd31 | 111 | } |
| boddeke | 0:208bd045dd31 | 112 | } |