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.
Fork of TAIST_modbus by
main.cpp@27:2b99f1ff1d22, 2018-03-17 (annotated)
- Committer:
- nengzix
- Date:
- Sat Mar 17 03:12:15 2018 +0000
- Revision:
- 27:2b99f1ff1d22
- Parent:
- 26:e997527a78d7
- Child:
- 28:a42061363658
integrate with sensor
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| vsupacha | 0:f306cb0263a6 | 1 | #include "mbed.h" |
| vsupacha | 0:f306cb0263a6 | 2 | #include "modbus.h" |
| vsupacha | 24:0007712e84a8 | 3 | #include "RawSerial.h" |
| vsupacha | 0:f306cb0263a6 | 4 | |
| vsupacha | 0:f306cb0263a6 | 5 | DigitalOut myled(LED1); |
| nengzix | 27:2b99f1ff1d22 | 6 | AnalogIn analog_value(A0); |
| nengzix | 27:2b99f1ff1d22 | 7 | |
| vsupacha | 0:f306cb0263a6 | 8 | RawSerial pc(USBTX, USBRX); |
| vsupacha | 24:0007712e84a8 | 9 | InterruptIn button(USER_BUTTON); |
| vsupacha | 24:0007712e84a8 | 10 | Ticker timebase; |
| vsupacha | 24:0007712e84a8 | 11 | |
| nengzix | 27:2b99f1ff1d22 | 12 | float meas_r; |
| nengzix | 27:2b99f1ff1d22 | 13 | int state = 0; |
| nengzix | 27:2b99f1ff1d22 | 14 | |
| vsupacha | 24:0007712e84a8 | 15 | uint32_t Tick = 0; |
| vsupacha | 24:0007712e84a8 | 16 | uint32_t pressedTick = 0; |
| vsupacha | 24:0007712e84a8 | 17 | uint32_t releasedTick = 0; |
| vsupacha | 0:f306cb0263a6 | 18 | |
| vsupacha | 0:f306cb0263a6 | 19 | void serial_callback() |
| vsupacha | 0:f306cb0263a6 | 20 | { |
| vsupacha | 0:f306cb0263a6 | 21 | uint8_t frame[6]; |
| vsupacha | 24:0007712e84a8 | 22 | uint16_t offset, count; |
| vsupacha | 24:0007712e84a8 | 23 | uint8_t reg_map; |
| vsupacha | 0:f306cb0263a6 | 24 | |
| vsupacha | 0:f306cb0263a6 | 25 | char ch = pc.getc(); |
| vsupacha | 0:f306cb0263a6 | 26 | if (modbus_parser(ch, frame)) { |
| vsupacha | 24:0007712e84a8 | 27 | offset = (frame[2] << 8) | (frame[3]); |
| vsupacha | 24:0007712e84a8 | 28 | count = (frame[4] << 8) | (frame[5]); |
| vsupacha | 24:0007712e84a8 | 29 | reg_map = modbus_check(offset, count); |
| vsupacha | 24:0007712e84a8 | 30 | modbus_response(reg_map); |
| vsupacha | 24:0007712e84a8 | 31 | } |
| vsupacha | 24:0007712e84a8 | 32 | } |
| vsupacha | 24:0007712e84a8 | 33 | |
| vsupacha | 24:0007712e84a8 | 34 | void pressed_callback() |
| vsupacha | 24:0007712e84a8 | 35 | { |
| vsupacha | 24:0007712e84a8 | 36 | uint16_t skipCount; |
| vsupacha | 24:0007712e84a8 | 37 | |
| vsupacha | 24:0007712e84a8 | 38 | if ((Tick > pressedTick) && (Tick > releasedTick)) { |
| vsupacha | 24:0007712e84a8 | 39 | skipCount = Tick - releasedTick; |
| vsupacha | 24:0007712e84a8 | 40 | modbus_update(0x0000, skipCount); |
| vsupacha | 24:0007712e84a8 | 41 | pressedTick = Tick; |
| vsupacha | 24:0007712e84a8 | 42 | // printf("Pressed: %d - %d - %d\r\n", pressedTick, releasedTick, skipCount); |
| vsupacha | 0:f306cb0263a6 | 43 | } |
| vsupacha | 0:f306cb0263a6 | 44 | } |
| vsupacha | 0:f306cb0263a6 | 45 | |
| vsupacha | 24:0007712e84a8 | 46 | void released_callback() |
| vsupacha | 24:0007712e84a8 | 47 | { |
| vsupacha | 24:0007712e84a8 | 48 | uint16_t widthCount; |
| vsupacha | 24:0007712e84a8 | 49 | |
| vsupacha | 24:0007712e84a8 | 50 | if ((Tick > pressedTick) && (Tick > releasedTick)) { |
| vsupacha | 24:0007712e84a8 | 51 | widthCount = Tick - pressedTick; |
| vsupacha | 24:0007712e84a8 | 52 | modbus_update(0x0001, widthCount); |
| vsupacha | 24:0007712e84a8 | 53 | releasedTick = Tick; |
| vsupacha | 24:0007712e84a8 | 54 | // printf("Released: %d - %d - %d\r\n", pressedTick, releasedTick, widthCount); |
| vsupacha | 24:0007712e84a8 | 55 | } |
| vsupacha | 24:0007712e84a8 | 56 | } |
| vsupacha | 24:0007712e84a8 | 57 | |
| vsupacha | 24:0007712e84a8 | 58 | void ticker_callback() |
| vsupacha | 24:0007712e84a8 | 59 | { |
| vsupacha | 24:0007712e84a8 | 60 | Tick++; |
| nengzix | 27:2b99f1ff1d22 | 61 | meas_r = analog_value.read(); |
| nengzix | 27:2b99f1ff1d22 | 62 | // printf("%.3f\n", meas_r); |
| nengzix | 27:2b99f1ff1d22 | 63 | if(meas_r > 0.5f){ |
| nengzix | 27:2b99f1ff1d22 | 64 | if(state == 0){ |
| nengzix | 27:2b99f1ff1d22 | 65 | state = 1; |
| nengzix | 27:2b99f1ff1d22 | 66 | // printf("pressed_callback \n"); |
| nengzix | 27:2b99f1ff1d22 | 67 | pressed_callback(); |
| nengzix | 27:2b99f1ff1d22 | 68 | |
| nengzix | 27:2b99f1ff1d22 | 69 | } |
| nengzix | 27:2b99f1ff1d22 | 70 | }else { |
| nengzix | 27:2b99f1ff1d22 | 71 | if(state == 1){ |
| nengzix | 27:2b99f1ff1d22 | 72 | state = 0; |
| nengzix | 27:2b99f1ff1d22 | 73 | // printf("released_callback \n"); |
| nengzix | 27:2b99f1ff1d22 | 74 | released_callback(); |
| nengzix | 27:2b99f1ff1d22 | 75 | |
| nengzix | 27:2b99f1ff1d22 | 76 | } |
| nengzix | 27:2b99f1ff1d22 | 77 | |
| nengzix | 27:2b99f1ff1d22 | 78 | } |
| nengzix | 27:2b99f1ff1d22 | 79 | |
| vsupacha | 24:0007712e84a8 | 80 | } |
| vsupacha | 24:0007712e84a8 | 81 | |
| vsupacha | 0:f306cb0263a6 | 82 | int main() { |
| vsupacha | 0:f306cb0263a6 | 83 | // setup code |
| vsupacha | 24:0007712e84a8 | 84 | pc.attach(&serial_callback); |
| nengzix | 26:e997527a78d7 | 85 | modbus_init(0x0059); // init ID |
| vsupacha | 24:0007712e84a8 | 86 | |
| vsupacha | 0:f306cb0263a6 | 87 | // 1. button code |
| vsupacha | 24:0007712e84a8 | 88 | button.rise(&pressed_callback); |
| vsupacha | 24:0007712e84a8 | 89 | button.fall(&released_callback); |
| vsupacha | 24:0007712e84a8 | 90 | |
| vsupacha | 0:f306cb0263a6 | 91 | // 2. timer code |
| vsupacha | 24:0007712e84a8 | 92 | timebase.attach(&ticker_callback, 0.1); |
| nengzix | 25:4d1450e7cb88 | 93 | // printf("Starting\n"); |
| nengzix | 25:4d1450e7cb88 | 94 | // printf("Test: %02X\r\n", modbus_check(0x0000, 0x0001)); |
| nengzix | 25:4d1450e7cb88 | 95 | // printf("Test: %02X\r\n", modbus_check(0x0001, 0x0001)); |
| nengzix | 25:4d1450e7cb88 | 96 | // printf("Test: %02X\r\n", modbus_check(0x0000, 0x0002)); |
| nengzix | 25:4d1450e7cb88 | 97 | // printf("Test: %02X\r\n", modbus_check(0x0000, 0x0003)); |
| nengzix | 25:4d1450e7cb88 | 98 | // printf("Test: %02X\r\n", modbus_check(0x0001, 0x0002)); |
| nengzix | 25:4d1450e7cb88 | 99 | // printf("Test: %02X\r\n", modbus_check(0x0002, 0x0002)); |
| vsupacha | 0:f306cb0263a6 | 100 | while(1) { |
| vsupacha | 24:0007712e84a8 | 101 | // blinking LED |
| nengzix | 27:2b99f1ff1d22 | 102 | myled = state; |
| nengzix | 27:2b99f1ff1d22 | 103 | wait(0.1); |
| nengzix | 25:4d1450e7cb88 | 104 | //printf("Detection: %d - %d\r\n", pressedTick, releasedTick); |
| nengzix | 25:4d1450e7cb88 | 105 | //modbus_response(0x01); |
| nengzix | 25:4d1450e7cb88 | 106 | //modbus_response(0x02); |
| nengzix | 25:4d1450e7cb88 | 107 | //modbus_response(0x03); |
| vsupacha | 0:f306cb0263a6 | 108 | } |
| vsupacha | 0:f306cb0263a6 | 109 | } |
