Applicatie microcontroller
Dependencies: mbed mbed-rtos EthernetInterface
Revision 2:0aa0fae12d8f, committed 2019-05-22
- Comitter:
- locojoko
- Date:
- Wed May 22 13:27:19 2019 +0000
- Parent:
- 1:617727625d66
- Commit message:
- :
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Apr 06 15:01:25 2015 +0000 +++ b/main.cpp Wed May 22 13:27:19 2019 +0000 @@ -1,73 +1,89 @@ -/*UDP通信サンプルコード - 自分:mbedAから相手:mbedBへのデータ送信方法、相手:mbedBから自分:mbedAへのデータ受信方法*/ +//Bibliotheken #include "mbed.h" #include "EthernetInterface.h" -Serial pc(USBTX, USBRX); // tx, rx +//Seriele communicatie +Serial pc(USBTX, USBRX); //seriële communicatie opstarten op pinnen USBTX en USBRX, deze kan worden gelezen aan de hand van bv putty + +//Timer +Ticker ticker; //declaratie van de ticker, gebruikt voor sampling +volatile int timer_flag = 0; //vlag die wordt geset en gereset bij elk timer-event -const char* A_ADDRESS = "192.168.1.1"; -const int A_PORT = 1000; +//UDP en ethernet +const char* A_ADDRESS = "192.168.1.1"; //ip adres van de K64F instellen (voor UDP socket) +const int A_PORT = 1000; //poort van K64F setten, wordt meegestuurd in UDP header +const char* B_ADDRESS = "192.168.1.101"; //ip adres van de bestemming, moet op bestemming juist worden geconfigureerd zodat het overeenstemt met dit adres +const int B_PORT = 2221; //poortnummer van het adres waarover zal worden gecommuniceerd, moet op bestemming (in Node-RED) worden geconfigureerd om naar deze poort te luisteren -const char* B_ADDRESS = "192.168.1.2"; -const int B_PORT = 2000; +float getal= 0.000; -int main() { - - char u_packet[2]; - u_packet[0]=0x41; u_packet[1]=0x42; //ex. - char u_buff[10]; +//Accelerometer +AnalogIn inX(A5); //x-as van accelerometer is fysiek verbonden met pin A5 van K64F +AnalogIn inY(A4); //y-as van accelerometer is fysiek verbonden met pin A4 van K64F +AnalogIn inZ(A3); //z-as van accelerometer is fysiek verbonden met pin A3 van K64F +float staticX; //deze variabele bevat de waarde van de x-as bij initialisatie/reset van de accelerometer +float staticY; //deze variabele bevat de waarde van de y-as bij initialisatie/reset van de accelerometer +float staticZ; //deze variabele bevat de waarde van de z-as bij initialisatie/reset van de accelerometer - EthernetInterface eth; - eth.init(A_ADDRESS, "255.255.255.0", ""); // Use hard IP - pc.printf("IP : %s\n", eth.getIPAddress()); - if (eth.connect() < 0) { +//Functie declaraties +void timer_isr(); //deze functie zal worden opgeroepen bij elk timer-event + +int main() { + //SETUP--------------------------------------------------------------------- + pc.printf("start microcontroller"); //stuurt bericht naar pc dat het programma is gestart + ticker.attach(&timer_isr,0.0003125); //initialiseert een ticker, dat om de 0.0003125s de functie timer_isr zal uitvoeren + + EthernetInterface eth; //de ethernetinterface die verantwoordelijk is voor de communicatie via de ethernetpoort van de k64f + eth.init(); // initialiseren van de interface + pc.printf("IP : %s\n", eth.getIPAddress()); //gateway ip-adres uitprinten van de ethernetinterface + if (eth.connect() < 0) { //als de connectie niet is gelukt, een error uitprinten naar pc pc.printf("Failed to connect\n\r"); return -1; } - UDPSocket sockA; - if (sockA.bind(A_PORT) < 0) { + while(eth.connect() < 0) { + eth.init(); + } + + UDPSocket sockA; //een UDP socket initialiseren + if (sockA.bind(A_PORT) < 0) { //een poort geven aan de socket, als dit faalt, een error uitprinten pc.printf("Failed to bind UDP Socket to PORT : %d\n\r", A_PORT); return -1; } - else pc.printf("Bind UDP Socket to PORT : %d\n\r", A_PORT); - sockA.set_blocking(false); + else pc.printf("Bind UDP Socket to PORT : %d\n\r", B_PORT); //poort van bestemming uitprinten - Endpoint EndpointA; - EndpointA.set_address(A_ADDRESS, A_PORT); + sockA.set_blocking(false); //socket op non-blocking mode zetten - Endpoint EndpointB; + //Endpoint EndpointA; //adress en poortnummer toekennen aan endpoint a + //EndpointA.set_address(A_ADDRESS, A_PORT); + Endpoint EndpointB; //adress en poortnummer toekennen aan endpoint b EndpointB.set_address(B_ADDRESS, B_PORT); - - /*----------- - MAIN ROOP - -----------*/ + + staticX = inX; + staticY= inY; + staticZ = inZ; + //-------------------------------------------------------------------------- + //EINDE SETUP + //MAIN LOOP----------------------------------------------------------------- while(1) { - /*--send--*/ - pc.printf("Send : %s\n", u_packet); - int n_send=sockA.sendTo(EndpointB, (char*)u_packet, sizeof(u_packet)); - wait_ms(1); - - if(n_send < 0){ - pc.printf("Sent unsuccessfully\n"); - return 0; - } - else pc.printf("Sent %d bytes Successfully!\n",n_send); - /*-receive--*/ - int n_receive=sockA.receiveFrom(EndpointB, (char*)u_buff, sizeof(u_buff)); - wait_ms(1); - - if(n_receive < 0){ - pc.printf("Received unsuccessfully\n"); - return 0; - } - else { - pc.printf("Received %d byte Successfully!\n",n_receive); - pc.printf("Received : %s\n",u_buff); - } + if (timer_flag) { + timer_flag = 0; + float x = (inX-staticX)*3300/330; //inX-staticX zorgt dat data bij stilstand rond 0 ligt (statische positie wegwerken) + float y = (inY-staticY)*3300/330; //schaalfactor 3300/330: *3300 om het signaal naar mV om te zetten, /330 om naar g om te zetten + float z = (inZ-staticZ)*3300/330; + char u_packet[20]; //initialiseren van een datapakket dat 3 floats moet bevatten + sprintf(u_packet, "%.3f,%.3f,%.3f \r",x, y, z); //3 floats, afgerond op 3 cijfers na de komma als string in u_packet steken + int n_send=sockA.sendTo(EndpointB, (char*)u_packet, sizeof(u_packet)); //u_packet verzenden via sockA naar endpointB + } } + //-------------------------------------------------------------------------- + //EINDE MAIN LOOP----------------------------------------------------------- sockA.close(false); eth.disconnect(); return 0; +} +void timer_isr() +{ + timer_flag = 1; //vlag setten } \ No newline at end of file