programme bts bruchet descroix duhautois

Dependencies:   mbed ID12RFID SDFileSystem

Revision:
5:e104ec24b3fa
Child:
6:4f5634f6a565
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed May 05 08:13:43 2021 +0000
@@ -0,0 +1,282 @@
+#include "mbed.h"
+#include "mbed_genie.h"
+#include "eeprom_flash.h"
+#include "SDFileSystem.h"
+#include "ID12RFID.h"
+
+Serial pc(USBTX, USBRX);
+ID12RFID rfid(PA_10);
+
+DigitalOut myled(LED1);
+DigitalOut led1(PA_8);
+DigitalOut led2(PB_14);
+DigitalOut led3(PB_11);
+DigitalOut led4(PA_11);
+DigitalOut led5(PA_12);
+DigitalOut led6(PC_5);
+DigitalOut led7(PC_6);
+DigitalOut led8(PC_8);
+DigitalOut ledmasse(PB_3);
+
+int flag_contraste;
+int valeur_clavier;
+int i;
+unsigned int lecture;
+int chrono = 99;
+int led = 99;
+int tab[40] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40};
+int code1 = 49;
+int code2 = 50;
+int code3 = 51;
+int y = 15;
+int flag = 0;
+int adressetempo = 0x0000;
+int adresserfid = 0x00000000;
+unsigned int tempo1, tempo2, tempo3, tempo4, tempo5, tempo6, tempo7,tempo8, rfid1, rfid2, rfid3, rfid4, rfid5;
+
+
+void enableEEPROMWriting()
+{
+    HAL_StatusTypeDef status = HAL_FLASH_Unlock();
+    FLASH_PageErase(EEPROM_START_ADDRESS); // required to re-write
+    CLEAR_BIT(FLASH->CR, FLASH_CR_PER); // Bug fix: bit PER has been set in Flash_PageErase(), must clear it here
+}
+
+void disableEEPROMWriting()
+{
+    HAL_FLASH_Lock();
+}
+
+HAL_StatusTypeDef writeEEPROMWord(uint32_t address, uint32_t data)
+{
+    HAL_StatusTypeDef status;
+    address = address + EEPROM_START_ADDRESS;
+    status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, address, data);
+    return status;
+}
+
+uint32_t readEEPROMWord(uint32_t address)
+{
+    uint32_t val = 0;
+    address = address + EEPROM_START_ADDRESS;
+    val = *(__IO uint32_t*)address;
+    return val;
+}
+
+void myGenieEventHandler(void)
+{
+    genieFrame Event;
+    genieDequeueEvent(&Event);
+    if(Event.reportObject.cmd == GENIE_REPORT_EVENT) 
+    {
+        if (Event.reportObject.object == GENIE_OBJ_KEYBOARD)
+             { 
+                if (Event.reportObject.index == 0)
+                {
+                    valeur_clavier = Event.reportObject.data_lsb;
+                    printf("%c\n\r", valeur_clavier);
+                    if ((valeur_clavier == code1) || (valeur_clavier== code2) || (valeur_clavier == code3))
+                    {
+                        printf("Acces autorise\n\r");
+                    }
+                    else
+                    {
+                        printf("Acces refuse\n\r");
+                    }
+                }
+             }
+        if (Event.reportObject.object == GENIE_OBJ_4DBUTTON)
+        {              
+            if (Event.reportObject.index == 3) //Start
+            {
+                printf("Depart\n\r");
+                flag=1;
+            }
+            if (Event.reportObject.index == 5) //Stop
+            {
+                printf("Stop\n\r");
+                flag=0;
+            }
+            /*if (Event.reportObject.index == 8) // Contraste +
+            { 
+                if (y<15)
+                { 
+                 y++;
+                 printf("Contraste=%d\r\n",y);
+                 flag_contraste=1;
+                }
+                genieWriteContrast(y);
+            }
+            if (Event.reportObject.index == 7) // Contraste -
+            { 
+                if (y>0)
+                {
+                    y--;
+                    printf("Contraste=%d\r\n",y);
+                    flag_contraste=1;
+                }
+                genieWriteContrast(y);
+            }*/
+            if (Event.reportObject.index == 6) //Lecture tempo
+                {
+                SDFileSystem sd(PA_7, PA_6, PA_5, PB_6, "sd");
+                char numberstring[100];      
+                FILE *fp = fopen("/sd/valeur_temporisation.txt", "r");
+                fgets(numberstring, 100, fp);  
+                    
+                if(fp == NULL)
+                {
+                    error("Impossible d'ouvrir le fichier pour la lecture\n\r");
+                    fclose(fp);  
+                }
+                else
+                {
+                    printf("Lecture temporisation\n\r");
+                    enableEEPROMWriting();
+                    sscanf(numberstring, "%d", &tempo1);
+                    writeEEPROMWord(adressetempo, tempo1);
+                    lecture=readEEPROMWord(adressetempo);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo1);
+                    sscanf(numberstring+3, "%d", &tempo2);
+                    writeEEPROMWord(adressetempo+4, tempo2);
+                    lecture=readEEPROMWord(adressetempo+4);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo2);
+                    sscanf(numberstring+6, "%d", &tempo3);
+                    writeEEPROMWord(adressetempo+8, tempo3);
+                    lecture=readEEPROMWord(adressetempo+8);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo3);
+                    sscanf(numberstring+9, "%d", &tempo4);
+                    writeEEPROMWord(adressetempo+12, tempo4);
+                    lecture=readEEPROMWord(adressetempo+12);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo4);
+                    sscanf(numberstring+11, "%d", &tempo5);
+                    writeEEPROMWord(adressetempo+16, tempo5);
+                    lecture=readEEPROMWord(adressetempo+16);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo5);
+                    sscanf(numberstring+14, "%d", &tempo6);
+                    writeEEPROMWord(adressetempo+20, tempo6);
+                    lecture=readEEPROMWord(adressetempo+20);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo6);
+                    sscanf(numberstring+16, "%d", &tempo7);
+                    writeEEPROMWord(adressetempo+24, tempo7);
+                    lecture=readEEPROMWord(adressetempo+24);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo7);
+                    sscanf(numberstring+18, "%d", &tempo8);
+                    writeEEPROMWord(adressetempo+28, tempo8);
+                    lecture=readEEPROMWord(adressetempo+28);
+                    printf ("eeprom: %d\n\r",lecture);
+                    printf ("carte : %d\n\r",tempo8);
+                    fclose(fp);                 
+                    printf("Lecture finie!\n\r");
+                    disableEEPROMWriting();
+                }
+                }
+            if (Event.reportObject.index == 7) //Lecture code RFID
+            {
+                SDFileSystem sd(PA_7, PA_6, PA_5, PB_6, "sd");
+                char numberrfid[100];
+                FILE *fp1 = fopen("/sd/valeur_rfid.txt", "r");
+                fgets(numberrfid, 100, fp1);    
+                
+                if(fp1 == NULL)
+                 {
+                    error("Impossible d'ouvrir le fichier pour la lecture\n\r");
+                }
+                flag = 2;
+                printf("Lecture code rfid\n\r");
+                enableEEPROMWriting();
+                sscanf(numberrfid, "%d", &rfid1);
+                writeEEPROMWord(adresserfid, rfid1);
+                lecture=readEEPROMWord(adresserfid);
+                printf ("eeprom: %d\n\r",lecture);
+                printf ("carte : %d\n\r", rfid1);
+                sscanf(numberrfid+8, "%d", &rfid2);
+                writeEEPROMWord(adresserfid+8, rfid2);
+                lecture=readEEPROMWord(adresserfid+8);
+                printf ("eeprom: %d\n\r",lecture);;
+                printf ("carte : %d\n\r", rfid2);
+                sscanf(numberrfid+17, "%d", &rfid3);
+                writeEEPROMWord(adresserfid+16, rfid3);
+                lecture=readEEPROMWord(adresserfid+16);
+                printf ("eeprom: %d\n\r",lecture);
+                printf ("carte : %d\n\r", rfid3);
+                sscanf(numberrfid+25, "%d", &rfid4);
+                writeEEPROMWord(adresserfid+24, rfid4);
+                lecture=readEEPROMWord(adresserfid+24);
+                printf ("eeprom: %d\n\r",lecture);
+                printf ("carte : %d\n\r", rfid4);
+                sscanf(numberrfid+34, "%d", &rfid5);
+                writeEEPROMWord(adresserfid+32, rfid5);
+                lecture=readEEPROMWord(adresserfid+32);
+                printf ("eeprom: %d\n\r",lecture);
+                printf ("carte : %d\n\r", rfid5);
+                fclose(fp1); 
+                printf("Lecture finie!\n\r");
+                disableEEPROMWriting();
+                } 
+            }
+    }
+        return; 
+}
+int main()
+{
+    pc.baud(9600);
+    ledmasse = 1;
+    SetupGenie();
+    genieAttachEventHandler(&myGenieEventHandler);
+    genieWriteContrast(15);
+    
+    while(1)
+    {
+        if (flag == 1) 
+        {
+            led1 = 1;
+            led2 = 1;
+            led3 = 1;
+            led4 = 1;
+            led5 = 0;
+            led6 = 0;
+            led7 = 0;
+            led8 = 0;
+            wait(1);
+            if (chrono == 0)
+            {
+                chrono=tab[i];
+                i=i+1;
+            }
+        }
+
+        else if(flag == 0)
+        {
+            led1 = 0;
+            led2 = 0;
+            led3 = 0;
+            led4 = 0;
+            led5 = 1;
+            led6 = 1;
+            led7 = 1;
+            led8 = 1;
+            chrono=tab[i];
+            wait(1);
+        }
+        else if(flag == 2)
+        {
+            if(rfid.read() == rfid1) 
+            {
+                printf("RFID Tag number : %d\n\r", rfid.read());
+                genieWriteObject(GENIE_OBJ_LED, 0x00, 1); 
+            }
+        }
+        /*if(rfid.read() == rfid1)
+            {
+                genieWriteObject(GENIE_OBJ_LED, 0x00, chrono); 
+            }*/
+    }
+}
\ No newline at end of file