
Travaille effectué lors du deuxieme tp d'informatique.
Revision 7:232b7abac027, committed 2021-03-31
- 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.