Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
SOMO.cpp@6:32eb30d2410f, 2020-04-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |