Travaille effectué lors du deuxieme tp d'informatique.

Dependencies:   C12832

Files at this revision

API Documentation at this revision

Comitter:
lauric
Date:
Wed Mar 31 13:35:37 2021 +0000
Parent:
6:f8cb706c480c
Commit message:
Salut les gros;

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Sep 19 15:25:01 2017 +0000
+++ b/main.cpp	Wed Mar 31 13:35:37 2021 +0000
@@ -1,19 +1,121 @@
-#include "mbed.h"
-#include "C12832.h"
+#include "mbed.h"                  //Définition Mbde
+#include "C12832.h"                //Librairie du LCD
+
+#define RED 0b100
+#define GREEN 0b010
+#define BLUE 0b001
+#define BLACK 0b000
 
-// Using Arduino pin notation
-C12832 lcd(D11, D13, D12, D7, D10);
+DigitalIn fire(D4);          //Joystick fire
+DigitalOut LED_rouge(D5);    //Led rouge
+DigitalOut LED_bleue(D8);    //Led Bleue
+DigitalOut LED_verte(D9);    //Led Verte
+Timer timer;
+Ticker ticker;
+C12832 lcd(D11, D13, D12, D7, D10); //Broches pour LCD définies par la librairie C12832
+
+int last_state;
+int begin; // Temps
+
+int etat_ledVerte = 0, etat = 1;
+
+int getFireState();
+bool isElapsedTime(int time);
+void setColor(int rgb);
+
+void func_ticker()
+{
+    etat_ledVerte = !etat_ledVerte;
+}
+
 
 int main()
 {
-    int j=0;
     lcd.cls();
-    lcd.locate(0,3);
-    lcd.printf("mbed application shield!");
+    timer.start();
+
+    setColor(BLACK);
+
+    while(true) {
+
+        lcd.locate(20, 20);
+        lcd.printf("Etat %d", etat);
+
+        switch(etat) {
+            case 1:
+
+                if(getFireState() == 2) {
+                    setColor(RED);
+                    etat = 2;
+                    begin = timer.read_ms();
+                }
+
+                break;
+            case 2:
 
-    while(true) {   // this is the third thread
-        lcd.locate(0,15);
-        lcd.printf("Counting : %d",j++);
-        wait(1.0);
+                if(isElapsedTime(5000)) {
+                    etat = 1;
+                    setColor(BLACK);
+                } else if(getFireState() == 2) {
+                    begin = timer.read_ms();
+                    setColor(BLACK);
+                    etat = 3;
+                    ticker.attach(&func_ticker, 0.5);
+                }
+
+                break;
+            case 3:
+               
+                if(etat_ledVerte)
+                    setColor(RED);
+                else
+                    setColor(BLACK);
+
+                if(isElapsedTime(5000)) {
+                    etat = 1;
+                    setColor(BLACK);
+                    ticker.detach();
+                } else if(getFireState() == 2) {
+                    begin = timer.read_ms();
+                    etat = 2;
+                    ticker.detach();
+                    setColor(RED);
+                }
+                break;
+        }
+        wait(0.1);
+        lcd.cls();
     }
 }
+
+void setColor(int rgb) // RGB
+{
+    LED_rouge =  !(0b100 & rgb);
+    LED_verte =  !(0b010 & rgb);
+    LED_bleue =  !(0b001 & rgb);
+}
+
+bool isElapsedTime(int time) // retourne vrai si x temps c'est écoulé, update begin time
+{
+    int t = timer.read_ms();
+    if(t - begin >= 5000) {
+        begin = t;
+        return 1;
+    } else
+        return 0;
+}
+
+int getFireState()   // Retourne si front montant ou descendant ou rien.
+{
+    int etat_fire = fire.read();
+    int etat = 0;
+    if(!last_state &&  etat_fire) { // Front montant
+        etat = 1;
+    } else if(last_state && !etat_fire) { // Front descendant
+        etat = 2;
+    } else {
+        etat = 0;
+    }
+    last_state = etat_fire;
+    return etat;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Wed Mar 31 13:35:37 2021 +0000
@@ -0,0 +1,124 @@
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+//               Inclusion de fichiers externes
+//
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+#include "mbed.h"                  //Définition Mbde
+#include "C12832.h"                //Librairie du LCD
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+//               Déclaration de constantes
+//
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+/*pour le pilotage des LEDs RVB*/
+#define LED_ON 0                   //Définition du label led_ON
+#define LED_OFF 1                  //Définition du Label led_OFF
+#define SPEED 40                   // Puissance des moteurs
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//
+//               Déclaration des entrées/sorties
+//
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+Serial pc(USBTX, USBRX);       //liaison série pc ou wifi
+DigitalOut LED_rouge(D5);    //Led rouge 
+DigitalOut LED_bleue(D8);    //Led Bleue
+DigitalOut LED_verte(D9);    //Led Verte
+//
+DigitalIn up(A2);            //Joystick up
+DigitalIn down(A3);          //Joystick down
+DigitalIn left(A4);          //Joystick left
+DigitalIn right(A5);         //Joystick Right
+DigitalIn fire(D4);          //Joystick fire
+DigitalOut enbMot(PB_12);    //Broche enable carte commande moteurs
+//
+    //Moteur droit
+    PwmOut sens1M1(PA_11);   //PWM sens 1 moteur 1
+    PwmOut sens2M1(PB_15);   //PWM sens 2 moteur 1
+//
+    //moteur gauche
+    PwmOut sens1M2(PB_14);   //PWM sens 1 moteur 2
+    PwmOut sens2M2(PB_13);   //PWM sens 2 moteur 2
+//
+BusIn capteursLigne(PC_9,PC_10,PC_11,PC_12,PA_12,PA_14);   //6 Lignes d'entrées de liaison carte capteur
+//
+DigitalIn   jack(PD_2);     //Jack
+//
+DigitalIn bumpers(PB_7);    //Bumpers
+//
+DigitalOut  LED(PA_13);     //LED rouge carte mère D1
+//
+/*****Réservée pour ER2 ****
+**  NE PAS SUPPRIMER      */
+//
+//
+AnalogIn IR_G(PB_1);         //Capteur analogique gauche
+AnalogIn IR_D(PC_2);         //Capteur analogique droite
+//
+DigitalOut ir1(PC_3);        //Led infra rouge 1
+DigitalOut ir2(PC_4);        //Led infra rouge 2
+DigitalOut ir3(PC_5);        //Led infra rouge 3
+DigitalOut ir4(PC_6);        //Led infra rouge 4
+DigitalOut ir5(PC_8);        //Led infra rouge 5
+//
+C12832 lcd(D11, D13, D12, D7, D10); //Broches pour LCD définies par la librairie C12832 
+//
+AnalogIn pot1 (A0);           //Potentiomètre 1
+AnalogIn pot2 (A1);           //Potentiomètre 2
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+//             Définition des prototypes des fonctions
+//
+////////////////////////////////////////////////////////////////////////////////
+//
+Ticker sampling;    //interruption pour échantillonnage
+//
+void gestionMAE(void);      //gestion Machine à états primaire
+void echantillonnage(void); //fonction appelée par le ticker sampling
+void initVariateurs(void);  //initialisation du variateur choisi dans main.h
+void commandeMoteurs(int moteurG, int moteurD); //les commandes sont passées en % -100 à +100
+void  lecture_cpld(void);          //Lecture des signaux de la carte CPLD
+//////////////////////
+void capter_ligne(void);
+void impulsion_moteur(void); // Appelé par le ticker
+void afficherEcran(void); // Affiche le menu
+void selection_timer(void); // Incremente la selection de la tempo quand fire est sur rising edge
+void changer_etat(void);
+
+typedef enum 
+{
+  RIEN = 0,
+  TOUT = 8,
+  PARTIEL = 4,
+}etat_capteur;
+
+// ==== VARIABLES ====
+int moteurG = 0; // Puissance moteur gauche
+int moteurD = 0; // Puissance moteur droit
+int etat = 0; // Etat de la machine
+int selection = 0; // Selection de la tempo pour la modifier sur l'affichage
+
+bool run = true; // Sors de la boucle principale quand à false.
+
+//Temporisation, index : 0 -> Apres ligne blanche, 1 -> Rotation, 2 -> ligne droite entre 2 plots
+float timer[3] = { 1, 1, 1};
+
+// ==== INTERRUPTIONS ====
+InterruptIn fire_intpt(D4); // Detection interruptif sur bouton centre shield lcd
+InterruptIn jack_intpt(PD_2); // Detection du retirage du jack
+
+Timeout timeout; // Execute une fonction après un temps données
+Ticker motor_tk; // Envoi une pulsation au moteur de manière interruptif 
+Ticker lcd_tk; // Met à jour l'affichage en dehors de la boucle principale car trop rapide pour l'affichage.