Temperature sur LCD + Moteurs + Capteur Arret

Dependencies:   HTU21D MD25 TextLCD mbed VCNL4000

Fork of HTU21D_HELLOWORLD by Guillaume GARBAY

Committer:
Guillaume31
Date:
Mon Apr 13 16:31:02 2015 +0000
Revision:
5:e0b9e2bf8b35
Parent:
4:28ea47b9e0ae
LCD + Arret + Luminosite + Temperature + Moteurs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Guillaume31 3:56643150d07d 1 // Librairies
Guillaume31 3:56643150d07d 2 #include "mbed.h" // Standard
Guillaume31 3:56643150d07d 3 #include "MD25.h" // Moteurs
Guillaume31 3:56643150d07d 4 #include "TextLCD.h" // Ecran LCD
Guillaume31 3:56643150d07d 5 #include "HTU21D.h" // Capteur Temperature / Humidite
Guillaume31 5:e0b9e2bf8b35 6 #include "VCNL4000.h" // Capteur Luminosite / Distance
Guillaume31 3:56643150d07d 7
Guillaume31 3:56643150d07d 8
Guillaume31 3:56643150d07d 9 // Declarations E/S //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 10
Guillaume31 3:56643150d07d 11 DigitalIn bouton (USER_BUTTON); // Bouton d'arret total du robot
Guillaume31 3:56643150d07d 12 DigitalIn bouton_poussoir(D9); // Pin PC7 Bouton poussoir demarrage
Guillaume31 3:56643150d07d 13 DigitalIn cap_arret(PA_9); // Pin PA9 capteur d'arret (Devant)
alipford3 0:8c0ef32974f0 14
Guillaume31 3:56643150d07d 15 Serial pc(SERIAL_TX, SERIAL_RX); // Port Serie avec le PC
Guillaume31 3:56643150d07d 16
Guillaume31 3:56643150d07d 17 TextLCD lcd(D2, D3, D4, D5, D6, D7,TextLCD::LCD20x4); // Ecran LDC (rs, e, d4-d7)
Guillaume31 3:56643150d07d 18 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)
Guillaume31 3:56643150d07d 19 HTU21D temphumid(D14, D15);//HTU21D temp(I2C_SDA, I2C_SCL); // Capteur Temperature / Humidite
Guillaume31 4:28ea47b9e0ae 20 VCNL4000 vcnl(D14, D15 );//VCNL40x0 VCNL40x0_Device (I2C_SDA, I2C_SCL, VCNL40x0_ADDRESS); // Capteur Luminosite / Distance Define SDA, SCL pin and I2C address
Guillaume31 3:56643150d07d 21
Guillaume31 3:56643150d07d 22
Guillaume31 3:56643150d07d 23 // Fonctions pour les Moteurs ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 24 // Prototypes ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 25 void init_motors (void); // Initialisation des Moteurs
Guillaume31 3:56643150d07d 26 void setSpeed (int speedMotor1, int speedMotor2); // Definir Vitesse moteurs
alipford3 0:8c0ef32974f0 27
Guillaume31 3:56643150d07d 28 // Definition ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 29 void init_motors(void) {
Guillaume31 3:56643150d07d 30 i2c.setMode(0); // MODE 0, 0=marche arriere 128=stop 255=marche arriere vmax
Guillaume31 3:56643150d07d 31 i2c.setCommand(32); // 0x20 reset encoders
Guillaume31 3:56643150d07d 32 i2c.setCommand(50); // 0X32 Disable time out
Guillaume31 3:56643150d07d 33 //i2c.setCommand(32); // 0x20 reset encoders
Guillaume31 3:56643150d07d 34 //i2c.setCommand(48); // 0X32 Disable speed regulation
Guillaume31 3:56643150d07d 35 }
Guillaume31 3:56643150d07d 36
Guillaume31 3:56643150d07d 37 void setSpeed (int vitMotor1, int vitMotor2) {
Guillaume31 3:56643150d07d 38 i2c.setSpeedRegisters(vitMotor1,vitMotor2);
Guillaume31 3:56643150d07d 39 }
Guillaume31 3:56643150d07d 40 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 41
Guillaume31 4:28ea47b9e0ae 42 ////Fonction d'Initialisation //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 4:28ea47b9e0ae 43 // Luminosite /////////////////
Guillaume31 4:28ea47b9e0ae 44 void init_vcnl () {
Guillaume31 4:28ea47b9e0ae 45 vcnl.setALAveragingFunction( 0x0f );
Guillaume31 4:28ea47b9e0ae 46 vcnl.setIRLedCurrent( 2000 );
Guillaume31 4:28ea47b9e0ae 47 vcnl.setProximityMeasurementSigFreq( 2 );
Guillaume31 4:28ea47b9e0ae 48 vcnl.setProxiModulatorDelayTime( 0x04 );
Guillaume31 4:28ea47b9e0ae 49 vcnl.setProxiModulatorDeadTime( 0x01 );
Guillaume31 4:28ea47b9e0ae 50 }
Guillaume31 3:56643150d07d 51
Guillaume31 4:28ea47b9e0ae 52 // Initialisation /////////////////
Guillaume31 3:56643150d07d 53 void initialisations () {
Guillaume31 3:56643150d07d 54 lcd.printf("Initialisation\n");
Guillaume31 3:56643150d07d 55 pc.printf("Initialisation\n\r");
Guillaume31 3:56643150d07d 56 bouton.mode (PullUp); // Bouton Utilisateur
Guillaume31 3:56643150d07d 57 bouton_poussoir.mode (PullUp); // Bouton Poussoir
Guillaume31 3:56643150d07d 58 init_motors(); // Initialise Moteur
Guillaume31 4:28ea47b9e0ae 59 int status = vcnl.getStatus();
Guillaume31 4:28ea47b9e0ae 60 if( status != 0 ) {
Guillaume31 4:28ea47b9e0ae 61 lcd.printf( "Erreur VCNL !!\n\r"); wait (4);
Guillaume31 4:28ea47b9e0ae 62 exit( 1 );
Guillaume31 4:28ea47b9e0ae 63 }
Guillaume31 4:28ea47b9e0ae 64 init_vcnl();
Guillaume31 3:56643150d07d 65
Guillaume31 3:56643150d07d 66 pc.printf("Fin Initialisation\n\r");
Guillaume31 3:56643150d07d 67 lcd.printf("Fin Initialisation\n");
Guillaume31 4:28ea47b9e0ae 68 wait(0.5);
Guillaume31 3:56643150d07d 69 }
alipford3 0:8c0ef32974f0 70
Guillaume31 3:56643150d07d 71 // Fonction Principale //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 72 int main() { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 73 pc.printf("\n\n\n\n\n\n\n\n Majord'home: Hello! Programme\n\r"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 74 lcd.printf("Majord'home: Hello!\n"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 75 wait(1); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 76 initialisations (); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 77
Guillaume31 3:56643150d07d 78 // Declaration Variables Locales
Guillaume31 3:56643150d07d 79 float Ftemp, Ctemp, Ktemp, Humid; // Temperature et humidite
Guillaume31 4:28ea47b9e0ae 80 int prox, ambl; // Proximite et Luminosite
Guillaume31 4:28ea47b9e0ae 81
Guillaume31 3:56643150d07d 82
Guillaume31 3:56643150d07d 83 // Init des Temperatures et Humidite
Guillaume31 3:56643150d07d 84 Ftemp = temphumid.sample_ftemp(); Ctemp = temphumid.sample_ctemp(); Ktemp = temphumid.sample_ktemp(); Humid = temphumid.sample_humid();
Guillaume31 4:28ea47b9e0ae 85 // Init des Proximite et Luminosite
Guillaume31 4:28ea47b9e0ae 86 prox = vcnl.getProximity(); ambl = vcnl.getAmbientLight();
Guillaume31 3:56643150d07d 87
Guillaume31 3:56643150d07d 88 // Boucle Infinie //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 89 lcd.cls(); lcd.locate(0,0);
Guillaume31 3:56643150d07d 90 lcd.printf("%.2f C %.2f %% Hum", Ctemp, Humid); lcd.locate(0,1);
Guillaume31 3:56643150d07d 91 lcd.printf("%.2f F %.2f K", Ftemp, Ktemp); lcd.locate(0,2);
Guillaume31 4:28ea47b9e0ae 92 lcd.printf("Lum %d Pr %d", ambl, prox); lcd.locate(0,3);
Guillaume31 3:56643150d07d 93 lcd.printf("Debut While(1)");
Guillaume31 3:56643150d07d 94 pc.printf("Debut While(1)\n\r");
Guillaume31 4:28ea47b9e0ae 95 wait(2); lcd.cls(); lcd.locate(0,0);
Guillaume31 3:56643150d07d 96
Guillaume31 3:56643150d07d 97 while(1) { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Guillaume31 3:56643150d07d 98
Guillaume31 4:28ea47b9e0ae 99 // Affichage temperature humidite
Guillaume31 3:56643150d07d 100 lcd.locate(0,0);
Guillaume31 3:56643150d07d 101 Ctemp = temphumid.sample_ctemp(); Humid = temphumid.sample_humid();
Guillaume31 3:56643150d07d 102 lcd.printf("%.2f C %.2f %% Hum", Ctemp, Humid);
Guillaume31 4:28ea47b9e0ae 103 // Affichage Luminosite proximite
Guillaume31 4:28ea47b9e0ae 104 lcd.locate(0,1);
Guillaume31 4:28ea47b9e0ae 105 prox = vcnl.getProximity(); ambl = vcnl.getAmbientLight();
Guillaume31 4:28ea47b9e0ae 106 lcd.printf("Lum %d Pr %d", ambl, prox);
Guillaume31 3:56643150d07d 107
Guillaume31 3:56643150d07d 108
Guillaume31 4:28ea47b9e0ae 109 // Arret moteur si Obstacle detecte
Guillaume31 3:56643150d07d 110 lcd.locate(0,2);
Guillaume31 3:56643150d07d 111 cap_arret.read();
Guillaume31 3:56643150d07d 112 if (cap_arret==0) {
Guillaume31 3:56643150d07d 113 lcd.printf("A=0");
Guillaume31 3:56643150d07d 114 setSpeed(128,128);
Guillaume31 3:56643150d07d 115 }
Guillaume31 4:28ea47b9e0ae 116 else
Guillaume31 3:56643150d07d 117 lcd.printf("A=1");
Guillaume31 4:28ea47b9e0ae 118
Guillaume31 4:28ea47b9e0ae 119 // Lancement moteur
Guillaume31 4:28ea47b9e0ae 120 if (bouton_poussoir == 0)
Guillaume31 4:28ea47b9e0ae 121 setSpeed(60,60);
Guillaume31 3:56643150d07d 122
alipford3 0:8c0ef32974f0 123 }
alipford3 0:8c0ef32974f0 124 }