Sukkpranhachai Gatesichapakorn / Mbed 2 deprecated TAIST_modbus

Dependencies:   mbed

Fork of TAIST_modbus by Supachai Vorapojpisut

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?

UserRevisionLine numberNew 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 }