Applicatie microcontroller

Dependencies:   mbed mbed-rtos EthernetInterface

main.cpp

Committer:
locojoko
Date:
2019-05-22
Revision:
2:0aa0fae12d8f
Parent:
1:617727625d66

File content as of revision 2:0aa0fae12d8f:

//Bibliotheken
#include "mbed.h"
#include "EthernetInterface.h" 

//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

//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

float getal= 0.000; 

//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

//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;
    }
    
    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", B_PORT);     //poort van bestemming uitprinten
    
    sockA.set_blocking(false);  //socket op non-blocking mode zetten
    
    //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);
    
    staticX = inX; 
    staticY= inY;
    staticZ = inZ;
    //--------------------------------------------------------------------------
    //EINDE SETUP
    //MAIN LOOP-----------------------------------------------------------------
    while(1) { 
        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
}