IHM carte NBOARD Mai 2018
Dependents: NBoard_IHM_V2 ex20_fonction ex21_PWM1 ex26 ... more
Fork of IHM_V2 by
IHM.cpp@5:255e1428f05f, 2018-05-22 (annotated)
- Committer:
- slowness
- Date:
- Tue May 22 15:02:42 2018 +0000
- Revision:
- 5:255e1428f05f
- Parent:
- 4:a9e51ac904e2
- Child:
- 6:ad91067e3f6d
Version 2 de Mai 2018 modification du can.attach deprecated et retour des CANMessage request non fonctionnel avec la version mbed 2017
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
gr66 | 0:cd0f9e8c609b | 1 | #include "IHM.h" |
gr66 | 0:cd0f9e8c609b | 2 | #include "all_includes.h" |
gr66 | 0:cd0f9e8c609b | 3 | #include <stdarg.h> // Pour va_list ... dans IHM_printf |
gr66 | 0:cd0f9e8c609b | 4 | #include <stdio.h> // Pour vprintf et setprintf |
gr66 | 0:cd0f9e8c609b | 5 | #define CAN_REMOTE CANType(2) |
gr66 | 0:cd0f9e8c609b | 6 | // |
gr66 | 0:cd0f9e8c609b | 7 | |
gr66 | 0:cd0f9e8c609b | 8 | IHM::IHM(PinName CANRx, PinName CANTx): can(CANRx,CANTx) |
gr66 | 0:cd0f9e8c609b | 9 | { |
gr66 | 0:cd0f9e8c609b | 10 | can.frequency(1000000); /*Baud rate : kbits/s */ |
slowness | 5:255e1428f05f | 11 | can.attach(callback(this,&IHM::can_ISR_Reader)); /* Fonction d'interruption CAN*/ |
slowness | 5:255e1428f05f | 12 | // can.attach(&IHM,&can_ISR_Reader); /* Fonction d'interruption CAN*/ Modif BL Mai 2018 |
gr66 | 0:cd0f9e8c609b | 13 | } |
gr66 | 0:cd0f9e8c609b | 14 | void IHM::LCD_printf(const char* format, ...) |
gr66 | 0:cd0f9e8c609b | 15 | { |
slowness | 2:ba3449b7e070 | 16 | unsigned char i,j; |
gr66 | 0:cd0f9e8c609b | 17 | va_list arg; |
gr66 | 0:cd0f9e8c609b | 18 | va_start(arg,format); |
slowness | 4:a9e51ac904e2 | 19 | curseur=curseur+vsprintf(tableau_ecran+curseur%64,format,arg); |
slowness | 4:a9e51ac904e2 | 20 | if(curseur>31) |
slowness | 4:a9e51ac904e2 | 21 | { |
slowness | 4:a9e51ac904e2 | 22 | for(i=32; i<curseur;i++) |
slowness | 4:a9e51ac904e2 | 23 | { |
slowness | 4:a9e51ac904e2 | 24 | tableau_ecran[i%32]=tableau_ecran[i]; |
slowness | 4:a9e51ac904e2 | 25 | } |
slowness | 4:a9e51ac904e2 | 26 | curseur=curseur%32; |
slowness | 4:a9e51ac904e2 | 27 | } |
slowness | 4:a9e51ac904e2 | 28 | else |
slowness | 4:a9e51ac904e2 | 29 | { |
slowness | 4:a9e51ac904e2 | 30 | for(i=0; i<32;i++) |
slowness | 4:a9e51ac904e2 | 31 | { |
slowness | 4:a9e51ac904e2 | 32 | if(tableau_ecran[i]==0) |
slowness | 4:a9e51ac904e2 | 33 | tableau_ecran[i]=20; |
slowness | 4:a9e51ac904e2 | 34 | } |
slowness | 4:a9e51ac904e2 | 35 | } |
gr66 | 0:cd0f9e8c609b | 36 | va_end(arg); |
slowness | 4:a9e51ac904e2 | 37 | tableau_ecran[32]='\0'; |
slowness | 2:ba3449b7e070 | 38 | for(j=0; j<4; j++) { |
slowness | 2:ba3449b7e070 | 39 | trame_Tx.id=LCD_CHAR0+j; |
slowness | 2:ba3449b7e070 | 40 | trame_Tx.type=CANData; |
slowness | 2:ba3449b7e070 | 41 | trame_Tx.len=8; |
slowness | 2:ba3449b7e070 | 42 | for(i=0; i<8; i++) |
slowness | 2:ba3449b7e070 | 43 | trame_Tx.data[i]=tableau_ecran[i+j*8]; |
slowness | 2:ba3449b7e070 | 44 | while(!can.write(trame_Tx)); |
slowness | 2:ba3449b7e070 | 45 | wait_us(150); |
slowness | 2:ba3449b7e070 | 46 | } |
gr66 | 0:cd0f9e8c609b | 47 | } |
gr66 | 0:cd0f9e8c609b | 48 | unsigned char JOG_valeur,mise_a_jour_JOG=0,mise_a_jour_COD=0; |
gr66 | 0:cd0f9e8c609b | 49 | void IHM::can_ISR_Reader(void) |
gr66 | 0:cd0f9e8c609b | 50 | { |
gr66 | 0:cd0f9e8c609b | 51 | if (can.read(can_MsgRx[FIFO_ecriture])) { |
gr66 | 0:cd0f9e8c609b | 52 | // FIFO gestion |
gr66 | 0:cd0f9e8c609b | 53 | FIFO_ecriture=(FIFO_ecriture+1)%SIZE_FIFO; |
gr66 | 0:cd0f9e8c609b | 54 | // myled[0] = !myled[0]; |
gr66 | 0:cd0f9e8c609b | 55 | // ledC= !ledC; |
gr66 | 0:cd0f9e8c609b | 56 | } |
slowness | 5:255e1428f05f | 57 | can.write(CANMessage(2)); |
gr66 | 0:cd0f9e8c609b | 58 | } |
gr66 | 0:cd0f9e8c609b | 59 | void IHM::CAN_automate_reception(void) |
gr66 | 0:cd0f9e8c609b | 60 | { |
gr66 | 0:cd0f9e8c609b | 61 | static signed char FIFO_lecture=0,FIFO_occupation=0,FIFO_max_occupation=0; |
gr66 | 0:cd0f9e8c609b | 62 | FIFO_occupation=FIFO_ecriture-FIFO_lecture; |
gr66 | 0:cd0f9e8c609b | 63 | if(FIFO_occupation<0) |
gr66 | 0:cd0f9e8c609b | 64 | FIFO_occupation=FIFO_occupation+SIZE_FIFO; |
gr66 | 0:cd0f9e8c609b | 65 | if(FIFO_max_occupation<FIFO_occupation) |
gr66 | 0:cd0f9e8c609b | 66 | FIFO_max_occupation=FIFO_occupation; |
gr66 | 0:cd0f9e8c609b | 67 | if(FIFO_occupation>SIZE_FIFO) |
gr66 | 0:cd0f9e8c609b | 68 | while(!can.write(CANMessage(LCD_OVERFLOW,CANStandard))); |
gr66 | 0:cd0f9e8c609b | 69 | if(FIFO_occupation!=0) { |
gr66 | 0:cd0f9e8c609b | 70 | switch(can_MsgRx[FIFO_lecture].id) { |
gr66 | 0:cd0f9e8c609b | 71 | case JOG_DATA: |
gr66 | 0:cd0f9e8c609b | 72 | JOG_valeur=can_MsgRx[FIFO_lecture].data[0]; |
gr66 | 0:cd0f9e8c609b | 73 | mise_a_jour_JOG=1; |
gr66 | 0:cd0f9e8c609b | 74 | break; |
gr66 | 0:cd0f9e8c609b | 75 | case COD_DATA: |
gr66 | 0:cd0f9e8c609b | 76 | COD_valeur=can_MsgRx[FIFO_lecture].data[0]; |
gr66 | 0:cd0f9e8c609b | 77 | mise_a_jour_COD=1; |
gr66 | 0:cd0f9e8c609b | 78 | break; |
gr66 | 0:cd0f9e8c609b | 79 | default: |
gr66 | 0:cd0f9e8c609b | 80 | break; |
gr66 | 0:cd0f9e8c609b | 81 | } |
gr66 | 0:cd0f9e8c609b | 82 | FIFO_lecture=(FIFO_lecture+1)%SIZE_FIFO; |
gr66 | 0:cd0f9e8c609b | 83 | } |
gr66 | 0:cd0f9e8c609b | 84 | } |
gr66 | 0:cd0f9e8c609b | 85 | /* FILE: IHM.c */ |
gr66 | 0:cd0f9e8c609b | 86 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 87 | /* MODULE NAME: IHM 16x2 */ |
gr66 | 0:cd0f9e8c609b | 88 | /* */ |
gr66 | 0:cd0f9e8c609b | 89 | /* AUTHOR : Jacques-Olivier KLEIN */ |
gr66 | 0:cd0f9e8c609b | 90 | /* Bruno LARNAUDIE */ |
gr66 | 0:cd0f9e8c609b | 91 | /* */ |
gr66 | 0:cd0f9e8c609b | 92 | /* EMAIL : jacques-olivier.klein@u-psud.fr */ |
gr66 | 0:cd0f9e8c609b | 93 | /* bruno.larnaudie@u-psud.fr */ |
gr66 | 0:cd0f9e8c609b | 94 | /* */ |
gr66 | 0:cd0f9e8c609b | 95 | /* INSTITUTION: IUT de CACHAN - 9 av. de la div. Leclerc - 94230 CACHAN */ |
gr66 | 0:cd0f9e8c609b | 96 | /* */ |
gr66 | 0:cd0f9e8c609b | 97 | /* DATE : 12/07/2012 */ |
gr66 | 0:cd0f9e8c609b | 98 | /* CPU : FREESCALE MC9S12XS128MAA */ |
gr66 | 0:cd0f9e8c609b | 99 | /* BOARD : CACHAN Xboard + IHM16x2 */ |
gr66 | 0:cd0f9e8c609b | 100 | /* OS : None */ |
gr66 | 0:cd0f9e8c609b | 101 | /* */ |
gr66 | 0:cd0f9e8c609b | 102 | /* DESCRIPTION: Fonctions d'accès au Lcd émulé passant par le bus CAN */ |
gr66 | 0:cd0f9e8c609b | 103 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 104 | |
gr66 | 0:cd0f9e8c609b | 105 | |
gr66 | 0:cd0f9e8c609b | 106 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 107 | /* FUNCTION NAME: IHM_init */ |
gr66 | 0:cd0f9e8c609b | 108 | /* DESCRIPTION : Initialise l'afficheur IHM */ |
gr66 | 0:cd0f9e8c609b | 109 | /* RETURN : VOID */ |
gr66 | 0:cd0f9e8c609b | 110 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 111 | |
gr66 | 0:cd0f9e8c609b | 112 | |
gr66 | 0:cd0f9e8c609b | 113 | |
gr66 | 0:cd0f9e8c609b | 114 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 115 | /* FUNCTION NAME: IHM_gotoxy */ |
gr66 | 0:cd0f9e8c609b | 116 | /* DESCRIPTION : Modifie la position du curseur sur l'afficheur LCD de la carte IHM */ |
gr66 | 0:cd0f9e8c609b | 117 | /* RETURN : VOID */ |
gr66 | 0:cd0f9e8c609b | 118 | /* PARAMETER 1 : UINT8 x : indice de la ligne (0 à 1) */ |
gr66 | 0:cd0f9e8c609b | 119 | /* PARAMETER 2 : UINT8 y : indice de la colonne (0 à 15) */ |
gr66 | 0:cd0f9e8c609b | 120 | /****************************************************************************************/ |
gr66 | 1:663cbe5baac4 | 121 | void IHM::LCD_gotoxy (UINT8 y, UINT8 x) |
gr66 | 0:cd0f9e8c609b | 122 | { |
gr66 | 1:663cbe5baac4 | 123 | curseur=(y*16+x)%32; |
gr66 | 0:cd0f9e8c609b | 124 | } |
gr66 | 0:cd0f9e8c609b | 125 | |
gr66 | 0:cd0f9e8c609b | 126 | |
gr66 | 0:cd0f9e8c609b | 127 | |
gr66 | 0:cd0f9e8c609b | 128 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 129 | /* FUNCTION NAME: IHM_clear */ |
gr66 | 0:cd0f9e8c609b | 130 | /* DESCRIPTION : Efface le LCD */ |
gr66 | 0:cd0f9e8c609b | 131 | /* RETURN : VOID */ |
gr66 | 0:cd0f9e8c609b | 132 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 133 | void IHM::LCD_clear(void) |
gr66 | 0:cd0f9e8c609b | 134 | { |
gr66 | 0:cd0f9e8c609b | 135 | UINT8 i; |
gr66 | 0:cd0f9e8c609b | 136 | curseur=0; |
gr66 | 0:cd0f9e8c609b | 137 | for(i=0; i<32; i++) |
gr66 | 0:cd0f9e8c609b | 138 | tableau_ecran[i]=32; |
gr66 | 0:cd0f9e8c609b | 139 | while(!can.write(CANMessage(LCD_CLEAR,CANStandard))); |
gr66 | 0:cd0f9e8c609b | 140 | wait_us(150); |
gr66 | 0:cd0f9e8c609b | 141 | } |
gr66 | 0:cd0f9e8c609b | 142 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 143 | /* FUNCTION NAME: BAR_set */ |
gr66 | 0:cd0f9e8c609b | 144 | /* DESCRIPTION : commande les 10 LED du bargraph */ |
gr66 | 0:cd0f9e8c609b | 145 | /* PARAMETER 1 : UINT16 valeur : ordre d'allumage, exprimé sur les 10 bits de droite. |
gr66 | 0:cd0f9e8c609b | 146 | Le bit k doit valoir 0 pour allumer la LED k, 1 pour l'éteindre. |
gr66 | 0:cd0f9e8c609b | 147 | Exemple : ~(1<<9) allume la LED 9, ~0x00F allume les 4 LED 0 à 3 */ |
gr66 | 0:cd0f9e8c609b | 148 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 149 | void IHM::BAR_set(UINT16 valeur) |
gr66 | 0:cd0f9e8c609b | 150 | { |
gr66 | 0:cd0f9e8c609b | 151 | trame_Tx.id=BAR_SET; |
gr66 | 0:cd0f9e8c609b | 152 | trame_Tx.type=CANData; |
gr66 | 0:cd0f9e8c609b | 153 | trame_Tx.len=2; |
gr66 | 0:cd0f9e8c609b | 154 | trame_Tx.data[0]=valeur>>8; |
gr66 | 0:cd0f9e8c609b | 155 | trame_Tx.data[1]=(UINT8)valeur; |
gr66 | 0:cd0f9e8c609b | 156 | while(!can.write(trame_Tx)); |
gr66 | 0:cd0f9e8c609b | 157 | } |
gr66 | 0:cd0f9e8c609b | 158 | |
gr66 | 0:cd0f9e8c609b | 159 | |
gr66 | 0:cd0f9e8c609b | 160 | /****************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 161 | /* FUNCTION NAME: JOG_read */ |
gr66 | 0:cd0f9e8c609b | 162 | /* DESCRIPTION : indique la position (parmi les 8 possibles) et l'enfoncement du Jog. */ |
gr66 | 0:cd0f9e8c609b | 163 | /* RETURN : un octet UINT8 qui indique la position (RIGHT, LEFT, UP, DOWN + 4 combinaisons) |
gr66 | 0:cd0f9e8c609b | 164 | et l'enfoncement (PUSH) du Jog, exprimés sur 5 bits utiles.*/ |
gr66 | 0:cd0f9e8c609b | 165 | |
gr66 | 0:cd0f9e8c609b | 166 | /* - Si le Jog est au repos : la fonction renvoie 0 (0x00). |
gr66 | 0:cd0f9e8c609b | 167 | - si le Jog n'est pas au repos : 1 à 3 bits peuvent être mis à 1 dans l'octet renvoyé. |
gr66 | 0:cd0f9e8c609b | 168 | Il est intéressant d'utiliser les masques définis en constantes. |
gr66 | 0:cd0f9e8c609b | 169 | La signification des 8 bits de la valeur renvoyée est: |
gr66 | 0:cd0f9e8c609b | 170 | 0 0 0 RIGHT UP PUSH LEFT DOWN |
gr66 | 0:cd0f9e8c609b | 171 | Plusieurs bits peuvent être à 1 en même temps. Par exemple : RIGHT + UP + PUSH |
gr66 | 0:cd0f9e8c609b | 172 | à 1 indiquent que le Jog est en position "Nord Est " (UP+RIGHT) et qu'il est enfoncé. |
gr66 | 0:cd0f9e8c609b | 173 | Si le Jog est simultanément enfoncé et positionné à droite, la fonction renvoie |
gr66 | 0:cd0f9e8c609b | 174 | (0001 0100) en binaire, soit 0x14. Exprimée avec les masques, la valeur renvoyée vaut |
gr66 | 0:cd0f9e8c609b | 175 | JOG_MSK_RIGHT | JOG_MSK_PUSH (0x14). */ |
gr66 | 0:cd0f9e8c609b | 176 | /**************************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 177 | /**************************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 178 | /* utiliser les Constantes symboliques de IHM.h pour interpréter la valeur renvoyée par le jog... */ |
gr66 | 0:cd0f9e8c609b | 179 | /**************************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 180 | |
gr66 | 0:cd0f9e8c609b | 181 | UINT8 IHM::JOG_read(void) |
gr66 | 0:cd0f9e8c609b | 182 | { |
slowness | 5:255e1428f05f | 183 | while(!can.write(CANMessage(JOG_REQ,CANStandard))); |
gr66 | 0:cd0f9e8c609b | 184 | |
gr66 | 0:cd0f9e8c609b | 185 | while(mise_a_jour_JOG==0) |
gr66 | 0:cd0f9e8c609b | 186 | CAN_automate_reception(); |
gr66 | 0:cd0f9e8c609b | 187 | mise_a_jour_JOG=0; |
gr66 | 0:cd0f9e8c609b | 188 | return JOG_valeur; |
gr66 | 0:cd0f9e8c609b | 189 | |
gr66 | 0:cd0f9e8c609b | 190 | } |
gr66 | 0:cd0f9e8c609b | 191 | |
gr66 | 0:cd0f9e8c609b | 192 | |
gr66 | 0:cd0f9e8c609b | 193 | /***************************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 194 | /* FUNCTION NAME: COD_read */ |
gr66 | 0:cd0f9e8c609b | 195 | /* DESCRIPTION : indique la rotation effectuée par le codeur incrémental. */ |
gr66 | 0:cd0f9e8c609b | 196 | /* RETURN : un octet UINT8 dont la valeur entre 0 et 255 indique la rotation du |
gr66 | 0:cd0f9e8c609b | 197 | codeur incrémental depuis l'initialisation du codeur (cad de la carte IHM), |
gr66 | 0:cd0f9e8c609b | 198 | exprimée en douzièmes de tours. Le codeur dispose en effet de 12 positions |
gr66 | 0:cd0f9e8c609b | 199 | et la valeur retournée s'incrémente/se décrémente à chaque 12e de tour. |
gr66 | 0:cd0f9e8c609b | 200 | Par exemple, si le codeur a été tourné de 2 tours et demi, la valeur |
gr66 | 0:cd0f9e8c609b | 201 | retournée vaut 12+12+6 = 30 = 0x1E (le codeur a effectué 30 douzièmes de tour) */ |
gr66 | 0:cd0f9e8c609b | 202 | /***************************************************************************************************/ |
gr66 | 0:cd0f9e8c609b | 203 | |
gr66 | 0:cd0f9e8c609b | 204 | UINT8 IHM::COD_read(void) |
gr66 | 0:cd0f9e8c609b | 205 | { |
slowness | 5:255e1428f05f | 206 | while(!can.write(CANMessage(COD_REQ,CANStandard))); |
gr66 | 0:cd0f9e8c609b | 207 | while(mise_a_jour_COD==0) |
gr66 | 0:cd0f9e8c609b | 208 | CAN_automate_reception(); |
gr66 | 0:cd0f9e8c609b | 209 | mise_a_jour_COD=0; |
gr66 | 0:cd0f9e8c609b | 210 | return COD_valeur; |
gr66 | 0:cd0f9e8c609b | 211 | |
gr66 | 0:cd0f9e8c609b | 212 | } |
gr66 | 0:cd0f9e8c609b | 213 |