TP OS12-MT

Dependencies:   mbed C12832

main.cpp

Committer:
Etudiant_RT9749
Date:
2019-03-25
Revision:
0:576717be4fce

File content as of revision 0:576717be4fce:

#include "mbed.h"
#include "C12832.h"

Ticker Acquisition;
AnalogOut Out(p18);
AnalogIn In(p17);

C12832 lcd(p5, p7, p6, p8, p11);

static unsigned char Echant_Ok = 0;

const int C_continu  = 2048;

char buffer_can_logarithmique[100] = {};
char buffer_in[100] = {};
char buffer_filtre[100] = {};

//static float a[] = {};
//static float b[] = {};

static float En[2] = {0,0};
static float Sn[3] = {0,0,0};

/**
Taille des variables en memoire :
    * short int = 2 octets = 8 bits
    * int = 4 octets = 16 bits
    * float = 4 octets = 32 bits
    * double = 8 octect = 256 bits
**/


// Fonction Echantillonnage
void Echantillonage() {
  Echant_Ok=1;
}

double CAN_log_func(int x){
    double y = 0;
    
    if (x > 0 && x <= 32){
        y = x * 16;
    } else if (x > 0 && x <= 32){
        y = x * 8 - 1/8;
    } else if (x > 32 && x <= 64){
        y = x * 4 + 1/4;
    } else if (x > 64 && x <= 128){
        y = x * 2 + 3/8;
    } else if (x > 128 && x <= 256){
        y = x + 1/2;
    } else if (x > 256 && x <= 512){
        y = x * 1/2 + 5/8;
    } else if (x > 512 && x <= 1024){
        y = x * 1/4 + 3/4;
    }
    return y;
}

float Filtrage(int x){
    return (0.1*En[0]-0.0897*En[1]+1.55952*Sn[1]-0.6065*Sn[2]);
}

int main(){
  // Declanchement de la fonction d'échantillonnage
  Acquisition.attach_us(&Echantillonage,125);
  
  // Boucle infini
  while (true) {
    if (Echant_Ok == 1) {
        // Quantification
        int entree_uni = In.read_u16();
        int entree_log = CAN_log_func(entree_uni - C_continu);

        En[1] = En[0];
        En[0] = entree_log;
        
        Sn[2] = Sn[1];
        Sn[1] = Sn[0];
        Sn[0] = Filtrage(En[0]);
        
        sprintf(buffer_in, "Valeur : %d | %d", entree_uni, (entree_uni - C_continu));
        sprintf(buffer_can_logarithmique, "Quantification : %d", entree_log);
        sprintf(buffer_filtre, "En=%d | Sn=%f", entree_log, Filtrage(entree_log));
        
        lcd.locate(0,3);
        lcd.printf(buffer_in);
        
        lcd.locate(0,11);
        lcd.printf(buffer_can_logarithmique);
        
        lcd.locate(0,19);
        lcd.printf(buffer_filtre);
        
    }
    Echant_Ok = 0;
  }
}