CRAC Team / SOMO_II

Dependents:   Somo_Project

Committer:
AlexisCollin
Date:
Mon Apr 06 15:11:29 2020 +0000
Revision:
6:32eb30d2410f
Parent:
5:1cfb8cd47e6d
Code final pour la carte de controle du SOMO II

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alustig3 0:a4f14eadd0df 1 // SOMO II sound module http://www.4dsystems.com.au/product/SOMO_II/
alustig3 0:a4f14eadd0df 2 // Datasheet http://www.4dsystems.com.au/productpages/SOMO-II/downloads/SOMO-II_datasheet_R_1_2.pdf
alustig3 0:a4f14eadd0df 3 #include "mbed.h"
alustig3 0:a4f14eadd0df 4 #include "SOMO.h"
AlexisCollin 2:b95724a49517 5 #include "CAN.h"
AlexisCollin 6:32eb30d2410f 6 #define CHKSUM 0xFFFF // CHKSUM par défaut
AlexisCollin 6:32eb30d2410f 7 //#define myID 0x4A0 // id de départ du can en accord avec la librairie du CRAC
AlexisCollin 2:b95724a49517 8
AlexisCollin 2:b95724a49517 9 Ticker ticker;
AlexisCollin 2:b95724a49517 10 CAN can(PA_11, PA_12);
AlexisCollin 2:b95724a49517 11 Sender sender(can);
AlexisCollin 2:b95724a49517 12 CANMessage msg;
AlexisCollin 2:b95724a49517 13
AlexisCollin 2:b95724a49517 14
AlexisCollin 2:b95724a49517 15
AlexisCollin 6:32eb30d2410f 16 bool sendflag = 0; // flag permettant de réguler la communication de la carte par le can
AlexisCollin 6:32eb30d2410f 17 int data_can = 0; // variable qui récupère l'ensemble des informations reçues
AlexisCollin 6:32eb30d2410f 18 short commande = 0; // variable récupérant le premier octet de la partie DATA sur le can
AlexisCollin 6:32eb30d2410f 19 char message1 = 0; // variable récupérant le second octet de la partie DATA sur le can
AlexisCollin 6:32eb30d2410f 20 char message2 = 0; // variable récupérant le troisième octet de la partie DATA sur le can
AlexisCollin 6:32eb30d2410f 21 int calc_chksum; // variable qui récupère la valeur du chksum une fois ce dernier calculer
AlexisCollin 6:32eb30d2410f 22 char chksum[2]={0,0}; // tableau venant splitter en deux char les deux octets de chksum
AlexisCollin 6:32eb30d2410f 23 unsigned char is_busy = 0x00; // état de la carte
AlexisCollin 6:32eb30d2410f 24 char tab_ident[3];
AlexisCollin 6:32eb30d2410f 25 short myID = 0x4A0;
alustig3 0:a4f14eadd0df 26
AlexisCollin 2:b95724a49517 27 //construction
AlexisCollin 2:b95724a49517 28 SOMO::SOMO(PinName TXPin, PinName RXPin): _serialSOMO(TXPin,RXPin)
AlexisCollin 2:b95724a49517 29 {
alustig3 0:a4f14eadd0df 30 init();
alustig3 0:a4f14eadd0df 31 }
alustig3 0:a4f14eadd0df 32
alustig3 0:a4f14eadd0df 33
AlexisCollin 6:32eb30d2410f 34 void SOMO::init() //configure la liaison avec le SOMO-II et le CAN
AlexisCollin 2:b95724a49517 35 {
alustig3 0:a4f14eadd0df 36 _serialSOMO.baud(9600);
AlexisCollin 2:b95724a49517 37 can.frequency(1000000);
AlexisCollin 2:b95724a49517 38 ticker.attach(callback(&sender,&Sender::send), 1);
AlexisCollin 2:b95724a49517 39 sendflag = 0;
AlexisCollin 4:9fea24a02671 40 can.filter(0x261, 0x261, CANAny, 0);
alustig3 0:a4f14eadd0df 41 }
alustig3 0:a4f14eadd0df 42
AlexisCollin 6:32eb30d2410f 43 /*
AlexisCollin 6:32eb30d2410f 44 les fichiers mp3 doivent commencer par 001 jusqu'a 254
AlexisCollin 6:32eb30d2410f 45 Les nom des dossier de repertoir pour le musique doivent être nommées par un nombre entre 01 et 99
AlexisCollin 6:32eb30d2410f 46 */
AlexisCollin 6:32eb30d2410f 47
AlexisCollin 6:32eb30d2410f 48 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 49 // Joue une musique via son numéro et son répertoire
alustig3 0:a4f14eadd0df 50
AlexisCollin 6:32eb30d2410f 51 void SOMO::playTrackNum(unsigned char repository, unsigned char track)
AlexisCollin 2:b95724a49517 52 {
AlexisCollin 6:32eb30d2410f 53 // calcule du CHKSUM
AlexisCollin 6:32eb30d2410f 54 calc_chksum=CHKSUM-(0x19+0x01)+1;
AlexisCollin 6:32eb30d2410f 55
AlexisCollin 6:32eb30d2410f 56 // séparation des deux octets du chksum pour l'envois
AlexisCollin 6:32eb30d2410f 57 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 58 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 2:b95724a49517 59 unsigned char play2[8] = {0x7E, 0x19, 0x00, 0x00, 0x01, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 60 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 61 {
AlexisCollin 2:b95724a49517 62 _serialSOMO.putc(play2[i]);
AlexisCollin 2:b95724a49517 63 }
AlexisCollin 2:b95724a49517 64 wait(0.2);
AlexisCollin 2:b95724a49517 65 calc_chksum=CHKSUM-(0x0F+repository+track)+1;
AlexisCollin 2:b95724a49517 66 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 67 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 2:b95724a49517 68 unsigned char play[8] = {0x7E, 0x0F, 0x00, repository, track, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 69 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 70 {
alustig3 0:a4f14eadd0df 71 _serialSOMO.putc(play[i]);
alustig3 0:a4f14eadd0df 72 }
AlexisCollin 2:b95724a49517 73 wait(0.2);
alustig3 0:a4f14eadd0df 74 }
alustig3 0:a4f14eadd0df 75
AlexisCollin 6:32eb30d2410f 76 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 77 // fonction de démarrage permettant l'émission d'un son au démarrage
AlexisCollin 6:32eb30d2410f 78 // de la carte pour avertir de sa mise sous tension
AlexisCollin 6:32eb30d2410f 79
AlexisCollin 6:32eb30d2410f 80 void SOMO::start()
AlexisCollin 2:b95724a49517 81 {
AlexisCollin 6:32eb30d2410f 82 // calcule du CHKSUM
AlexisCollin 2:b95724a49517 83 calc_chksum=CHKSUM-(0x19+0x01)+1;
AlexisCollin 6:32eb30d2410f 84
AlexisCollin 6:32eb30d2410f 85 // séparation des deux octets du chksum pour l'envois
AlexisCollin 2:b95724a49517 86 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 87 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 88
AlexisCollin 6:32eb30d2410f 89 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 90 unsigned char play2[8] = {0x7E, 0x19, 0x00, 0x00, 0x01, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 91 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 92 {
AlexisCollin 2:b95724a49517 93 _serialSOMO.putc(play2[i]);
AlexisCollin 2:b95724a49517 94 }
AlexisCollin 2:b95724a49517 95 wait(0.2);
AlexisCollin 6:32eb30d2410f 96
AlexisCollin 6:32eb30d2410f 97 // calcule du CHKSUM
AlexisCollin 2:b95724a49517 98 calc_chksum=CHKSUM-(0x0F+0x63+0x01)+1;
AlexisCollin 6:32eb30d2410f 99
AlexisCollin 6:32eb30d2410f 100 // séparation des deux octets du chksum pour l'envois
AlexisCollin 2:b95724a49517 101 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 102 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 103
AlexisCollin 6:32eb30d2410f 104 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 105 unsigned char play1[8] = {0x7E, 0x0F, 0x00, 0x63, 0x01, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 106 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 107 {
AlexisCollin 2:b95724a49517 108 _serialSOMO.putc(play1[i]);
AlexisCollin 2:b95724a49517 109 }
AlexisCollin 2:b95724a49517 110 wait(0.2);
AlexisCollin 6:32eb30d2410f 111
AlexisCollin 6:32eb30d2410f 112 // calcule du CHKSUM
AlexisCollin 2:b95724a49517 113 calc_chksum=CHKSUM-(0x0D)+1;
AlexisCollin 6:32eb30d2410f 114
AlexisCollin 6:32eb30d2410f 115 // séparation des deux octets du chksum pour l'envois
AlexisCollin 2:b95724a49517 116 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 117 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 118
AlexisCollin 6:32eb30d2410f 119 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 120 unsigned char play3[8] = {0x7E, 0x0D, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 121 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 122 {
AlexisCollin 2:b95724a49517 123 _serialSOMO.putc(play3[i]);
AlexisCollin 2:b95724a49517 124 }
AlexisCollin 2:b95724a49517 125 wait(0.2);
AlexisCollin 2:b95724a49517 126 }
AlexisCollin 2:b95724a49517 127
AlexisCollin 6:32eb30d2410f 128 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 129 // stop la lecture de n'importe quelle musique
AlexisCollin 6:32eb30d2410f 130
AlexisCollin 6:32eb30d2410f 131 void SOMO::stopTrack()
AlexisCollin 2:b95724a49517 132 {
AlexisCollin 6:32eb30d2410f 133 // calcule du CHKSUM
AlexisCollin 2:b95724a49517 134 calc_chksum=CHKSUM-(0x16)+1;
AlexisCollin 6:32eb30d2410f 135
AlexisCollin 6:32eb30d2410f 136 // séparation des deux octets du chksum pour l'envois
AlexisCollin 2:b95724a49517 137 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 138 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 139
AlexisCollin 6:32eb30d2410f 140 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 141 unsigned char stop[8] = {0x7E, 0x16, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 142 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 143 {
alustig3 0:a4f14eadd0df 144 _serialSOMO.putc(stop[i]);
alustig3 0:a4f14eadd0df 145 }
alustig3 0:a4f14eadd0df 146 }
alustig3 0:a4f14eadd0df 147
AlexisCollin 6:32eb30d2410f 148 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 149 // change le volume (de 0 a 30)
AlexisCollin 6:32eb30d2410f 150
AlexisCollin 6:32eb30d2410f 151 void SOMO::volume(unsigned char vol)
AlexisCollin 2:b95724a49517 152 {
AlexisCollin 2:b95724a49517 153 if (vol>0 && vol<31)
AlexisCollin 2:b95724a49517 154 {
AlexisCollin 6:32eb30d2410f 155 // calcule du CHKSUM
AlexisCollin 2:b95724a49517 156 calc_chksum=CHKSUM-(0x06 + vol)+1;
AlexisCollin 6:32eb30d2410f 157
AlexisCollin 6:32eb30d2410f 158 // séparation des deux octets du chksum pour l'envois
AlexisCollin 2:b95724a49517 159 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 160 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 161
AlexisCollin 6:32eb30d2410f 162 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 163 unsigned char changeVol[8] = {0x7E, 0x06, 0x00, 0x00, vol, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 164 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 165 {
alustig3 0:a4f14eadd0df 166 _serialSOMO.putc(changeVol[i]);
alustig3 0:a4f14eadd0df 167 }
alustig3 0:a4f14eadd0df 168 }
alustig3 0:a4f14eadd0df 169 }
alustig3 0:a4f14eadd0df 170
AlexisCollin 6:32eb30d2410f 171 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 172 // remise a zéro du module
AlexisCollin 6:32eb30d2410f 173
AlexisCollin 6:32eb30d2410f 174 void SOMO::reset()
AlexisCollin 2:b95724a49517 175 {
AlexisCollin 6:32eb30d2410f 176 // envois des octets sur la liaison série du SOMO-II
alustig3 0:a4f14eadd0df 177 unsigned char reset[8] = {0x7E, 0x0C, 0x00, 0x00, 0x00, 0xFF, 0xF4, 0xEF};
AlexisCollin 2:b95724a49517 178 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 179 {
alustig3 0:a4f14eadd0df 180 _serialSOMO.putc(reset[i]);
alustig3 0:a4f14eadd0df 181 }
alustig3 0:a4f14eadd0df 182 }
AlexisCollin 2:b95724a49517 183
AlexisCollin 6:32eb30d2410f 184 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 185 // Fonction pour jouer tout les sons de la carte en continus en prennant pour point de départ
AlexisCollin 6:32eb30d2410f 186 // le répertoire et la chansons données
AlexisCollin 6:32eb30d2410f 187
AlexisCollin 2:b95724a49517 188 void SOMO::continuous(unsigned char repository, unsigned char track)
AlexisCollin 2:b95724a49517 189 {
AlexisCollin 2:b95724a49517 190 calc_chksum=CHKSUM-(0x0F+repository+track)+1;
AlexisCollin 2:b95724a49517 191 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 192 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 193
AlexisCollin 6:32eb30d2410f 194 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 195 unsigned char play1[8] = {0x7E, 0x0F, 0x00, repository, track, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 196 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 197 {
AlexisCollin 2:b95724a49517 198 _serialSOMO.putc(play1[i]);
AlexisCollin 2:b95724a49517 199 }
AlexisCollin 2:b95724a49517 200 wait(0.2);
AlexisCollin 2:b95724a49517 201 calc_chksum=CHKSUM-(0x11+0x01)+1;
AlexisCollin 2:b95724a49517 202 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 203 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 204
AlexisCollin 6:32eb30d2410f 205 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 206 unsigned char play2[8] = {0x7E, 0x11, 0x00, 0x00, 0x01, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 207 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 208 {
AlexisCollin 2:b95724a49517 209 _serialSOMO.putc(play2[i]);
AlexisCollin 2:b95724a49517 210 }
AlexisCollin 2:b95724a49517 211 wait(0.2);
AlexisCollin 2:b95724a49517 212 calc_chksum=CHKSUM-(0x0D)+1;
AlexisCollin 2:b95724a49517 213 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 2:b95724a49517 214 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 215
AlexisCollin 6:32eb30d2410f 216 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 217 unsigned char play[8] = {0x7E, 0x0D, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 218 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 219 {
AlexisCollin 6:32eb30d2410f 220 _serialSOMO.putc(play[i]);
AlexisCollin 6:32eb30d2410f 221 }
AlexisCollin 6:32eb30d2410f 222 wait(0.2);
AlexisCollin 6:32eb30d2410f 223 }
AlexisCollin 6:32eb30d2410f 224
AlexisCollin 6:32eb30d2410f 225 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 226 // Mise en pause de la lecture
AlexisCollin 6:32eb30d2410f 227
AlexisCollin 6:32eb30d2410f 228 void SOMO::pause()
AlexisCollin 6:32eb30d2410f 229 {
AlexisCollin 6:32eb30d2410f 230 calc_chksum=CHKSUM-(0x0E)+1;
AlexisCollin 6:32eb30d2410f 231 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 232 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 233
AlexisCollin 6:32eb30d2410f 234 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 235 unsigned char play[8] = {0x7E, 0x0E, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 236 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 237 {
AlexisCollin 6:32eb30d2410f 238 _serialSOMO.putc(play[i]);
AlexisCollin 6:32eb30d2410f 239 }
AlexisCollin 6:32eb30d2410f 240 wait(0.2);
AlexisCollin 6:32eb30d2410f 241 }
AlexisCollin 6:32eb30d2410f 242
AlexisCollin 6:32eb30d2410f 243 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 244 // Reprise de la lecture
AlexisCollin 6:32eb30d2410f 245
AlexisCollin 6:32eb30d2410f 246 void SOMO::resume()
AlexisCollin 6:32eb30d2410f 247 {
AlexisCollin 6:32eb30d2410f 248 calc_chksum=CHKSUM-(0x0D)+1;
AlexisCollin 6:32eb30d2410f 249 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 250 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 251
AlexisCollin 6:32eb30d2410f 252 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 2:b95724a49517 253 unsigned char play[8] = {0x7E, 0x0D, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 2:b95724a49517 254 for (int i = 0; i <8; i++)
AlexisCollin 2:b95724a49517 255 {
AlexisCollin 2:b95724a49517 256 _serialSOMO.putc(play[i]);
AlexisCollin 2:b95724a49517 257 }
AlexisCollin 2:b95724a49517 258 wait(0.2);
AlexisCollin 2:b95724a49517 259 }
AlexisCollin 2:b95724a49517 260
AlexisCollin 6:32eb30d2410f 261 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 262 // Réglage de l'equilizer
AlexisCollin 6:32eb30d2410f 263
AlexisCollin 6:32eb30d2410f 264 void SOMO::set_EQ(unsigned char mod)
AlexisCollin 6:32eb30d2410f 265 {
AlexisCollin 6:32eb30d2410f 266 calc_chksum=CHKSUM-(0x07+mod)+1;
AlexisCollin 6:32eb30d2410f 267 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 268 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 269
AlexisCollin 6:32eb30d2410f 270 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 271 unsigned char play[8] = {0x7E, 0x07, 0x00, 0x00, mod, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 272 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 273 {
AlexisCollin 6:32eb30d2410f 274 _serialSOMO.putc(play[i]);
AlexisCollin 6:32eb30d2410f 275 }
AlexisCollin 6:32eb30d2410f 276 wait(0.2);
AlexisCollin 6:32eb30d2410f 277 }
AlexisCollin 6:32eb30d2410f 278
AlexisCollin 6:32eb30d2410f 279 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 280 // Joue les piste aléatoirement
AlexisCollin 6:32eb30d2410f 281
AlexisCollin 6:32eb30d2410f 282 void SOMO::play_random()
AlexisCollin 6:32eb30d2410f 283 {
AlexisCollin 6:32eb30d2410f 284 calc_chksum=CHKSUM-(0x18)+1;
AlexisCollin 6:32eb30d2410f 285 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 286 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 287
AlexisCollin 6:32eb30d2410f 288 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 289 unsigned char play[8] = {0x7E, 0x18, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 290 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 291 {
AlexisCollin 6:32eb30d2410f 292 _serialSOMO.putc(play[i]);
AlexisCollin 6:32eb30d2410f 293 }
AlexisCollin 6:32eb30d2410f 294 wait(0.2);
AlexisCollin 6:32eb30d2410f 295 calc_chksum=CHKSUM-(0x0D)+1;
AlexisCollin 6:32eb30d2410f 296 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 297 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 298
AlexisCollin 6:32eb30d2410f 299 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 300 unsigned char play1[8] = {0x7E, 0x0D, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 301 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 302 {
AlexisCollin 6:32eb30d2410f 303 _serialSOMO.putc(play1[i]);
AlexisCollin 6:32eb30d2410f 304 }
AlexisCollin 6:32eb30d2410f 305 wait(0.2);
AlexisCollin 6:32eb30d2410f 306 }
AlexisCollin 6:32eb30d2410f 307
AlexisCollin 6:32eb30d2410f 308 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 309 // Joue la piste suivante de la liste
AlexisCollin 6:32eb30d2410f 310
AlexisCollin 6:32eb30d2410f 311 void SOMO::next()
AlexisCollin 6:32eb30d2410f 312 {
AlexisCollin 6:32eb30d2410f 313 calc_chksum=CHKSUM-(0x01)+1;
AlexisCollin 6:32eb30d2410f 314 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 315 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 316
AlexisCollin 6:32eb30d2410f 317 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 318 unsigned char play1[8] = {0x7E, 0x01, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 319 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 320 {
AlexisCollin 6:32eb30d2410f 321 _serialSOMO.putc(play1[i]);
AlexisCollin 6:32eb30d2410f 322 }
AlexisCollin 6:32eb30d2410f 323 wait(0.2);
AlexisCollin 6:32eb30d2410f 324 }
AlexisCollin 6:32eb30d2410f 325
AlexisCollin 6:32eb30d2410f 326 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 327 // Joue la pise précédante de la liste
AlexisCollin 6:32eb30d2410f 328
AlexisCollin 6:32eb30d2410f 329 void SOMO::previous()
AlexisCollin 6:32eb30d2410f 330 {
AlexisCollin 6:32eb30d2410f 331 calc_chksum=CHKSUM-(0x02)+1;
AlexisCollin 6:32eb30d2410f 332 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 333 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 334
AlexisCollin 6:32eb30d2410f 335 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 336 unsigned char play1[8] = {0x7E, 0x02, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 337 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 338 {
AlexisCollin 6:32eb30d2410f 339 _serialSOMO.putc(play1[i]);
AlexisCollin 6:32eb30d2410f 340 }
AlexisCollin 6:32eb30d2410f 341 wait(0.2);
AlexisCollin 6:32eb30d2410f 342 }
AlexisCollin 6:32eb30d2410f 343
AlexisCollin 6:32eb30d2410f 344 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 345 // Lecture en boucle de la dernière piste jouée
AlexisCollin 6:32eb30d2410f 346
AlexisCollin 6:32eb30d2410f 347 void SOMO::repeat()
AlexisCollin 6:32eb30d2410f 348 {
AlexisCollin 6:32eb30d2410f 349 calc_chksum=CHKSUM-(0x0D)+1;
AlexisCollin 6:32eb30d2410f 350 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 351 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 352
AlexisCollin 6:32eb30d2410f 353 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 354 unsigned char play[8] = {0x7E, 0x0D, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 355 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 356 {
AlexisCollin 6:32eb30d2410f 357 _serialSOMO.putc(play[i]);
AlexisCollin 6:32eb30d2410f 358 }
AlexisCollin 6:32eb30d2410f 359 wait(0.2);
AlexisCollin 6:32eb30d2410f 360 calc_chksum=CHKSUM-(0x19)+1;
AlexisCollin 6:32eb30d2410f 361 chksum[0]=0xFF&(calc_chksum>>8);
AlexisCollin 6:32eb30d2410f 362 chksum[1]=0xFF&(calc_chksum);
AlexisCollin 6:32eb30d2410f 363
AlexisCollin 6:32eb30d2410f 364 // envois des octets sur la liaison série du SOMO-II
AlexisCollin 6:32eb30d2410f 365 unsigned char play1[8] = {0x7E, 0x19, 0x00, 0x00, 0x00, chksum[0], chksum[1], 0xEF};
AlexisCollin 6:32eb30d2410f 366 for (int i = 0; i <8; i++)
AlexisCollin 6:32eb30d2410f 367 {
AlexisCollin 6:32eb30d2410f 368 _serialSOMO.putc(play1[i]);
AlexisCollin 6:32eb30d2410f 369 }
AlexisCollin 6:32eb30d2410f 370 wait(0.2);
AlexisCollin 6:32eb30d2410f 371 }
AlexisCollin 6:32eb30d2410f 372
AlexisCollin 6:32eb30d2410f 373 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 374 // Fonction pour l'envois de message sur le can
AlexisCollin 6:32eb30d2410f 375
AlexisCollin 2:b95724a49517 376 void Sender::send()
AlexisCollin 2:b95724a49517 377 {
AlexisCollin 2:b95724a49517 378 if(sendflag==1)
AlexisCollin 2:b95724a49517 379 {
AlexisCollin 2:b95724a49517 380 char data_can_sender = is_busy;
AlexisCollin 2:b95724a49517 381 if(can.write(CANMessage(myID, reinterpret_cast<char*>(&data_can_sender), (sizeof(data_can_sender)))))
AlexisCollin 2:b95724a49517 382 {
AlexisCollin 6:32eb30d2410f 383 // mise a 0 du flag d'envois pour éviter les envois en boucle
AlexisCollin 2:b95724a49517 384 sendflag = 0;
AlexisCollin 2:b95724a49517 385 }
AlexisCollin 2:b95724a49517 386 }
AlexisCollin 2:b95724a49517 387 }
AlexisCollin 2:b95724a49517 388
AlexisCollin 6:32eb30d2410f 389 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 390 // Fonction pour l'aquisition de message sur le can
AlexisCollin 6:32eb30d2410f 391
AlexisCollin 2:b95724a49517 392 int comm()
AlexisCollin 2:b95724a49517 393 {
AlexisCollin 6:32eb30d2410f 394 // Vérification de la réception d'un message
AlexisCollin 2:b95724a49517 395 if(can.read(msg))
AlexisCollin 2:b95724a49517 396 {
AlexisCollin 6:32eb30d2410f 397 commande = msg.id;
AlexisCollin 6:32eb30d2410f 398 if((msg.id > 0x4A0) && (msg.id < 0x4AD))
AlexisCollin 2:b95724a49517 399 {
AlexisCollin 6:32eb30d2410f 400 // aquisition des données
AlexisCollin 6:32eb30d2410f 401 if(msg.data[0]!=NULL)
AlexisCollin 2:b95724a49517 402 {
AlexisCollin 6:32eb30d2410f 403 message1 = msg.data[0];
AlexisCollin 6:32eb30d2410f 404 if(msg.data[1]!=NULL)
AlexisCollin 2:b95724a49517 405 {
AlexisCollin 6:32eb30d2410f 406 message2 = msg.data[1];
AlexisCollin 2:b95724a49517 407 }
AlexisCollin 2:b95724a49517 408 }
AlexisCollin 6:32eb30d2410f 409
AlexisCollin 6:32eb30d2410f 410 // regroupement des données sur un int qui sera renvoyer en fin de fonction
AlexisCollin 2:b95724a49517 411 }
AlexisCollin 6:32eb30d2410f 412 data_can = (message1)+(message2 << 8)+(commande << 16);
AlexisCollin 6:32eb30d2410f 413 sendflag = 0;
AlexisCollin 2:b95724a49517 414 }
AlexisCollin 2:b95724a49517 415 else
AlexisCollin 2:b95724a49517 416 {
AlexisCollin 6:32eb30d2410f 417 data_can = data_can & 0x0000FFFF;
AlexisCollin 2:b95724a49517 418 }
AlexisCollin 2:b95724a49517 419 if(can.rderror() || can.tderror())
AlexisCollin 2:b95724a49517 420 {
AlexisCollin 2:b95724a49517 421 can.reset();
AlexisCollin 2:b95724a49517 422 }
AlexisCollin 2:b95724a49517 423
AlexisCollin 2:b95724a49517 424 return data_can;
AlexisCollin 2:b95724a49517 425 }
AlexisCollin 2:b95724a49517 426
AlexisCollin 6:32eb30d2410f 427 // **************************************************************************************************
AlexisCollin 6:32eb30d2410f 428 // changement de l'état de la carte et mise a 1 du flag d'envois pour transmettre cet état sur le CAN
AlexisCollin 6:32eb30d2410f 429
AlexisCollin 2:b95724a49517 430 void not_busy()
AlexisCollin 2:b95724a49517 431 {
AlexisCollin 2:b95724a49517 432 is_busy = 0x00;
AlexisCollin 2:b95724a49517 433 sendflag=1;
AlexisCollin 2:b95724a49517 434 sender.send();
AlexisCollin 6:32eb30d2410f 435 }
AlexisCollin 6:32eb30d2410f 436
AlexisCollin 6:32eb30d2410f 437 void busy()
AlexisCollin 6:32eb30d2410f 438 {
AlexisCollin 6:32eb30d2410f 439 is_busy = 0x01;
AlexisCollin 6:32eb30d2410f 440 sendflag=1;
AlexisCollin 6:32eb30d2410f 441 sender.send();
AlexisCollin 2:b95724a49517 442 }