Pour les potos en galère tmtc

Dependencies:   C12832

Files at this revision

API Documentation at this revision

Comitter:
lauric
Date:
Wed Mar 31 13:29:12 2021 +0000
Parent:
6:f8cb706c480c
Commit message:
ZZZZZZ; Z; Z; ZZ; Z; ; Z; Z; Z; Z; Z; Z;

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
diff -r f8cb706c480c -r 1cced6852c01 main.cpp
--- a/main.cpp	Tue Sep 19 15:25:01 2017 +0000
+++ b/main.cpp	Wed Mar 31 13:29:12 2021 +0000
@@ -1,19 +1,54 @@
-#include "mbed.h"
-#include "C12832.h"
+#include "mbed.h"                  //Définition Mbde
+#include "C12832.h"                //Librairie du LCD
 
-// Using Arduino pin notation
-C12832 lcd(D11, D13, D12, D7, D10);
+//InterruptIn fire_event(D4);
+DigitalIn fire(D4);
+Timer timer;
+C12832 lcd(D11, D13, D12, D7, D10); //Broches pour LCD définies par la librairie C12832
+
+int etat = 0;
+int last_time, last_time2;
+int elapsed_time, elapsed_time2;
+int last_state;
+
+void changerEtat(void);
 
 int main()
 {
-    int j=0;
     lcd.cls();
-    lcd.locate(0,3);
-    lcd.printf("mbed application shield!");
+    lcd.locate(20,20);
+
+    //fire_event.rise(&changerEtat);
+    timer.start();
+
+    while(true) {
 
-    while(true) {   // this is the third thread
-        lcd.locate(0,15);
-        lcd.printf("Counting : %d",j++);
-        wait(1.0);
+        int etat_fire = fire.read();
+        if(etat_fire > last_state) { // Front montant
+            changerEtat();
+            last_time2 = timer.read();
+        } else if(last_state < etat_fire) {
+            elapsed_time2 = timer.read() - last_time2;
+            if(elapsed_time2 >= 2)
+                etat = 3;
+        }
+        
+        last_state = etat_fire;
+
+        lcd.locate(0, 0);
+        lcd.printf("ETAT: %d \nDernier Appui: %d", etat, elapsed_time);
+        lcd.locate(0, 20);
+        lcd.printf("Temps appuye: %d", elapsed_time2);
+
+        wait(0.1);
+        lcd.cls();
     }
+
 }
+
+void changerEtat(void)
+{
+    elapsed_time = timer.read() - last_time;
+    last_time = timer.read();
+    etat = etat == 1 ? 2 : 1; 
+}
\ No newline at end of file
diff -r f8cb706c480c -r 1cced6852c01 main.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Wed Mar 31 13:29:12 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.