Librairie contenant les fonctions nécessaires pour pouvoir contrôler les différents composants de la carte d'extension MyLab
Dependencies: MMA7660FC LCD_lib
MyLab_Lib.cpp@4:f0cbc6c47b11, 2016-03-29 (annotated)
- 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?
User | Revision | Line number | New 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 |