Librairie contenant les fonctions nécessaires pour pouvoir contrôler les différents composants de la carte d'extension MyLab

Dependencies:   MMA7660FC LCD_lib

Dependents:   Example_MyLab_lib

Committer:
lucas_favre
Date:
Tue Mar 29 18:56:36 2016 +0000
Revision:
4:f0cbc6c47b11
Parent:
2:c3fedebb6c7e
Child:
7:48800c84346c

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucas_favre 1:4659469cc20d 1 /*
lucas_favre 1:4659469cc20d 2 * MyLab.cpp
lucas_favre 1:4659469cc20d 3 * Librairie réalisé pour l'utilisation des composants de la carte d'extension MyLab
lucas_favre 1:4659469cc20d 4 *
lucas_favre 1:4659469cc20d 5 *
lucas_favre 1:4659469cc20d 6 * Author: Favre Lucas
lucas_favre 1:4659469cc20d 7 */
lucas_favre 1:4659469cc20d 8 #include "MyLab_Lib.h"
lucas_favre 1:4659469cc20d 9 #include "mbed.h"
lucas_favre 1:4659469cc20d 10
lucas_favre 4:f0cbc6c47b11 11 extern MyLab periph;
lucas_favre 1:4659469cc20d 12
lucas_favre 1:4659469cc20d 13 MyLab::MyLab(PinName Joy_c,PinName Joy_e,PinName Joy_n,PinName Joy_w,PinName Joy_s,PinName mic,PinName speaker,PinName capt_r,PinName capt_g,PinName capt_b) :
lucas_favre 1:4659469cc20d 14 _joystick (Joy_c,Joy_e,Joy_n,Joy_w,Joy_s), _micro(mic),_speaker(speaker),_r(capt_r),_g(capt_g),_b(capt_b) {
lucas_favre 1:4659469cc20d 15
lucas_favre 1:4659469cc20d 16
lucas_favre 1:4659469cc20d 17 for(int k=0; k<32; k++) {
lucas_favre 1:4659469cc20d 18 Analog_out_data[k] = int (65536.0 * ((1.0 + sin((float(k)/32.0*6.28318530717959)))/2.0));
lucas_favre 1:4659469cc20d 19 }
lucas_favre 1:4659469cc20d 20
lucas_favre 1:4659469cc20d 21 Acc.init();
lucas_favre 1:4659469cc20d 22
lucas_favre 1:4659469cc20d 23 }
lucas_favre 1:4659469cc20d 24
lucas_favre 1:4659469cc20d 25 // Lecture de la position du joystick
lucas_favre 1:4659469cc20d 26 // sous forme de chaîne caractère
lucas_favre 1:4659469cc20d 27
lucas_favre 1:4659469cc20d 28 void MyLab::JoyStick_Position(char pos[]){
lucas_favre 1:4659469cc20d 29
lucas_favre 1:4659469cc20d 30 result = ~_joystick.read() + 31 ;
lucas_favre 1:4659469cc20d 31 switch (result) {
lucas_favre 1:4659469cc20d 32 case 0:
lucas_favre 1:4659469cc20d 33 sprintf(pos,"North");
lucas_favre 1:4659469cc20d 34 break;
lucas_favre 1:4659469cc20d 35 case 1:
lucas_favre 1:4659469cc20d 36 sprintf(pos,"Center");
lucas_favre 1:4659469cc20d 37 break;
lucas_favre 1:4659469cc20d 38 case 7:
lucas_favre 1:4659469cc20d 39 sprintf(pos,"West");
lucas_favre 1:4659469cc20d 40 break;
lucas_favre 1:4659469cc20d 41 case 3:
lucas_favre 1:4659469cc20d 42 sprintf(pos,"South");
lucas_favre 1:4659469cc20d 43 break;
lucas_favre 1:4659469cc20d 44 case 15:
lucas_favre 1:4659469cc20d 45 sprintf(pos,"East");
lucas_favre 1:4659469cc20d 46 break;
lucas_favre 1:4659469cc20d 47 default:
lucas_favre 1:4659469cc20d 48 sprintf(pos,"");
lucas_favre 1:4659469cc20d 49 break;
lucas_favre 1:4659469cc20d 50 }
lucas_favre 1:4659469cc20d 51 }
lucas_favre 1:4659469cc20d 52 // Enregistrement de son sur le microphone SPU0414HR5H
lucas_favre 1:4659469cc20d 53 short * MyLab::Sound_Record(short * dat){
lucas_favre 1:4659469cc20d 54 wait(1);
lucas_favre 1:4659469cc20d 55 micCB=0;
lucas_favre 1:4659469cc20d 56
lucas_favre 1:4659469cc20d 57 for(int i=0;i<100;i++){ micCB+=_micro; }
lucas_favre 1:4659469cc20d 58 micCB/=100;
lucas_favre 1:4659469cc20d 59
lucas_favre 1:4659469cc20d 60 // Enregistrement sur le microphone
lucas_favre 1:4659469cc20d 61 for(int i=0;i<NUMDAT; i++){
lucas_favre 1:4659469cc20d 62 dat[i]=(int)((_micro-micCB)*32768);
lucas_favre 1:4659469cc20d 63 wait_us(DLY);
lucas_favre 1:4659469cc20d 64 }
lucas_favre 1:4659469cc20d 65 return dat;
lucas_favre 1:4659469cc20d 66 }
lucas_favre 1:4659469cc20d 67 // Lecture d'un son enregistré par le microphone sur
lucas_favre 1:4659469cc20d 68 // la sortie audio (port jack)
lucas_favre 1:4659469cc20d 69 void MyLab::Sound_Play(short * buffer){
lucas_favre 1:4659469cc20d 70
lucas_favre 1:4659469cc20d 71 for(int i=0;i<NUMDAT; i++){
lucas_favre 1:4659469cc20d 72 _speaker=((float)buffer[i])/32768*10+0.5;
lucas_favre 1:4659469cc20d 73 wait_us(DLY);
lucas_favre 1:4659469cc20d 74 }
lucas_favre 1:4659469cc20d 75 }
lucas_favre 1:4659469cc20d 76
lucas_favre 1:4659469cc20d 77 // Génération d'une note vers la sortie audio
lucas_favre 1:4659469cc20d 78 void MyLab::PlayNote(float frequency, float duration, float volume) {
lucas_favre 1:4659469cc20d 79 // scale samples using current volume level arg
lucas_favre 1:4659469cc20d 80 for(int k=0; k<32; k++) {
lucas_favre 1:4659469cc20d 81 Analog_scaled_data[k] = Analog_out_data[k] * volume;
lucas_favre 1:4659469cc20d 82 }
lucas_favre 1:4659469cc20d 83 // reset to start of sample array
lucas_favre 1:4659469cc20d 84 s = 0;
lucas_favre 1:4659469cc20d 85 // turn on timer interrupts to start sine wave output
lucas_favre 1:4659469cc20d 86 Sample_Period.attach(this,&MyLab::Sample_timer_interrupt, 1.0/(frequency*32.0));
lucas_favre 1:4659469cc20d 87 // play note for specified time
lucas_favre 1:4659469cc20d 88 wait(duration);
lucas_favre 1:4659469cc20d 89 // turns off timer interrupts
lucas_favre 1:4659469cc20d 90 Sample_Period.detach();
lucas_favre 1:4659469cc20d 91 // sets output to mid range - analog zero
lucas_favre 1:4659469cc20d 92 _speaker.write_u16(32768);
lucas_favre 1:4659469cc20d 93
lucas_favre 1:4659469cc20d 94 }
lucas_favre 2:c3fedebb6c7e 95 // Lecture de la valeur rgb du capteur TCS3103FN
lucas_favre 1:4659469cc20d 96 float MyLab::Luminosity_Mesure(){
lucas_favre 1:4659469cc20d 97 r = _r;
lucas_favre 1:4659469cc20d 98 g = _g;
lucas_favre 1:4659469cc20d 99 b = _b;
lucas_favre 1:4659469cc20d 100
lucas_favre 1:4659469cc20d 101 return r+g+b;
lucas_favre 1:4659469cc20d 102 }
lucas_favre 1:4659469cc20d 103
lucas_favre 2:c3fedebb6c7e 104 // Stockage des valeurs x y z de l'accéléromètre MMA7660FC
lucas_favre 1:4659469cc20d 105 float MyLab::Acc_X_Mesure(){
lucas_favre 1:4659469cc20d 106 return Acc.read_x();
lucas_favre 1:4659469cc20d 107 }
lucas_favre 1:4659469cc20d 108
lucas_favre 1:4659469cc20d 109 float MyLab::Acc_Y_Mesure(){
lucas_favre 1:4659469cc20d 110 return Acc.read_y();
lucas_favre 1:4659469cc20d 111 }
lucas_favre 1:4659469cc20d 112
lucas_favre 1:4659469cc20d 113 float MyLab::Acc_Z_Mesure(){
lucas_favre 1:4659469cc20d 114 return Acc.read_z();
lucas_favre 1:4659469cc20d 115 }
lucas_favre 1:4659469cc20d 116