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 20:46:56 2016 +0000
Revision:
7:48800c84346c
Parent:
4:f0cbc6c47b11
Ajout du menu

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 7:48800c84346c 22 joystickPos = "CENTRE";
lucas_favre 7:48800c84346c 23 select_app = 0;
lucas_favre 7:48800c84346c 24 menuItem=0;
lucas_favre 1:4659469cc20d 25
lucas_favre 1:4659469cc20d 26 }
lucas_favre 1:4659469cc20d 27
lucas_favre 1:4659469cc20d 28 // Lecture de la position du joystick
lucas_favre 1:4659469cc20d 29 // sous forme de chaîne caractère
lucas_favre 1:4659469cc20d 30
lucas_favre 1:4659469cc20d 31 void MyLab::JoyStick_Position(char pos[]){
lucas_favre 1:4659469cc20d 32
lucas_favre 1:4659469cc20d 33 result = ~_joystick.read() + 31 ;
lucas_favre 1:4659469cc20d 34 switch (result) {
lucas_favre 1:4659469cc20d 35 case 0:
lucas_favre 1:4659469cc20d 36 sprintf(pos,"North");
lucas_favre 1:4659469cc20d 37 break;
lucas_favre 1:4659469cc20d 38 case 1:
lucas_favre 1:4659469cc20d 39 sprintf(pos,"Center");
lucas_favre 1:4659469cc20d 40 break;
lucas_favre 1:4659469cc20d 41 case 7:
lucas_favre 1:4659469cc20d 42 sprintf(pos,"West");
lucas_favre 1:4659469cc20d 43 break;
lucas_favre 1:4659469cc20d 44 case 3:
lucas_favre 1:4659469cc20d 45 sprintf(pos,"South");
lucas_favre 1:4659469cc20d 46 break;
lucas_favre 1:4659469cc20d 47 case 15:
lucas_favre 1:4659469cc20d 48 sprintf(pos,"East");
lucas_favre 1:4659469cc20d 49 break;
lucas_favre 1:4659469cc20d 50 default:
lucas_favre 1:4659469cc20d 51 sprintf(pos,"");
lucas_favre 1:4659469cc20d 52 break;
lucas_favre 1:4659469cc20d 53 }
lucas_favre 1:4659469cc20d 54 }
lucas_favre 1:4659469cc20d 55 // Enregistrement de son sur le microphone SPU0414HR5H
lucas_favre 1:4659469cc20d 56 short * MyLab::Sound_Record(short * dat){
lucas_favre 1:4659469cc20d 57 wait(1);
lucas_favre 1:4659469cc20d 58 micCB=0;
lucas_favre 1:4659469cc20d 59
lucas_favre 1:4659469cc20d 60 for(int i=0;i<100;i++){ micCB+=_micro; }
lucas_favre 1:4659469cc20d 61 micCB/=100;
lucas_favre 1:4659469cc20d 62
lucas_favre 1:4659469cc20d 63 // Enregistrement sur le microphone
lucas_favre 1:4659469cc20d 64 for(int i=0;i<NUMDAT; i++){
lucas_favre 1:4659469cc20d 65 dat[i]=(int)((_micro-micCB)*32768);
lucas_favre 1:4659469cc20d 66 wait_us(DLY);
lucas_favre 1:4659469cc20d 67 }
lucas_favre 1:4659469cc20d 68 return dat;
lucas_favre 1:4659469cc20d 69 }
lucas_favre 1:4659469cc20d 70 // Lecture d'un son enregistré par le microphone sur
lucas_favre 1:4659469cc20d 71 // la sortie audio (port jack)
lucas_favre 1:4659469cc20d 72 void MyLab::Sound_Play(short * buffer){
lucas_favre 1:4659469cc20d 73
lucas_favre 1:4659469cc20d 74 for(int i=0;i<NUMDAT; i++){
lucas_favre 1:4659469cc20d 75 _speaker=((float)buffer[i])/32768*10+0.5;
lucas_favre 1:4659469cc20d 76 wait_us(DLY);
lucas_favre 1:4659469cc20d 77 }
lucas_favre 1:4659469cc20d 78 }
lucas_favre 1:4659469cc20d 79
lucas_favre 1:4659469cc20d 80 // Génération d'une note vers la sortie audio
lucas_favre 1:4659469cc20d 81 void MyLab::PlayNote(float frequency, float duration, float volume) {
lucas_favre 1:4659469cc20d 82 // scale samples using current volume level arg
lucas_favre 1:4659469cc20d 83 for(int k=0; k<32; k++) {
lucas_favre 1:4659469cc20d 84 Analog_scaled_data[k] = Analog_out_data[k] * volume;
lucas_favre 1:4659469cc20d 85 }
lucas_favre 1:4659469cc20d 86 // reset to start of sample array
lucas_favre 1:4659469cc20d 87 s = 0;
lucas_favre 1:4659469cc20d 88 // turn on timer interrupts to start sine wave output
lucas_favre 1:4659469cc20d 89 Sample_Period.attach(this,&MyLab::Sample_timer_interrupt, 1.0/(frequency*32.0));
lucas_favre 1:4659469cc20d 90 // play note for specified time
lucas_favre 1:4659469cc20d 91 wait(duration);
lucas_favre 1:4659469cc20d 92 // turns off timer interrupts
lucas_favre 1:4659469cc20d 93 Sample_Period.detach();
lucas_favre 1:4659469cc20d 94 // sets output to mid range - analog zero
lucas_favre 1:4659469cc20d 95 _speaker.write_u16(32768);
lucas_favre 1:4659469cc20d 96
lucas_favre 1:4659469cc20d 97 }
lucas_favre 2:c3fedebb6c7e 98 // Lecture de la valeur rgb du capteur TCS3103FN
lucas_favre 1:4659469cc20d 99 float MyLab::Luminosity_Mesure(){
lucas_favre 1:4659469cc20d 100 r = _r;
lucas_favre 1:4659469cc20d 101 g = _g;
lucas_favre 1:4659469cc20d 102 b = _b;
lucas_favre 1:4659469cc20d 103
lucas_favre 1:4659469cc20d 104 return r+g+b;
lucas_favre 1:4659469cc20d 105 }
lucas_favre 1:4659469cc20d 106
lucas_favre 7:48800c84346c 107
lucas_favre 2:c3fedebb6c7e 108 // Stockage des valeurs x y z de l'accéléromètre MMA7660FC
lucas_favre 1:4659469cc20d 109 float MyLab::Acc_X_Mesure(){
lucas_favre 1:4659469cc20d 110 return Acc.read_x();
lucas_favre 1:4659469cc20d 111 }
lucas_favre 1:4659469cc20d 112
lucas_favre 1:4659469cc20d 113 float MyLab::Acc_Y_Mesure(){
lucas_favre 1:4659469cc20d 114 return Acc.read_y();
lucas_favre 1:4659469cc20d 115 }
lucas_favre 1:4659469cc20d 116
lucas_favre 1:4659469cc20d 117 float MyLab::Acc_Z_Mesure(){
lucas_favre 1:4659469cc20d 118 return Acc.read_z();
lucas_favre 1:4659469cc20d 119 }
lucas_favre 1:4659469cc20d 120
lucas_favre 7:48800c84346c 121 void MyLab::printMenu(int menuitem){
lucas_favre 7:48800c84346c 122 lcd.cls();
lucas_favre 7:48800c84346c 123 lcd.locate(0,0);
lucas_favre 7:48800c84346c 124 switch (menuItem)
lucas_favre 7:48800c84346c 125 {
lucas_favre 7:48800c84346c 126 case 0:
lucas_favre 7:48800c84346c 127 lcd.printf("mBed Librairie pour MyLab");
lucas_favre 7:48800c84346c 128 lcd.locate(0,16);
lucas_favre 7:48800c84346c 129 lcd.printf("Scroll with joystick");
lucas_favre 7:48800c84346c 130 break;
lucas_favre 7:48800c84346c 131 case 1:
lucas_favre 7:48800c84346c 132 lcd.printf("Lecture de deux notes");
lucas_favre 7:48800c84346c 133 lcd.locate(0,16);
lucas_favre 7:48800c84346c 134 lcd.printf("Click center to Start");
lucas_favre 7:48800c84346c 135 break;
lucas_favre 7:48800c84346c 136 case 2:
lucas_favre 7:48800c84346c 137 lcd.printf("Enregistrement audio");
lucas_favre 7:48800c84346c 138 lcd.locate(0,16);
lucas_favre 7:48800c84346c 139 lcd.printf("Click center to Start");
lucas_favre 7:48800c84346c 140 break;
lucas_favre 7:48800c84346c 141 case 3:
lucas_favre 7:48800c84346c 142 lcd.printf("Lecture valeur x acc");
lucas_favre 7:48800c84346c 143 lcd.locate(0,16);
lucas_favre 7:48800c84346c 144 lcd.printf("Click center to Start");
lucas_favre 7:48800c84346c 145 break;
lucas_favre 7:48800c84346c 146 case 4:
lucas_favre 7:48800c84346c 147 lcd.printf("Credits");
lucas_favre 7:48800c84346c 148 lcd.locate(0,16);
lucas_favre 7:48800c84346c 149 lcd.printf("Favre Lucas ITI3 Hepia ");
lucas_favre 7:48800c84346c 150 break;
lucas_favre 7:48800c84346c 151 }
lucas_favre 7:48800c84346c 152
lucas_favre 7:48800c84346c 153 }
lucas_favre 7:48800c84346c 154
lucas_favre 7:48800c84346c 155 int MyLab::setMenu()
lucas_favre 7:48800c84346c 156 {
lucas_favre 7:48800c84346c 157 char pos[6];
lucas_favre 7:48800c84346c 158 periph.JoyStick_Position(pos);
lucas_favre 7:48800c84346c 159
lucas_favre 7:48800c84346c 160 if (strcmp(pos,"South") == 0)
lucas_favre 7:48800c84346c 161 {
lucas_favre 7:48800c84346c 162 periph.joystickPos = "DOWN";
lucas_favre 7:48800c84346c 163 if (periph.menuItem >= 0 && periph.menuItem < 4)
lucas_favre 7:48800c84346c 164 printMenu(++periph.menuItem);
lucas_favre 7:48800c84346c 165 }
lucas_favre 7:48800c84346c 166 else if (strcmp(pos,"Center") == 0){
lucas_favre 7:48800c84346c 167 if (periph.menuItem == 1)
lucas_favre 7:48800c84346c 168 periph.select_app = 1;
lucas_favre 7:48800c84346c 169 else if(periph.menuItem == 2)
lucas_favre 7:48800c84346c 170 periph.select_app = 2;
lucas_favre 7:48800c84346c 171 else if(periph.menuItem == 3)
lucas_favre 7:48800c84346c 172 select_app = 3;
lucas_favre 7:48800c84346c 173 periph.joystickPos = "CLICK";
lucas_favre 7:48800c84346c 174 }
lucas_favre 7:48800c84346c 175 else if (strcmp(pos,"North") == 0)
lucas_favre 7:48800c84346c 176 {
lucas_favre 7:48800c84346c 177 periph.joystickPos = "UP";
lucas_favre 7:48800c84346c 178 if (periph.menuItem <= 4 && periph.menuItem > 0)
lucas_favre 7:48800c84346c 179 printMenu(--periph.menuItem);
lucas_favre 7:48800c84346c 180 }
lucas_favre 7:48800c84346c 181 return periph.select_app;
lucas_favre 7:48800c84346c 182 }