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.
Diff: communicate.h
- Revision:
- 13:57d8e360e9aa
- Parent:
- 11:565fca1ead5b
- Child:
- 14:943e663694c3
--- a/communicate.h Mon Nov 02 09:04:20 2015 +0000
+++ b/communicate.h Tue Nov 03 00:45:17 2015 +0000
@@ -29,276 +29,31 @@
#define MBED_TX p28
#define MBED_RX p27
Serial MbedSerial(MBED_TX,MBED_RX);
-
-inline void initializeMbedSerial(){
- MbedSerial.format(8,Serial::Even);
-}
-
-#ifdef IM920
-/***IM920 Communication.***/
-char rcvBUFF_IM920[40], rcvBUFF_SBDBT[40];
-int rcvCOUNT_IM920 = 0, rcvCOUNT_SBDBT = 0;
-int rcvFLAG = 0;
-int sendFLAG = 0;
-int deadCOUNT = 0;
-int deadflag = 0;
-int oldDATA;
-unsigned int cm, a2, b, X=5, Y=5;
-unsigned int sendDATA = 0;
-unsigned long outDATA[4];
-
-Serial IM920_USART(p9, p10);
-Serial SBDBT_USART(p28, p27);
-DigitalIn BUSY(p8);
-
-Ticker DTimer;
-
-void DEVICE_TX(int DATA, int DEVICE = 0) {
- char sDATA[2];
- if (DATA <= 15)
- sprintf(sDATA, "0%X", DATA);
- else
- sprintf(sDATA, "%X", DATA);
-
- if (DEVICE == 1) {
- IM920_USART.printf("TXDA %s\r\n", sDATA);
- }
- else if (DEVICE == 2) {
- SBDBT_USART.printf("00000000000%s\r\n", sDATA);
- }
- else {
- IM920_USART.printf("TXDA %s\r\n", sDATA);
- SBDBT_USART.printf("00000000000%s\r\n", sDATA);
- }
-}
+unsigned int a2, b, X, Y;
-int cvsendDATA(int Buzzer, int LED) {
-/*
- if (Buzzer > 1)
- Buzzer = 1;
- else if (Buzzer < 0)
- Buzzer = 0;
- if (LED < 0)
- LED = 0;
- else if (LED >= 16)
- LED = 15;
-*/
- Buzzer = 0;
- LED = 0;
- return (Buzzer << 6) | (LED << 2);
-}
-
-void cvrecvDATA(char *buffDATA, unsigned long *outputDATA) {
- char s1[2], s2[2], s3[2], s4[2];
- strncpy(s1, buffDATA+11, 2);
- strncpy(s2, buffDATA+14, 2);
- strncpy(s3, buffDATA+17, 2);
- strncpy(s4, buffDATA+20, 2);
- outputDATA[0] = strtoul(s1, (char **) NULL, 16);
- outputDATA[1] = strtoul(s2, (char **) NULL, 16);
- outputDATA[2] = strtoul(s3, (char **) NULL, 16);
- outputDATA[3] = strtoul(s4, (char **) NULL, 16);
-}
-
-void cvrecvDATAsbdbt(char *buffDATA, unsigned long *outputDATA) {
- char s1[2], s2[2];
- strncpy(s1, buffDATA+5, 2);
- strncpy(s2, buffDATA+7, 2);
- outputDATA[0] = strtoul(s1, (char **) NULL, 16);
- outputDATA[1] = strtoul(s2, (char **) NULL, 16);
-}
-
-void readDATA(unsigned long* outDATA) {
- cm = (outDATA[0] & 128) >> 7;
- a2 = (outDATA[0] & 64) >> 6;
- X = (outDATA[0] & 56) >> 3;
- Y = outDATA[0] & 7;
- b = outDATA[1];
-}
-
-void SBDBT_RX() {
- char rcvDATA;
- rcvDATA = SBDBT_USART.getc();
- rcvBUFF_SBDBT[rcvCOUNT_SBDBT] = rcvDATA;
- rcvCOUNT_SBDBT++;
- if (rcvDATA == 0x0A) {
- rcvCOUNT_SBDBT = 0;
- rcvFLAG = 2;
+void getMbed(){
+ unsigned int info = MbedSerial.getc();
+ if (info & 128){ //B1~B4,B5~B11
+ for(int s=1,i=1;i<=7;i++){
+ if(info & s){
+ b = i;
+ break;
+ }
+ if(i==7) b = 0;
+ s <<= 1;
+ }
}
- else if (rcvCOUNT_SBDBT >= 40) {
- rcvCOUNT_SBDBT = 0;
- memset(rcvBUFF_SBDBT, '\0', 40);
- }
-}
-
-void IM920_RX() {
- char rcvDATA;
- rcvDATA = IM920_USART.getc();
- rcvBUFF_IM920[rcvCOUNT_IM920] = rcvDATA;
- rcvCOUNT_IM920++;
- if (rcvDATA == 0x0A) {
- rcvCOUNT_IM920 = 0;
- rcvFLAG = 1;
- }
- else if (rcvCOUNT_IM920 >= 40) {
- rcvCOUNT_IM920 = 0;
- memset(rcvBUFF_IM920, '\0', 40);
+ else{ //A2,X,Y
+ Y = info & 7;
+ info >>= 3;
+ X = info & 7;
+ info >>= 3;
+ a2 = info & 1;
}
}
-void deadCheck() {
- if (rcvFLAG == 0 && deadCOUNT >= 5) {
- deadflag = 1;
- deadCOUNT = 0;
- }
- else if (rcvFLAG == 0 && deadCOUNT >= 2) {
- deadCOUNT++;
- DEVICE_TX(sendDATA);
- }
- else if (rcvFLAG == 0) {
- deadCOUNT++;
- }
- sendDATA = cvsendDATA(0, 0);
-}
-
-inline void initializeIM920(){
- IM920_USART.baud(9600);
- IM920_USART.format(8, Serial::None, 1);
- IM920_USART.attach(IM920_RX, Serial::RxIrq);
- SBDBT_USART.baud(9600);
- SBDBT_USART.format(8, Serial::None, 1);
- SBDBT_USART.attach(SBDBT_RX, Serial::RxIrq);
- DTimer.attach(deadCheck, 0.3);
- sendDATA = cvsendDATA(0, 0);
-}
-
-inline void readIM920(){
- if (rcvFLAG == 1) {
- if (strlen(rcvBUFF_IM920) > 8) {
- cvrecvDATA(rcvBUFF_IM920, outDATA);
- readDATA(outDATA);
- deadCOUNT = 0;
- deadflag = 0;
- DEVICE_TX(sendDATA, 1);
- }
- memset(rcvBUFF_IM920, '\0', 40);
- rcvFLAG = 0;
- }
- else if (rcvFLAG == 2) {
- if (strlen(rcvBUFF_SBDBT) > 4) {
- cvrecvDATAsbdbt(rcvBUFF_SBDBT, outDATA);
- readDATA(outDATA);
- deadCOUNT = 0;
- deadflag = 0;
- DEVICE_TX(sendDATA, 2);
- }
- memset(rcvBUFF_SBDBT, '\0', 40);
- rcvFLAG = 0;
- }
-}
-#else
-/***Get state ps3con.***/
-#define SBDBT_TX p28
-#define SBDBT_RX p27
-Serial SBDBT(SBDBT_TX, SBDBT_RX);
-#define ps3_start 0x80
-short toggle = 0;
-short edge_circle = 0;
-short edge_triangle = 0;
-short edge_square = 0;
-short edge_r1 = 0;
-short edge_l1 = 0;
-short edge_r2 = 0;
-short edge_l2 = 0;
-short edge_l_up = 0;
-short edge_l_down = 0;
-short edge_r_up = 0;
-short edge_r_down = 0;
-short edge_right = 0;
-short edge_left = 0;
-short edge_up = 0;
-short edge_down = 0;
-short edge_cross = 0;
-short square = 0;
-short triangle = 0;
-short circle = 0;
-short cross = 0;
-short up = 0;
-short down = 0;
-short right = 0;
-short left = 0;
-short l1 = 0;
-short l2 = 0;
-short r1 = 0;
-short r2 = 0;
-signed int analog_lx = 0;
-signed int analog_ly = 0;
-signed int analog_rx = 0;
-signed int analog_ry = 0;
-int count = 0;
-int sample = 0;
-int ps3_data[7];
-inline void data_clear();
-inline void data_check();
-inline void SBDBT_interrupt();
-inline void initializeSBDBT();
-
-inline void data_clear()
-{
- for(int i=0; i<7; i++) ps3_data[i]=0;
-}
-inline void data_check()
-{
- square=0,triangle=0,circle=0,cross=0,up=0,down=0,right=0,left=0,l1=0,l2=0,r1=0,r2=0;
- analog_lx=0,analog_ly=0,analog_rx=0,analog_ry=0;
- if((ps3_data[0]==0x00)&&(ps3_data[1]==0x01)) up=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x02)) down=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x04)) right=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x08)) left=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x10)) triangle=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x20)) cross=1;
- else if((ps3_data[0]==0x00)&&(ps3_data[1]==0x40)) circle=1;
- else if((ps3_data[0]==0x01)&&(ps3_data[1]==0x00)) square=1;
- else if((ps3_data[0]==0x02)&&(ps3_data[1]==0x00)) l1=1;
- else if((ps3_data[0]==0x04)&&(ps3_data[1]==0x00)) l2=1;
- else if((ps3_data[0]==0x08)&&(ps3_data[1]==0x00)) r1=1;
- else if((ps3_data[0]==0x10)&&(ps3_data[1]==0x00)) r2=1;
- analog_lx=64-(signed int)ps3_data[2];
- analog_ly=64-(signed int)ps3_data[3];
- analog_rx=64-(signed int)ps3_data[4];
- analog_ry=64-(signed int)ps3_data[5];
- if(!circle) edge_circle=1;
- if(!triangle) edge_triangle=1;
- if(!r1) edge_r1=1;
- if(!l1) edge_l1=1;
- if(!r2) edge_r2=1;
- if(!l2) edge_l2=1;
- if(!right) edge_right=1;
- if(!left) edge_left=1;
- if(!up) edge_up=1;
- if(!square) edge_square=1;
- if(!down) edge_down=1;
- if(!cross) edge_cross=1;
-}
-///interrupt SBDBT RX.
-inline void SBDBT_interrupt()
-{
- sample=SBDBT.getc();
- if(count==7) data_clear();
- if(sample==ps3_start) count=0;
- else {
- ps3_data[count]=sample;
- count++;
- }
- if(count==6) data_check();
-}
-inline void initializeSBDBT()
-{
- wait(0.1);
- while(analog_ly==-64)
- for(int i=0; i<7; i++) ps3_data[i]=0;
- SBDBT.baud(2400);
- SBDBT.format(8, Serial::None, 1);
- SBDBT.attach(SBDBT_interrupt, Serial::RxIrq);
-}
-#endif
+inline void initializeMbedSerial(){
+ MbedSerial.baud(9600);
+ MbedSerial.format(8,Serial::Even);
+ MbedSerial.attach(getMbed,Serial::RxIrq);
+}
\ No newline at end of file