Temperature sur LCD + Moteurs + Capteur Arret

Dependencies:   HTU21D MD25 TextLCD mbed VCNL4000

Fork of HTU21D_HELLOWORLD by Guillaume GARBAY

main.cpp

Committer:
Guillaume31
Date:
2015-04-13
Revision:
5:e0b9e2bf8b35
Parent:
4:28ea47b9e0ae

File content as of revision 5:e0b9e2bf8b35:

// Librairies
#include "mbed.h"               // Standard
#include "MD25.h"               // Moteurs
#include "TextLCD.h"            // Ecran LCD
#include "HTU21D.h"             // Capteur Temperature / Humidite
#include "VCNL4000.h"           // Capteur Luminosite / Distance


// Declarations E/S //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DigitalIn bouton (USER_BUTTON);                                     // Bouton d'arret total du robot
DigitalIn bouton_poussoir(D9);                                      // Pin PC7 Bouton poussoir demarrage
DigitalIn cap_arret(PA_9);                                          // Pin PA9 capteur d'arret (Devant)
 
Serial pc(SERIAL_TX, SERIAL_RX);                                    // Port Serie avec le PC

TextLCD lcd(D2, D3, D4, D5, D6, D7,TextLCD::LCD20x4);               // Ecran LDC (rs, e, d4-d7)
MD25 i2c(I2C_SDA, I2C_SCL);                                         // Moteurs  :   100kHz clock, addr B0, reg 0=speedl, 1=speedr (0 (Full Reverse) 128 (Stop) 255 (Full Forward). 15=mode (set to 0 default)
HTU21D temphumid(D14, D15);//HTU21D temp(I2C_SDA, I2C_SCL);                                    // Capteur Temperature / Humidite 
VCNL4000 vcnl(D14, D15 );//VCNL40x0 VCNL40x0_Device (I2C_SDA, I2C_SCL, VCNL40x0_ADDRESS);      // Capteur Luminosite / Distance Define SDA, SCL pin and I2C address 


// Fonctions pour les Moteurs ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Prototypes ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void init_motors (void);                            // Initialisation des Moteurs
    void setSpeed (int speedMotor1, int speedMotor2);   // Definir Vitesse moteurs

// Definition ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void init_motors(void) {
        i2c.setMode(0);         // MODE 0, 0=marche arriere 128=stop 255=marche arriere vmax
        i2c.setCommand(32);     // 0x20 reset encoders
        i2c.setCommand(50);     // 0X32 Disable time out
        //i2c.setCommand(32);   // 0x20 reset encoders
        //i2c.setCommand(48);   // 0X32 Disable speed regulation
    }
     
    void setSpeed (int vitMotor1, int vitMotor2) {
        i2c.setSpeedRegisters(vitMotor1,vitMotor2); 
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////Fonction d'Initialisation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Luminosite /////////////////
void init_vcnl () {
vcnl.setALAveragingFunction( 0x0f );
    vcnl.setIRLedCurrent( 2000 );
    vcnl.setProximityMeasurementSigFreq( 2 );
    vcnl.setProxiModulatorDelayTime( 0x04 );
    vcnl.setProxiModulatorDeadTime( 0x01 );
}

// Initialisation /////////////////
void initialisations () { 
    lcd.printf("Initialisation\n");   
    pc.printf("Initialisation\n\r");
    bouton.mode (PullUp);                       // Bouton Utilisateur 
    bouton_poussoir.mode (PullUp);              // Bouton Poussoir
    init_motors();                              // Initialise Moteur
    int status = vcnl.getStatus();
    if( status != 0 ) {
        lcd.printf( "Erreur VCNL !!\n\r"); wait (4);
        exit( 1 );
    }
    init_vcnl();
    
    pc.printf("Fin Initialisation\n\r");
    lcd.printf("Fin Initialisation\n");
    wait(0.5);
}

// Fonction Principale //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main() { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    pc.printf("\n\n\n\n\n\n\n\n Majord'home: Hello! Programme\n\r"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    lcd.printf("Majord'home: Hello!\n"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    wait(1); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    initialisations (); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
// Declaration Variables Locales
    float Ftemp, Ctemp, Ktemp, Humid;       // Temperature et humidite
    int prox, ambl;                         // Proximite et Luminosite
 
    
// Init des Temperatures et Humidite
    Ftemp = temphumid.sample_ftemp();       Ctemp = temphumid.sample_ctemp();       Ktemp = temphumid.sample_ktemp();       Humid = temphumid.sample_humid();
// Init des Proximite et Luminosite   
    prox = vcnl.getProximity();     ambl = vcnl.getAmbientLight();
    
// Boucle Infinie //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    lcd.cls();  lcd.locate(0,0);
    lcd.printf("%.2f C  %.2f %% Hum", Ctemp, Humid); lcd.locate(0,1);
    lcd.printf("%.2f F  %.2f K", Ftemp, Ktemp); lcd.locate(0,2);
    lcd.printf("Lum %d  Pr %d", ambl, prox); lcd.locate(0,3);
    lcd.printf("Debut While(1)");
    pc.printf("Debut While(1)\n\r");
    wait(2); lcd.cls();  lcd.locate(0,0);
    
    while(1) { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        // Affichage temperature humidite
        lcd.locate(0,0);
        Ctemp = temphumid.sample_ctemp();   Humid = temphumid.sample_humid();
        lcd.printf("%.2f C  %.2f %% Hum", Ctemp, Humid);
        // Affichage Luminosite proximite
        lcd.locate(0,1);
        prox = vcnl.getProximity();     ambl = vcnl.getAmbientLight(); 
        lcd.printf("Lum %d  Pr %d", ambl, prox);       
        
        
        // Arret moteur si Obstacle detecte
        lcd.locate(0,2);
        cap_arret.read();
        if (cap_arret==0) {
            lcd.printf("A=0");
            setSpeed(128,128);
            }
        else
            lcd.printf("A=1");
        
        // Lancement moteur
        if (bouton_poussoir == 0) 
            setSpeed(60,60);   
        
    }
}