Windshape control / Mbed OS Controle_ventilo_ethernet_v1_2_4

Fork of Controle_ventilo_ethernet_v1_2_4 by Sergio Márquez

main.cpp

Committer:
Brutus
Date:
2017-01-20
Revision:
3:6c54aa6db861
Parent:
2:1dd0818af42e
Child:
4:fb63da7601aa

File content as of revision 3:6c54aa6db861:

#include "mbed.h"
#include "EthernetInterface.h"
#include "Ethernet.h"

#include "TCPSocket.h"

#include "SocketAddress.h"
#include "Socket.h"
#include "UDPSocket.h"

#include <string.h> 
//using namespace std;

const char* ECHO_SERVER_ADDRESS = "192.168.0.146";    // addresse du PC home "192.168.1.2" sergio "169.254.61.104" or "129.194.185.33" or "255.255.252.0" liotard "10.136.134.73"
//#define IP "10.136.134.100"
//#define GATEWAY "10.136.132.1"         //"129.194.184.1"
//#define MASK "255.255.252.0"
const int ECHO_SERVER_PORT = 1025;  

// Front fans
//PwmOut frontFans[] = {(PB_11), (PE_14), (PE_9), (PB_3), (PB_15), (PB_6), (PB_13), (PE_5), (PC_8)}; // PE_11 also possible for front fan n°5

// Rear fans
//PwmOut rearFans[] = {(PB_10), (PE_12), (PE_10), (PE_11), (PC_6), (PD_13), (PC_7), (PE_6), (PC_9)}; // PE_10 also possible for rear fans n°5

PwmOut frontFans[9]={PB_11,PE_14,PE_9,PB_3,PB_15,PB_6,PB_13,PE_5,PC_8};
PwmOut rearFans[9]={PB_10,PE_12,PE_10,PE_11,PC_6,PD_13,PC_7,PE_6,PC_9};

DigitalOut fantest(LED1);

// Receive string
char FR_str[2] = {0};
char fan_str[10] = {0};
char pwm_str[4] = {0};
int FR = 0;
int fan[10] = {0};
float pwm_f = 0.0;
int FR_len = 0;
int fan_len = 0;
int pwm_len = 0;

void splitString(char stringToSplit[]);

int main(int argc, char *argv[]) {
    
    for(int j = 0; j < 9; j++){
        frontFans[j].period_ms(10);
        rearFans[j].period_ms(10);
        frontFans[j].write(0.0);
        rearFans[j].write(0.0);
    }
    
    /*fantest.period_ms(10);
    fantest.write(0.1);*/
    
    EthernetInterface eth;                          // init interface ethernet de la carte
    UDPSocket sock;                                 // init le socket en UDP de la carte
    SocketAddress echo_server; 
    
    eth.connect();
    sock.open(&eth);
    
    //eth.set_network(IP,MASK,GATEWAY);
    
    printf("\nClient IP Address is %s \n", eth.get_ip_address());
    
    echo_server.set_ip_address(ECHO_SERVER_ADDRESS);
    echo_server.set_port(ECHO_SERVER_PORT);
    
    fantest = 1;
    wait(1);
    fantest = 0;
    wait(1);
    
    //wait(10);
    
    while(1){
        char out_buffer[] = "Envoyez moi une vitesse plz !";
        printf("Sending  message '%s' to server (%s)\n",out_buffer,ECHO_SERVER_ADDRESS);
        sock.sendto(echo_server, out_buffer, sizeof(out_buffer));
        
        char in_buffer[256];
        int n = sock.recvfrom(&echo_server, in_buffer, sizeof(in_buffer));    
        
        in_buffer[n] = '\0';
        
        printf("%s\n", in_buffer);
        
        //int buff_in = atoi(in_buffer);
        splitString(in_buffer);
        
        printf("%d\n%d\n%lf\n", FR, fan[2], pwm_f);
        
        //wait(10);
        
        switch(FR){
            case 0:         // front fans
            for(int i = 0; i < fan_len; i++){
                frontFans[fan[i] - 1].write(pwm_f);
            }
            break;
            
            case 1:         // rear fans
            for(int i = 0; i < fan_len; i++){
                rearFans[fan[i] - 1].write(pwm_f);
            }
            break;
            
            case 2:         // both fans
            for(int i = 0; i < fan_len; i++){
                frontFans[fan[i] - 1].write(pwm_f);
                rearFans[fan[i] - 1].write(pwm_f);
            }
            break;
            
            default:
            for(int j = 0; j < 9; j++){
                frontFans[j].write(0.0);
                rearFans[j].write(0.0);
            }
        }
        
        //wait(5);
    }
}

void splitString(char stringToSplit[]){
    char *comma_1 = strchr(stringToSplit, ',') + 1;
    char *comma_2 = strchr(comma_1, ',') + 1;
    char *comma_3 = strchr(comma_3, '\0');
    
    FR_len = comma_1 - stringToSplit - 1;
    fan_len = comma_2 - comma_1 - 1;
    pwm_len = comma_3 - comma_2;
    
    strncpy(FR_str, stringToSplit, 1);
    FR = atoi(FR_str);
    
    strncpy(fan_str, comma_1, fan_len);
    for(int i = 0; i < fan_len; i++){
        fan[i] = fan_str[i] - '0';
    }
    
    strncpy(pwm_str, comma_2, pwm_len);
    int pwm = atoi(pwm_str);
    pwm_f = (float)pwm/100.0;
}