พัทธนันทน์ ศรีสุขนันทน์ / Mbed 2 deprecated TAIST_modbus

Dependencies:   mbed

Fork of TAIST_modbus by Supachai Vorapojpisut

Committer:
paicaloid
Date:
Fri Mar 16 10:45:49 2018 +0000
Revision:
2:6d1f053a6033
Parent:
1:c5e6595a03db
Child:
3:e458eb84d10d
Paicaloid edit

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"
paicaloid 2:6d1f053a6033 3 #include "RawSerial.h"
vsupacha 0:f306cb0263a6 4
vsupacha 0:f306cb0263a6 5 DigitalOut myled(LED1);
vsupacha 0:f306cb0263a6 6 RawSerial pc(USBTX, USBRX);
paicaloid 2:6d1f053a6033 7 InterruptIn button(USER_BUTTON);
paicaloid 2:6d1f053a6033 8 Ticker timebase;
KRiTiRK 1:c5e6595a03db 9
paicaloid 2:6d1f053a6033 10 uint32_t Tick = 0;
paicaloid 2:6d1f053a6033 11 uint32_t pressedTick = 0;
paicaloid 2:6d1f053a6033 12 uint32_t releasedTick = 0;
KRiTiRK 1:c5e6595a03db 13
paicaloid 2:6d1f053a6033 14 uint16_t widthCount;
paicaloid 2:6d1f053a6033 15 uint16_t skipCount;
vsupacha 0:f306cb0263a6 16
vsupacha 0:f306cb0263a6 17 void serial_callback()
vsupacha 0:f306cb0263a6 18 {
vsupacha 0:f306cb0263a6 19 uint8_t frame[6];
paicaloid 2:6d1f053a6033 20 uint16_t offset, count;
paicaloid 2:6d1f053a6033 21 uint8_t reg_map;
vsupacha 0:f306cb0263a6 22
paicaloid 2:6d1f053a6033 23 char ch = pc.getc();
vsupacha 0:f306cb0263a6 24 if (modbus_parser(ch, frame)) {
paicaloid 2:6d1f053a6033 25 printf("TRUE\n") ;
paicaloid 2:6d1f053a6033 26 offset = (frame[2] << 8) | (frame[3]);
paicaloid 2:6d1f053a6033 27 count = (frame[4] << 8) | (frame[5]);
paicaloid 2:6d1f053a6033 28
paicaloid 2:6d1f053a6033 29 modbus_update(0x0000, skipCount);
paicaloid 2:6d1f053a6033 30 modbus_update(0x0001, widthCount);
paicaloid 2:6d1f053a6033 31
paicaloid 2:6d1f053a6033 32 reg_map = modbus_check(offset, count);
paicaloid 2:6d1f053a6033 33 modbus_response(reg_map);
paicaloid 2:6d1f053a6033 34
paicaloid 2:6d1f053a6033 35 modbus_update(0x0000, 0);
paicaloid 2:6d1f053a6033 36 modbus_update(0x0001, 0);
paicaloid 2:6d1f053a6033 37
paicaloid 2:6d1f053a6033 38 skipCount = 0 ;
paicaloid 2:6d1f053a6033 39 widthCount = 0 ;
paicaloid 2:6d1f053a6033 40
paicaloid 2:6d1f053a6033 41
paicaloid 2:6d1f053a6033 42
paicaloid 2:6d1f053a6033 43
paicaloid 2:6d1f053a6033 44
vsupacha 0:f306cb0263a6 45 }
vsupacha 0:f306cb0263a6 46 }
vsupacha 0:f306cb0263a6 47
paicaloid 2:6d1f053a6033 48 void pressed_callback()
paicaloid 2:6d1f053a6033 49 {
paicaloid 2:6d1f053a6033 50 // uint16_t skipCount;
paicaloid 2:6d1f053a6033 51
paicaloid 2:6d1f053a6033 52 if ((Tick > pressedTick) && (Tick > releasedTick)) {
paicaloid 2:6d1f053a6033 53 skipCount = Tick - releasedTick;
paicaloid 2:6d1f053a6033 54 // modbus_update(0x0000, skipCount);
paicaloid 2:6d1f053a6033 55 pressedTick = Tick;
paicaloid 2:6d1f053a6033 56 // printf("Pressed: %d - %d - %d\r\n", pressedTick, releasedTick, skipCount);
KRiTiRK 1:c5e6595a03db 57 }
paicaloid 2:6d1f053a6033 58 }
paicaloid 2:6d1f053a6033 59
paicaloid 2:6d1f053a6033 60 void released_callback()
paicaloid 2:6d1f053a6033 61 {
paicaloid 2:6d1f053a6033 62 // uint16_t widthCount;
paicaloid 2:6d1f053a6033 63
paicaloid 2:6d1f053a6033 64 if ((Tick > pressedTick) && (Tick > releasedTick)) {
paicaloid 2:6d1f053a6033 65 widthCount = Tick - pressedTick;
paicaloid 2:6d1f053a6033 66 // modbus_update(0x0001, widthCount);
paicaloid 2:6d1f053a6033 67 releasedTick = Tick;
paicaloid 2:6d1f053a6033 68 // printf("Released: %d - %d - %d\r\n", pressedTick, releasedTick, widthCount);
KRiTiRK 1:c5e6595a03db 69 }
paicaloid 2:6d1f053a6033 70 }
paicaloid 2:6d1f053a6033 71
paicaloid 2:6d1f053a6033 72 void ticker_callback()
paicaloid 2:6d1f053a6033 73 {
paicaloid 2:6d1f053a6033 74 Tick++;
KRiTiRK 1:c5e6595a03db 75 }
KRiTiRK 1:c5e6595a03db 76
vsupacha 0:f306cb0263a6 77 int main() {
vsupacha 0:f306cb0263a6 78 // setup code
paicaloid 2:6d1f053a6033 79 pc.attach(&serial_callback);
paicaloid 2:6d1f053a6033 80
vsupacha 0:f306cb0263a6 81 // 1. button code
paicaloid 2:6d1f053a6033 82 button.rise(&pressed_callback);
paicaloid 2:6d1f053a6033 83 button.fall(&released_callback);
paicaloid 2:6d1f053a6033 84
vsupacha 0:f306cb0263a6 85 // 2. timer code
paicaloid 2:6d1f053a6033 86 timebase.attach(&ticker_callback, 0.1);
paicaloid 2:6d1f053a6033 87 printf("Starting\n");
paicaloid 2:6d1f053a6033 88 printf("Test: %02X\r\n", modbus_check(0x0000, 0x0001));
paicaloid 2:6d1f053a6033 89 printf("Test: %02X\r\n", modbus_check(0x0001, 0x0001));
paicaloid 2:6d1f053a6033 90 printf("Test: %02X\r\n", modbus_check(0x0000, 0x0002));
paicaloid 2:6d1f053a6033 91 printf("Test: %02X\r\n", modbus_check(0x0000, 0x0003));
paicaloid 2:6d1f053a6033 92 printf("Test: %02X\r\n", modbus_check(0x0001, 0x0002));
paicaloid 2:6d1f053a6033 93 printf("Test: %02X\r\n", modbus_check(0x0002, 0x0002));
vsupacha 0:f306cb0263a6 94 while(1) {
paicaloid 2:6d1f053a6033 95 // blinking LED
paicaloid 2:6d1f053a6033 96 myled = !myled;
paicaloid 2:6d1f053a6033 97 wait(2.5);
paicaloid 2:6d1f053a6033 98 // printf("Detection: %d - %d\r\n", pressedTick, releasedTick);
paicaloid 2:6d1f053a6033 99 // modbus_response(0x01);
paicaloid 2:6d1f053a6033 100 // modbus_response(0x02);
paicaloid 2:6d1f053a6033 101 // modbus_response(0x03);
vsupacha 0:f306cb0263a6 102 }
vsupacha 0:f306cb0263a6 103 }