11
Diff: lift-back-eth-keil/main.cpp
- Revision:
- 1:2a5890e25db5
- Parent:
- 0:9d6c79aa222a
diff -r 9d6c79aa222a -r 2a5890e25db5 lift-back-eth-keil/main.cpp --- a/lift-back-eth-keil/main.cpp Sun Jul 29 12:56:17 2018 +0000 +++ b/lift-back-eth-keil/main.cpp Tue Oct 02 17:03:10 2018 +0000 @@ -4,18 +4,38 @@ #include "UDPSocket.h" #include <string> #include <math.h> +#include <millis.h> -#include "DebounceIn.h" + +int ID=8; + +char myIP[16] = "192.168.1.10"; +char serverIP[16] = "192.168.1.100"; +char netMask[16] = "255.255.255.0"; +char gateWay[16] = "192.168.1.1"; + + +int portSend = 8000; +int portRecive = 9000; + +int delay=200;//msecond + Serial pc(USBTX, USBRX); EthernetInterface eth; -Thread recv_thread(osPriorityNormal, 16*1024); +DigitalIn btn(A0); +DigitalIn btn1(A1); +int btn1Tick = 0; +int btn1State= 0; + +Thread btn_thraed(osPriorityNormal, 16*1024); Thread send_thread(osPriorityNormal, 16*1024); Thread work_thread(osPriorityNormal, 16*1024); -DigitalIn btn(USER_BUTTON); + + typedef struct { char data[100]; @@ -28,11 +48,34 @@ Mutex datamutex; -int speed=0; -int dist=0; +int bt1=0; -int bt1=0; -int bt2=0; +void readBtn(void){ + while(1){ + wait_us(100); + datamutex.lock(); + if(!btn){ + btn1Tick++; + if (btn1Tick>20){ + btn1Tick=21; + btn1State=1; + }else{ + datamutex.lock(); + btn1State=0; + datamutex.unlock(); + } + }else{ + btn1Tick--; + if (btn1Tick<1){ + btn1Tick=1; + btn1State=0; + } + } + datamutex.unlock(); + } +} + + void recv(void) { @@ -42,7 +85,7 @@ UDPSocket sock; char recv_data[100]; pc.printf("r:sock.open=%d\r\n",sock.open(ð)); - pc.printf("r:sock.bind=%d\r\n",sock.bind(8000)); + pc.printf("r:sock.bind=%d\r\n",sock.bind(portRecive)); int ret; while(1) @@ -59,26 +102,24 @@ } else { - pc.printf("r:%\r\n",recv_data); + pc.printf("r:%\r\n",recv_data); mail_t *mail = recv_box.alloc(); int cpcnt; if (ret>sizeof(recv_data)) cpcnt=sizeof(recv_data); else cpcnt = ret; //copy no more than buffer size - memset(mail->data,0,sizeof(mail->data)); - memcpy (mail->data, recv_data,cpcnt); + memset(mail->data,0,sizeof(mail->data)); + memcpy (mail->data, recv_data,cpcnt); recv_box.put(mail); - pc.printf("r:put\r\n"); + pc.printf("r:put\r\n"); } } } + void send(void) { SocketAddress sockAddr; - // sockAddr.set_ip_address("192.168.137.1"); - //sockAddr.set_port(8000); UDPSocket sock; - //char recv_data[1500]; pc.printf("sock.open=%d\r\n",sock.open(ð)); int ret; @@ -90,9 +131,9 @@ if (evt.status == osEventMail) { mail_t *mail = (mail_t*)evt.value.p; - pc.printf("s:got data: %s; size: %d\n\r", mail->data,mail->size); + //pc.printf("s:got data: %s; size: %d\n\r", mail->data,mail->size); - ret = sock.sendto("192.168.1.101",9000, mail->data, mail->size); + ret = sock.sendto(serverIP,9000, mail->data, mail->size); if (ret < 0) { pc.printf("send error:%d\r\n",ret); @@ -101,7 +142,9 @@ } else { - pc.printf("sent %d bytes\r\n",ret); + //pc.printf("sent %d bytes\r\n",ret); + bt1=0; + } send_box.free(mail); } @@ -111,48 +154,7 @@ } -void zero_counters() -{ - datamutex.lock(); - dist=0; - datamutex.unlock(); -} -void parse(char *data) -{ - char cmd[100]; - char mask[100]; - - - memset (cmd,0, sizeof(cmd)); - int val1=0; - int val2=0; - int val3=0; - - if (1) - { - //pc.printf("r:%s",data); - // rxready=0; - uint8_t r = sscanf((const char *)data+1,"%s %s %d %d %d",cmd, mask, &val1, &val2, &val3); - if (r==0) - { - pc.printf("waat?\r\n"); - } - if (r<4) { - if (!strcmp(cmd,"reset")) - { - pc.printf("cmd reset\r\n"); - zero_counters(); - return; - } - - } - - - } - pc.printf("unknown command:%s\r\n",data); - -} void status_callback(nsapi_event_t status, intptr_t param) { @@ -177,9 +179,9 @@ break; } } -Timer pingt; -unsigned int -endian_swap(unsigned int x) + + +unsigned int endian_swap(unsigned int x) { return (x>>24) | @@ -187,58 +189,46 @@ ((x<<8) & 0x00ff0000) | (x<<24); } + void work(void) -{int rnd; - float s; - uint32_t cnt=0; +{ while(1) { - cnt++; - s=sin(float(cnt) / 100.0f); - if (s<0) s=-s; - if (btn==0) s=0; - datamutex.lock(); - speed=s*100; - dist=dist+speed; - rnd = rand(); - if (rnd>2000000000) bt1=1; else bt1=0; - if (rnd<200000000) bt2=1; else bt2=0; - - datamutex.unlock(); - wait(0.2f); - pc.printf("Dist:%d\t Speed:%d\tButton1:%d\tButton2:%d\t%d\n",dist,speed,bt1,bt2,rnd); - char datastr[128]; - mail_t *mail = send_box.alloc(); - const char send_data[]="/data\x00\x00\x00\x2ciiii\x00\x00\x00"; - memcpy(datastr,send_data,16); - int tmp; - tmp = endian_swap(speed); - memcpy(datastr+16,&tmp,4); - tmp = endian_swap(dist); - memcpy(datastr+20,&tmp,4); - tmp = endian_swap(bt1); - memcpy(datastr+24,&tmp,4); - tmp = endian_swap(bt2); - memcpy(datastr+28,&tmp,4); - memcpy (mail->data, datastr,32); - mail->size = 32; - send_box.put(mail); - - bt1=0; - bt2=0; + wait_ms(delay); + pc.printf("ID:%d\t State:%d\t\n",ID,btn1State); + char datastr[128]; + mail_t *mail = send_box.alloc(); + const char send_data[]="/data\x00\x00\x00\x2cii\x00"; + memcpy(datastr,send_data,16); + int tmp; + tmp = endian_swap(ID); + memcpy(datastr+12,&tmp,4); + tmp = endian_swap(btn1State); + memcpy(datastr+16,&tmp,4); + memcpy (mail->data, datastr,20); + mail->size = 20; + send_box.put(mail); } } int main() -{ pc.baud(115200); - pc.printf("Hello. Bike!\r\n"); +{ startMillis(); + sprintf(myIP,"%s%d",myIP, ID); + + + pc.baud(115200); + pc.printf("Hello. Alice!\r\n"); - pc.printf("eth.set=%d\r\n",eth.set_network("192.168.1.200","255.255.255.0","192.168.1.1")); + pc.printf("eth.set=%d\r\n",eth.set_network(myIP,netMask,gateWay)); int rz=eth.connect(); eth.attach(&status_callback); pc.printf("Status interrupt attached.\r\n"); pc.printf("eth.connect=%d\r\n",rz); + + btn1.mode(PullUp); + + if (rz<0) { pc.printf("reset\r\n"); HAL_NVIC_SystemReset(); @@ -246,13 +236,13 @@ pc.printf("IP address is '%s'\r\n", eth.get_ip_address()); - recv_thread.start(recv); send_thread.start(send); - work_thread.start(work); + work_thread.start(work); + btn_thraed.start(readBtn); pc.printf("threads started\r\n"); - while (1) + while (1) { osEvent evt = recv_box.get(10); if (evt.status == osEventMail) @@ -263,8 +253,8 @@ if (mail->data[i] == 0 || mail->data[i] == 0x2c || mail->data[i] == 0x2f) mail->data[i]=0x20; } //pc.printf("main thread: %s\r\n", mail->data); - mail->data[99]=0; - parse(mail->data); + mail->data[99]=0; + //parse(mail->data); send_box.free(mail); }