Loup Langard / Mbed 2 deprecated base_mbed_SAE1_S2-V0

Dependencies:   mbed

main.cpp

Committer:
dujardin
Date:
2021-12-18
Revision:
14:f632015dde70
Parent:
13:b19e2f833926
Child:
15:41977c40cfbe

File content as of revision 14:f632015dde70:

#include "mbed.h"  //
// SAE1-S2  programme d'interface carte MICROC et Temp
//****************** déclaration des broches ****************
Serial pc(SERIAL_TX, SERIAL_RX);            //  PORT SERIE SUR usb  !! 
AnalogIn  Ch1(A0) ;    // pour mesure de Vs de carte capteur
AnalogOut Vk(A4)  ;    // sortie compensation temperature vers capteur
AnalogIn  P1(A1)  ;AnalogIn  P0(A3) ; // temp = 3.3v et 3.3V 
AnalogIn  simulVs(A2) ;// potentiometre de simulation de Vs 
DigitalOut plus(D1);   // alim pull up interupteur  2 pins   
DigitalIn inter(D2);   // entrée mesure inter       0 ou 1   logique      
DigitalOut  LED(D9);   // sortie pour la LED de la carte MicroC
          
//****variables ***********************************************************
int   recpt = 0     ; // tampon : arrivée d'un octet de la liaison série  
float inVs  = 0.5   ; // pour lire la temperature dans Vs , 0 à 1 pour 0 à 3.3V
float simVs = 0.5   ; // pour lire V potentiomètre pareil , 0 à 1 pour 0 à 3.3V
float outVk = 0.3681; // pour sortir vK, 0,3681 fait Vk = 1.244  (  20°C +-10mv)
float P     = 0.1   ; // tampon de lecture des broches P0 et P1 
int   out   = 0     ; // variable de sortie à serialiser en duj10

//******** détail vers les sous programmes 
void interrupt();  // lié à la liaison série   ( en bas de page)

void init(void)    // initialisations hard  
    {
    pc.baud(115200);     // vitesse liaison série
    pc.attach(&interrupt, Serial::RxIrq);  // autorise IT de liaison serie 
    plus = 1;            // polarisation de la résistance de l'inter
    LED = 0 ;            // led du MicroC off
    Vk.write(outVk);     // sortie de  outVK sur la broche  vK 
    }
    
int main()
    {
    init(); 
    while(1)
        {
        wait(1); // boucle d'une seconde
           
        if( inter == 1)    // test inter sur carte MicroC
            {  pc.putc('w');   }   
        if( inter == 0)    // test inter sur carte MicroC
            {  pc.putc('v');   }   
            
        P = P0.read();     // regarde la tension sur P0
        if ( P > 0.51 ) pc.putc('s');  
        if ( P < 0.49 ) pc.putc('r');  
        P = P1.read();     // regarde la tension sur P1
        if ( P > 0.51 ) pc.putc('u');  
        if ( P < 0.49 ) pc.putc('t');  
            
        simVs =  simulVs.read();  // lire le potentiomètre 
        out = 333*simVs        ;  // mettre dans une echelle 0 à 333
        pc.putc('D');             // ouvrir transfert
        pc.printf("%d", out);     // duj10 du pot ( de 0 à 333)
        pc.putc('P');             // fermer et utiliser   
      
        inVs =  Ch1.read();       // lire l'entrée temp
        out = 333*inVs        ;   // mettre dans une echelle 0 à 333
        pc.putc('D');             // ouvrir transfert
        pc.printf("%d", out);     // duj10 de la temperature ( de 0 à 333)
        pc.putc('T');             // fermer et utiliser     
        
                                  // LIRE  vK  
        out = 1000*outVk ;        // mettre dans une echelle 0 à 1000
        pc.putc('D');             // ouvrir transfert
        pc.printf("%d", out);     // duj10 de vK en fait 
        pc.putc('C');             // fermer et utiliser    
        Vk.write(outVk);          // sortie outVk sur broche  vK 
        }
    }
    
void interrupt()//"recepteur"  à chaque carractère reçut ce programme est activé
    {  // 
    recpt =  pc.getc();  
    // action sur la LED carte microC
    if ( recpt == 'l') LED = 1 ; //allumer   LED 
    if ( recpt == 'k') LED = 0 ; //eteindre  LED 
    // augmenter ou baisser Vk ( compensation en température)  
    if ( recpt == 'm') {outVk = outVk - 0.02  ; if ( outVk < 0.05) outVk = 0.06;} // 20/1000
    if ( recpt == 'p') {outVk = outVk + 0.02  ; if ( outVk > 0.95) outVk = 0.94;} 
    if ( recpt == 'r') {outVk = outVk - 0.001 ; if ( outVk < 0.05) outVk = 0.06;} //  1/1000
    if ( recpt == 's') {outVk = outVk + 0.001 ; if ( outVk > 0.95) outVk = 0.94;} 
    if ( recpt == 't')  outVk = 0.3681 ; //vK remis à 20°C (environ )

    return;
    }