Car stereo control using TDA7419 for input select, audio control. Adafruit 96x64 monochrome 0.96" display to show the audio selections four buttons to control selections. Next steps: take input from the car steering wheel controls!

Dependencies:   Adafruit_GFX PinDetect_KL25Z PreampTDA7419 mbed

Committer:
danielashercohen
Date:
Fri Oct 10 04:58:19 2014 +0000
Revision:
0:36eee45709c8
Child:
1:f5b8687f67b8
Working display and buttons;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
danielashercohen 0:36eee45709c8 1 #include "mbed.h"
danielashercohen 0:36eee45709c8 2 #include "PinDetect.h"
danielashercohen 0:36eee45709c8 3 #include "ssd1306.h"
danielashercohen 0:36eee45709c8 4 #include "standard_font.h"
danielashercohen 0:36eee45709c8 5 #include "bold_font.h"
danielashercohen 0:36eee45709c8 6
danielashercohen 0:36eee45709c8 7 PinDetect PinUp ( PTA1 );
danielashercohen 0:36eee45709c8 8 PinDetect PinLeft ( PTD4 );
danielashercohen 0:36eee45709c8 9 PinDetect PinRight ( PTA2 );
danielashercohen 0:36eee45709c8 10 PinDetect PinDown ( PTA12 );
danielashercohen 0:36eee45709c8 11
danielashercohen 0:36eee45709c8 12 DigitalOut led1( LED1 );
danielashercohen 0:36eee45709c8 13 DigitalOut led2( LED2 );
danielashercohen 0:36eee45709c8 14 DigitalOut led3( LED3 );
danielashercohen 0:36eee45709c8 15
danielashercohen 0:36eee45709c8 16 SSD1306 display (PTA13 /* cs */, PTD5 /* reset */, PTD0 /* dc */, PTD1 /* clock */, PTD2 /* data */); // KL25Z
danielashercohen 0:36eee45709c8 17
danielashercohen 0:36eee45709c8 18 void displayWrite(char firstLine[], int value)
danielashercohen 0:36eee45709c8 19 {
danielashercohen 0:36eee45709c8 20 display.clear();
danielashercohen 0:36eee45709c8 21 display.printf("%s\r\n", firstLine);
danielashercohen 0:36eee45709c8 22 display.printf("%d", value);
danielashercohen 0:36eee45709c8 23 display.update();
danielashercohen 0:36eee45709c8 24 }
danielashercohen 0:36eee45709c8 25
danielashercohen 0:36eee45709c8 26 ///////////////////////////
danielashercohen 0:36eee45709c8 27 // Variables for TDA7419 //
danielashercohen 0:36eee45709c8 28 ///////////////////////////
danielashercohen 0:36eee45709c8 29 // I2C address for TDA7419
danielashercohen 0:36eee45709c8 30 #define TDA7419_ADDRESS 0x44
danielashercohen 0:36eee45709c8 31
danielashercohen 0:36eee45709c8 32 ////////////////////////////////////
danielashercohen 0:36eee45709c8 33 // register addresses for TDA7419 //
danielashercohen 0:36eee45709c8 34 ////////////////////////////////////
danielashercohen 0:36eee45709c8 35 char s_main_source = 0;
danielashercohen 0:36eee45709c8 36 char s_main_loud = 1 | 0x40;
danielashercohen 0:36eee45709c8 37 char s_softmute = 2 | 0x40;
danielashercohen 0:36eee45709c8 38 char s_volume = 3 | 0x40;
danielashercohen 0:36eee45709c8 39 char s_treble = 4 | 0x40;
danielashercohen 0:36eee45709c8 40 char s_middle = 5 | 0x40;
danielashercohen 0:36eee45709c8 41 char s_bass = 6 | 0x40;
danielashercohen 0:36eee45709c8 42 char s_second_source = 7 | 0x40;
danielashercohen 0:36eee45709c8 43 char s_sub_mid_bass = 8 | 0x40;
danielashercohen 0:36eee45709c8 44 char s_mix_gain = 9 | 0x40;
danielashercohen 0:36eee45709c8 45 char s_atten_lf = 10 | 0x40;
danielashercohen 0:36eee45709c8 46 char s_atten_rf = 11 | 0x40;
danielashercohen 0:36eee45709c8 47 char s_atten_lr = 12 | 0x40;
danielashercohen 0:36eee45709c8 48 char s_atten_rr = 13 | 0x40;
danielashercohen 0:36eee45709c8 49 char s_atten_mix = 14 | 0x40;
danielashercohen 0:36eee45709c8 50 char s_atten_sub = 15 | 0x40;
danielashercohen 0:36eee45709c8 51 char s_spectrum = 16 | 0x40;
danielashercohen 0:36eee45709c8 52 char s_test = 17 | 0x40;
danielashercohen 0:36eee45709c8 53
danielashercohen 0:36eee45709c8 54 #define NUM_OPTIONS 12 // how many different options can be selected by the display?
danielashercohen 0:36eee45709c8 55 char option = NUM_OPTIONS; // selectOption() in setup to
danielashercohen 0:36eee45709c8 56 // set this to 0 and set up display
danielashercohen 0:36eee45709c8 57 char volume = 4;
danielashercohen 0:36eee45709c8 58 char input = 1;
danielashercohen 0:36eee45709c8 59
danielashercohen 0:36eee45709c8 60 char mute = 0;
danielashercohen 0:36eee45709c8 61 char mix = 0;
danielashercohen 0:36eee45709c8 62
danielashercohen 0:36eee45709c8 63 // for register 4 Treble Filter
danielashercohen 0:36eee45709c8 64 int referenceInE = 0;
danielashercohen 0:36eee45709c8 65 int trebleCenterFreq = 0;
danielashercohen 0:36eee45709c8 66 int treble;
danielashercohen 0:36eee45709c8 67
danielashercohen 0:36eee45709c8 68 // for middle frequecy filter
danielashercohen 0:36eee45709c8 69 int middleSoftStep = 0;
danielashercohen 0:36eee45709c8 70 int middleQ = 0;
danielashercohen 0:36eee45709c8 71 int middle = 0;
danielashercohen 0:36eee45709c8 72
danielashercohen 0:36eee45709c8 73 // for bass frequecy filter
danielashercohen 0:36eee45709c8 74 int bassSoftStep = 0;
danielashercohen 0:36eee45709c8 75 int bassQ = 0;
danielashercohen 0:36eee45709c8 76 int bass = 0;
danielashercohen 0:36eee45709c8 77
danielashercohen 0:36eee45709c8 78 // for output attenuators
danielashercohen 0:36eee45709c8 79 char atten_lf = 8;
danielashercohen 0:36eee45709c8 80 char atten_rf = 8;
danielashercohen 0:36eee45709c8 81 char atten_lr = 8;
danielashercohen 0:36eee45709c8 82 char atten_rr = 8;
danielashercohen 0:36eee45709c8 83 char atten_mix = 8;
danielashercohen 0:36eee45709c8 84 char atten_sub = 10;
danielashercohen 0:36eee45709c8 85
danielashercohen 0:36eee45709c8 86 void i2c_write(char device_address, char command, char value) {
danielashercohen 0:36eee45709c8 87 // wait(0.3);
danielashercohen 0:36eee45709c8 88 //display.printf("Transmitted!!");
danielashercohen 0:36eee45709c8 89 //display.update();
danielashercohen 0:36eee45709c8 90 }
danielashercohen 0:36eee45709c8 91
danielashercohen 0:36eee45709c8 92 void writeToTDA7419 (char address, char value) {
danielashercohen 0:36eee45709c8 93 i2c_write(TDA7419_ADDRESS, address, value);
danielashercohen 0:36eee45709c8 94 }
danielashercohen 0:36eee45709c8 95
danielashercohen 0:36eee45709c8 96 /////////////////////////////////
danielashercohen 0:36eee45709c8 97 // set the speaker attenuators //
danielashercohen 0:36eee45709c8 98 /////////////////////////////////
danielashercohen 0:36eee45709c8 99 // attenuation can be set from 0 to 11 and this is mapped to the
danielashercohen 0:36eee45709c8 100 // values that the TDA7419 uses for it's attenuation (0->h60)
danielashercohen 0:36eee45709c8 101
danielashercohen 0:36eee45709c8 102 //
danielashercohen 0:36eee45709c8 103 // (FL/FR/RL/RR/SWL/SWR) (13-18)
danielashercohen 0:36eee45709c8 104 void TDA7419SetAttenuation(int address, int attenuation) {
danielashercohen 0:36eee45709c8 105 char regAtten;
danielashercohen 0:36eee45709c8 106 if (volume == 11) {
danielashercohen 0:36eee45709c8 107 regAtten = 13;
danielashercohen 0:36eee45709c8 108 } else if (attenuation == 10) {
danielashercohen 0:36eee45709c8 109 regAtten = 6;
danielashercohen 0:36eee45709c8 110 } else {
danielashercohen 0:36eee45709c8 111 regAtten = (99-(attenuation*9));
danielashercohen 0:36eee45709c8 112 }
danielashercohen 0:36eee45709c8 113 writeToTDA7419(address, regAtten);
danielashercohen 0:36eee45709c8 114 }
danielashercohen 0:36eee45709c8 115
danielashercohen 0:36eee45709c8 116 // update all of the registers in the TDA7419
danielashercohen 0:36eee45709c8 117 void updateReg() {
danielashercohen 0:36eee45709c8 118 char regVolume;
danielashercohen 0:36eee45709c8 119 char regTreble;
danielashercohen 0:36eee45709c8 120 char regMiddle;
danielashercohen 0:36eee45709c8 121 char regBass;
danielashercohen 0:36eee45709c8 122
danielashercohen 0:36eee45709c8 123 //////////////////////////////////////////////////////////////////
danielashercohen 0:36eee45709c8 124 // Calculate actual register values from the variables that the //
danielashercohen 0:36eee45709c8 125 // buttons control //
danielashercohen 0:36eee45709c8 126 //////////////////////////////////////////////////////////////////
danielashercohen 0:36eee45709c8 127
danielashercohen 0:36eee45709c8 128 // set the master volume //
danielashercohen 0:36eee45709c8 129 // need to calculate the regVolume from the global volume signal
danielashercohen 0:36eee45709c8 130 // volume can be set from 0 to 11 and this is mapped to the
danielashercohen 0:36eee45709c8 131 // values that the TDA7419 uses for it's volume register
danielashercohen 0:36eee45709c8 132 // which are a little odd (11 is appropriate because 0->15 register
danielashercohen 0:36eee45709c8 133 // values actually specify a gain, 16->96 specify attenuation)
danielashercohen 0:36eee45709c8 134 if (volume == 11) {
danielashercohen 0:36eee45709c8 135 regVolume = 13;
danielashercohen 0:36eee45709c8 136 } else if (volume == 10) {
danielashercohen 0:36eee45709c8 137 regVolume = 6;
danielashercohen 0:36eee45709c8 138 } else {
danielashercohen 0:36eee45709c8 139 regVolume = (99-(volume*9));
danielashercohen 0:36eee45709c8 140 }
danielashercohen 0:36eee45709c8 141
danielashercohen 0:36eee45709c8 142 // set the tone controls //
danielashercohen 0:36eee45709c8 143 // Expect treble to have the values -5 to +5 //
danielashercohen 0:36eee45709c8 144 // Expect trebleCenterFreq to be 0 to 3 //
danielashercohen 0:36eee45709c8 145 // Expect referenceInE to be 0 or 1 //
danielashercohen 0:36eee45709c8 146 // we define treble as -5 to +5 the TDA7419 register value is more complex
danielashercohen 0:36eee45709c8 147 if (treble > 0) {
danielashercohen 0:36eee45709c8 148 regTreble = 16 + (treble * 3);
danielashercohen 0:36eee45709c8 149 } else if (treble == 0) {
danielashercohen 0:36eee45709c8 150 regTreble = 0;
danielashercohen 0:36eee45709c8 151 } else if (treble < 0) {
danielashercohen 0:36eee45709c8 152 regTreble = 0 - (treble * 3);
danielashercohen 0:36eee45709c8 153 }
danielashercohen 0:36eee45709c8 154
danielashercohen 0:36eee45709c8 155 if (middle > 0) {
danielashercohen 0:36eee45709c8 156 regMiddle = 16 + (middle * 3);
danielashercohen 0:36eee45709c8 157 } else if (middle == 0) {
danielashercohen 0:36eee45709c8 158 regMiddle = 0;
danielashercohen 0:36eee45709c8 159 } else if (middle < 0) {
danielashercohen 0:36eee45709c8 160 regMiddle = 0 - (middle * 3);
danielashercohen 0:36eee45709c8 161 }
danielashercohen 0:36eee45709c8 162
danielashercohen 0:36eee45709c8 163 if (bass > 0) {
danielashercohen 0:36eee45709c8 164 regBass = 16 + (bass * 3);
danielashercohen 0:36eee45709c8 165 } else if (bass == 0) {
danielashercohen 0:36eee45709c8 166 regBass = 0;
danielashercohen 0:36eee45709c8 167 } else if (bass < 0) {
danielashercohen 0:36eee45709c8 168 regBass = 0 - (bass * 3);
danielashercohen 0:36eee45709c8 169 }
danielashercohen 0:36eee45709c8 170
danielashercohen 0:36eee45709c8 171 //////////////////////////
danielashercohen 0:36eee45709c8 172 // update the registers //
danielashercohen 0:36eee45709c8 173 //////////////////////////
danielashercohen 0:36eee45709c8 174 writeToTDA7419(s_main_source, ((0x78) | (input & 0x3) ));
danielashercohen 0:36eee45709c8 175 writeToTDA7419(s_main_loud, (0xc0));
danielashercohen 0:36eee45709c8 176 writeToTDA7419(s_softmute, (0xa7));
danielashercohen 0:36eee45709c8 177 TDA7419SetAttenuation(s_volume, regVolume );
danielashercohen 0:36eee45709c8 178
danielashercohen 0:36eee45709c8 179 writeToTDA7419(s_treble,
danielashercohen 0:36eee45709c8 180 ( (referenceInE & 0x1 ) << 7 ) |
danielashercohen 0:36eee45709c8 181 ( (trebleCenterFreq & 0x3 ) << 5 ) |
danielashercohen 0:36eee45709c8 182 ( (regTreble & 0x1f ) ) );
danielashercohen 0:36eee45709c8 183
danielashercohen 0:36eee45709c8 184 writeToTDA7419(s_middle,
danielashercohen 0:36eee45709c8 185 ( (middleSoftStep & 0x1 ) << 7 ) |
danielashercohen 0:36eee45709c8 186 ( (middleQ & 0x3 ) << 5 ) |
danielashercohen 0:36eee45709c8 187 ( (regMiddle & 0x1f ) ) );
danielashercohen 0:36eee45709c8 188
danielashercohen 0:36eee45709c8 189 writeToTDA7419(s_bass,
danielashercohen 0:36eee45709c8 190 ( (bassSoftStep & 0x1 ) << 7 ) |
danielashercohen 0:36eee45709c8 191 ( (bassQ & 0x3 ) << 5 ) |
danielashercohen 0:36eee45709c8 192 ( (regBass & 0x1f ) ) );
danielashercohen 0:36eee45709c8 193
danielashercohen 0:36eee45709c8 194 // this register allows the second source to be routed to the rear speakers
danielashercohen 0:36eee45709c8 195 // not useful in the context of this project
danielashercohen 0:36eee45709c8 196 writeToTDA7419(s_second_source, (0x07));
danielashercohen 0:36eee45709c8 197
danielashercohen 0:36eee45709c8 198 // this is the subwoofer cut-off frequency
danielashercohen 0:36eee45709c8 199 // 11 which is 160Khz)
danielashercohen 0:36eee45709c8 200 writeToTDA7419(s_sub_mid_bass, (0x63));
danielashercohen 0:36eee45709c8 201
danielashercohen 0:36eee45709c8 202 // mix to the front speakers, enable the sub, no gain
danielashercohen 0:36eee45709c8 203 if (mix == 1) {
danielashercohen 0:36eee45709c8 204 writeToTDA7419(s_mix_gain, (0xf7));
danielashercohen 0:36eee45709c8 205 } else {
danielashercohen 0:36eee45709c8 206 writeToTDA7419(s_mix_gain, (0xf0));
danielashercohen 0:36eee45709c8 207 }
danielashercohen 0:36eee45709c8 208
danielashercohen 0:36eee45709c8 209 TDA7419SetAttenuation(s_atten_lf, atten_lf );
danielashercohen 0:36eee45709c8 210 TDA7419SetAttenuation(s_atten_rf, atten_rf );
danielashercohen 0:36eee45709c8 211 TDA7419SetAttenuation(s_atten_lr, atten_lr );
danielashercohen 0:36eee45709c8 212 TDA7419SetAttenuation(s_atten_rr, atten_rr );
danielashercohen 0:36eee45709c8 213
danielashercohen 0:36eee45709c8 214 TDA7419SetAttenuation(s_atten_mix, atten_mix );
danielashercohen 0:36eee45709c8 215 TDA7419SetAttenuation(s_atten_sub, atten_sub );
danielashercohen 0:36eee45709c8 216
danielashercohen 0:36eee45709c8 217 writeToTDA7419 (s_spectrum, (0x09));
danielashercohen 0:36eee45709c8 218
danielashercohen 0:36eee45709c8 219 }
danielashercohen 0:36eee45709c8 220
danielashercohen 0:36eee45709c8 221 /////////////////////////////////////////////
danielashercohen 0:36eee45709c8 222 // Helper functions for the serial display //
danielashercohen 0:36eee45709c8 223 /////////////////////////////////////////////
danielashercohen 0:36eee45709c8 224 void processButtonPress (int button) {
danielashercohen 0:36eee45709c8 225
danielashercohen 0:36eee45709c8 226 if (button == 0) {
danielashercohen 0:36eee45709c8 227 if (option < (NUM_OPTIONS-1)) {
danielashercohen 0:36eee45709c8 228 option++;
danielashercohen 0:36eee45709c8 229 } else {
danielashercohen 0:36eee45709c8 230 option = 0;
danielashercohen 0:36eee45709c8 231 }
danielashercohen 0:36eee45709c8 232 }
danielashercohen 0:36eee45709c8 233
danielashercohen 0:36eee45709c8 234 if (button == 1) {
danielashercohen 0:36eee45709c8 235 if (option > 0) {
danielashercohen 0:36eee45709c8 236 option--;
danielashercohen 0:36eee45709c8 237 } else {
danielashercohen 0:36eee45709c8 238 option = (NUM_OPTIONS-1);
danielashercohen 0:36eee45709c8 239 }
danielashercohen 0:36eee45709c8 240 }
danielashercohen 0:36eee45709c8 241
danielashercohen 0:36eee45709c8 242 switch (option) {
danielashercohen 0:36eee45709c8 243 case (0): // if volume option is selected change volume when button 1 and 2 are pressed
danielashercohen 0:36eee45709c8 244 if (button == 2) {
danielashercohen 0:36eee45709c8 245 if (volume > 0 ) {
danielashercohen 0:36eee45709c8 246 volume--;
danielashercohen 0:36eee45709c8 247 }
danielashercohen 0:36eee45709c8 248 }
danielashercohen 0:36eee45709c8 249 if (button == 3) {
danielashercohen 0:36eee45709c8 250 if (volume < 11) {
danielashercohen 0:36eee45709c8 251 volume++;
danielashercohen 0:36eee45709c8 252 }
danielashercohen 0:36eee45709c8 253 }
danielashercohen 0:36eee45709c8 254 displayWrite("Volume", volume );
danielashercohen 0:36eee45709c8 255 break;
danielashercohen 0:36eee45709c8 256 case (1): // manage the input - 1,2,3 are the standard single ended inputs
danielashercohen 0:36eee45709c8 257 if (button == 2) {
danielashercohen 0:36eee45709c8 258 if (input > 1) {
danielashercohen 0:36eee45709c8 259 input--;
danielashercohen 0:36eee45709c8 260 }
danielashercohen 0:36eee45709c8 261 }
danielashercohen 0:36eee45709c8 262 if (button == 3) {
danielashercohen 0:36eee45709c8 263 if (input < 3) {
danielashercohen 0:36eee45709c8 264 input++;
danielashercohen 0:36eee45709c8 265 }
danielashercohen 0:36eee45709c8 266 }
danielashercohen 0:36eee45709c8 267 displayWrite("Input", input );
danielashercohen 0:36eee45709c8 268 break;
danielashercohen 0:36eee45709c8 269 case (2): // manage the treble value
danielashercohen 0:36eee45709c8 270 if (button == 2) {
danielashercohen 0:36eee45709c8 271 if (treble > -5) {
danielashercohen 0:36eee45709c8 272 treble--;
danielashercohen 0:36eee45709c8 273 }
danielashercohen 0:36eee45709c8 274 }
danielashercohen 0:36eee45709c8 275 if (button == 3) {
danielashercohen 0:36eee45709c8 276 if (treble < 5) {
danielashercohen 0:36eee45709c8 277 treble++;
danielashercohen 0:36eee45709c8 278 }
danielashercohen 0:36eee45709c8 279 }
danielashercohen 0:36eee45709c8 280 displayWrite("Treble", treble );
danielashercohen 0:36eee45709c8 281 break;
danielashercohen 0:36eee45709c8 282 case (3): // manage the middle value
danielashercohen 0:36eee45709c8 283 if (button == 2) {
danielashercohen 0:36eee45709c8 284 if (middle > -5) {
danielashercohen 0:36eee45709c8 285 middle--;
danielashercohen 0:36eee45709c8 286 }
danielashercohen 0:36eee45709c8 287 }
danielashercohen 0:36eee45709c8 288 if (button == 3) {
danielashercohen 0:36eee45709c8 289 if (middle < 5) {
danielashercohen 0:36eee45709c8 290 middle++;
danielashercohen 0:36eee45709c8 291 }
danielashercohen 0:36eee45709c8 292 }
danielashercohen 0:36eee45709c8 293 displayWrite("Middle", middle );
danielashercohen 0:36eee45709c8 294 break;
danielashercohen 0:36eee45709c8 295 case (4): // manage the bass value
danielashercohen 0:36eee45709c8 296 if (button == 2) {
danielashercohen 0:36eee45709c8 297 if (bass > -5) {
danielashercohen 0:36eee45709c8 298 bass--;
danielashercohen 0:36eee45709c8 299 }
danielashercohen 0:36eee45709c8 300 }
danielashercohen 0:36eee45709c8 301 if (button == 3) {
danielashercohen 0:36eee45709c8 302 if (bass < 5) {
danielashercohen 0:36eee45709c8 303 bass++;
danielashercohen 0:36eee45709c8 304 }
danielashercohen 0:36eee45709c8 305 }
danielashercohen 0:36eee45709c8 306 displayWrite("Bass", bass );
danielashercohen 0:36eee45709c8 307 break;
danielashercohen 0:36eee45709c8 308
danielashercohen 0:36eee45709c8 309 // Manage the attenuators
danielashercohen 0:36eee45709c8 310 case (5): // manage the atten_lf value
danielashercohen 0:36eee45709c8 311 if (button == 2) {
danielashercohen 0:36eee45709c8 312 if (atten_lf > 0) {
danielashercohen 0:36eee45709c8 313 atten_lf--;
danielashercohen 0:36eee45709c8 314 }
danielashercohen 0:36eee45709c8 315 }
danielashercohen 0:36eee45709c8 316 if (button == 3) {
danielashercohen 0:36eee45709c8 317 if (atten_lf < 11) {
danielashercohen 0:36eee45709c8 318 atten_lf++;
danielashercohen 0:36eee45709c8 319 }
danielashercohen 0:36eee45709c8 320 }
danielashercohen 0:36eee45709c8 321 displayWrite("LF", atten_lf );
danielashercohen 0:36eee45709c8 322 break;
danielashercohen 0:36eee45709c8 323 case (6): // manage the atten_rf value
danielashercohen 0:36eee45709c8 324 if (button == 2) {
danielashercohen 0:36eee45709c8 325 if (atten_rf > 0) {
danielashercohen 0:36eee45709c8 326 atten_rf--;
danielashercohen 0:36eee45709c8 327 }
danielashercohen 0:36eee45709c8 328 }
danielashercohen 0:36eee45709c8 329 if (button == 3) {
danielashercohen 0:36eee45709c8 330 if (atten_rf < 11) {
danielashercohen 0:36eee45709c8 331 atten_rf++;
danielashercohen 0:36eee45709c8 332 }
danielashercohen 0:36eee45709c8 333 }
danielashercohen 0:36eee45709c8 334 displayWrite("RF", atten_rf );
danielashercohen 0:36eee45709c8 335 break;
danielashercohen 0:36eee45709c8 336 case (7): // manage the atten_lr value
danielashercohen 0:36eee45709c8 337 if (button == 2) {
danielashercohen 0:36eee45709c8 338 if (atten_lr > 0) {
danielashercohen 0:36eee45709c8 339 atten_lr--;
danielashercohen 0:36eee45709c8 340 }
danielashercohen 0:36eee45709c8 341 }
danielashercohen 0:36eee45709c8 342 if (button == 3) {
danielashercohen 0:36eee45709c8 343 if (atten_lr < 11) {
danielashercohen 0:36eee45709c8 344 atten_lr++;
danielashercohen 0:36eee45709c8 345 }
danielashercohen 0:36eee45709c8 346 }
danielashercohen 0:36eee45709c8 347 displayWrite("LR", atten_lr );
danielashercohen 0:36eee45709c8 348 break;
danielashercohen 0:36eee45709c8 349 case (8): // manage the atten_rr value
danielashercohen 0:36eee45709c8 350 if (button == 2) {
danielashercohen 0:36eee45709c8 351 if (atten_rr > 0) {
danielashercohen 0:36eee45709c8 352 atten_rr--;
danielashercohen 0:36eee45709c8 353 }
danielashercohen 0:36eee45709c8 354 }
danielashercohen 0:36eee45709c8 355 if (button == 3) {
danielashercohen 0:36eee45709c8 356 if (atten_rr < 11) {
danielashercohen 0:36eee45709c8 357 atten_rr++;
danielashercohen 0:36eee45709c8 358 }
danielashercohen 0:36eee45709c8 359 }
danielashercohen 0:36eee45709c8 360 displayWrite("RR", atten_rr );
danielashercohen 0:36eee45709c8 361 break;
danielashercohen 0:36eee45709c8 362 case (9): // manage the atten_mix value
danielashercohen 0:36eee45709c8 363 if (button == 2) {
danielashercohen 0:36eee45709c8 364 if (atten_mix > 0) {
danielashercohen 0:36eee45709c8 365 atten_mix--;
danielashercohen 0:36eee45709c8 366 }
danielashercohen 0:36eee45709c8 367 }
danielashercohen 0:36eee45709c8 368 if (button == 3) {
danielashercohen 0:36eee45709c8 369 if (atten_mix < 11) {
danielashercohen 0:36eee45709c8 370 atten_mix++;
danielashercohen 0:36eee45709c8 371 }
danielashercohen 0:36eee45709c8 372 }
danielashercohen 0:36eee45709c8 373 displayWrite("Mix", atten_mix );
danielashercohen 0:36eee45709c8 374 break;
danielashercohen 0:36eee45709c8 375 case (10): // manage the atten_sub value
danielashercohen 0:36eee45709c8 376 if (button == 2) {
danielashercohen 0:36eee45709c8 377 if (atten_sub > 0) {
danielashercohen 0:36eee45709c8 378 atten_sub--;
danielashercohen 0:36eee45709c8 379 }
danielashercohen 0:36eee45709c8 380 }
danielashercohen 0:36eee45709c8 381 if (button == 3) {
danielashercohen 0:36eee45709c8 382 if (atten_sub < 11) {
danielashercohen 0:36eee45709c8 383 atten_sub++;
danielashercohen 0:36eee45709c8 384 }
danielashercohen 0:36eee45709c8 385 }
danielashercohen 0:36eee45709c8 386 displayWrite("SUB", atten_sub );
danielashercohen 0:36eee45709c8 387 break;
danielashercohen 0:36eee45709c8 388 case (11): // manage the atten_sub value
danielashercohen 0:36eee45709c8 389 if (button == 2) {
danielashercohen 0:36eee45709c8 390 mix = 0;
danielashercohen 0:36eee45709c8 391 }
danielashercohen 0:36eee45709c8 392 if (button == 3) {
danielashercohen 0:36eee45709c8 393 mix = 1;
danielashercohen 0:36eee45709c8 394 }
danielashercohen 0:36eee45709c8 395 displayWrite("Mix", mix );
danielashercohen 0:36eee45709c8 396 break;
danielashercohen 0:36eee45709c8 397
danielashercohen 0:36eee45709c8 398 }
danielashercohen 0:36eee45709c8 399 updateReg(); // update the TDA7419 registers to reflect any values changed above
danielashercohen 0:36eee45709c8 400 }
danielashercohen 0:36eee45709c8 401
danielashercohen 0:36eee45709c8 402
danielashercohen 0:36eee45709c8 403
danielashercohen 0:36eee45709c8 404
danielashercohen 0:36eee45709c8 405 void UpPressed( void )
danielashercohen 0:36eee45709c8 406 {
danielashercohen 0:36eee45709c8 407 led1 = 1;
danielashercohen 0:36eee45709c8 408 led2 = 0;
danielashercohen 0:36eee45709c8 409 led3 = 0;
danielashercohen 0:36eee45709c8 410 displayWrite("Up", 1);
danielashercohen 0:36eee45709c8 411 processButtonPress(0);
danielashercohen 0:36eee45709c8 412 }
danielashercohen 0:36eee45709c8 413
danielashercohen 0:36eee45709c8 414 void LeftPressed( void )
danielashercohen 0:36eee45709c8 415 {
danielashercohen 0:36eee45709c8 416 led1 = 0;
danielashercohen 0:36eee45709c8 417 led2 = 1;
danielashercohen 0:36eee45709c8 418 led3 = 0;
danielashercohen 0:36eee45709c8 419 displayWrite("Left", 1);
danielashercohen 0:36eee45709c8 420 processButtonPress(2);
danielashercohen 0:36eee45709c8 421
danielashercohen 0:36eee45709c8 422 }
danielashercohen 0:36eee45709c8 423
danielashercohen 0:36eee45709c8 424 void RightPressed( void )
danielashercohen 0:36eee45709c8 425 {
danielashercohen 0:36eee45709c8 426 led1 = 0;
danielashercohen 0:36eee45709c8 427 led2 = 0;
danielashercohen 0:36eee45709c8 428 led3 = 1;
danielashercohen 0:36eee45709c8 429 displayWrite("Right", 1);
danielashercohen 0:36eee45709c8 430 processButtonPress(3);
danielashercohen 0:36eee45709c8 431 }
danielashercohen 0:36eee45709c8 432
danielashercohen 0:36eee45709c8 433 void DownPressed( void )
danielashercohen 0:36eee45709c8 434 {
danielashercohen 0:36eee45709c8 435 led1 = 1;
danielashercohen 0:36eee45709c8 436 led2 = 0;
danielashercohen 0:36eee45709c8 437 led3 = 1;
danielashercohen 0:36eee45709c8 438 displayWrite("Down", 1);
danielashercohen 0:36eee45709c8 439 processButtonPress(1);
danielashercohen 0:36eee45709c8 440 }
danielashercohen 0:36eee45709c8 441
danielashercohen 0:36eee45709c8 442 int main()
danielashercohen 0:36eee45709c8 443 {
danielashercohen 0:36eee45709c8 444
danielashercohen 0:36eee45709c8 445 PinUp .mode( PullUp );
danielashercohen 0:36eee45709c8 446 PinLeft .mode( PullUp );
danielashercohen 0:36eee45709c8 447 PinRight.mode( PullUp );
danielashercohen 0:36eee45709c8 448 PinDown .mode( PullUp );
danielashercohen 0:36eee45709c8 449
danielashercohen 0:36eee45709c8 450 PinUp .attach_asserted( &UpPressed );
danielashercohen 0:36eee45709c8 451 PinLeft .attach_asserted( &LeftPressed );
danielashercohen 0:36eee45709c8 452 PinRight.attach_asserted( &RightPressed );
danielashercohen 0:36eee45709c8 453 PinDown .attach_asserted( &DownPressed );
danielashercohen 0:36eee45709c8 454
danielashercohen 0:36eee45709c8 455
danielashercohen 0:36eee45709c8 456 display.initialise();
danielashercohen 0:36eee45709c8 457 display.clear();
danielashercohen 0:36eee45709c8 458 display.set_contrast(255); // max contrast
danielashercohen 0:36eee45709c8 459 display.update();
danielashercohen 0:36eee45709c8 460 display.set_font(standard_font, 6);
danielashercohen 0:36eee45709c8 461 display.printf("mbed audio!\r\n");
danielashercohen 0:36eee45709c8 462 display.update();
danielashercohen 0:36eee45709c8 463
danielashercohen 0:36eee45709c8 464 // Sampling does not begin until you set a frequency.
danielashercohen 0:36eee45709c8 465 // The default is 20ms. If you want a different frequency
danielashercohen 0:36eee45709c8 466 // then pass the period in microseconds for example, for 10ms :-
danielashercohen 0:36eee45709c8 467 // pin.setSampleFrequency( 10000 );
danielashercohen 0:36eee45709c8 468 //
danielashercohen 0:36eee45709c8 469 PinUp .setSampleFrequency(); // Defaults to 20ms.
danielashercohen 0:36eee45709c8 470 PinLeft .setSampleFrequency(); // Defaults to 20ms.
danielashercohen 0:36eee45709c8 471 PinRight.setSampleFrequency(); // Defaults to 20ms.
danielashercohen 0:36eee45709c8 472 PinDown .setSampleFrequency(); // Defaults to 20ms.
danielashercohen 0:36eee45709c8 473
danielashercohen 0:36eee45709c8 474 while (1) {
danielashercohen 0:36eee45709c8 475 wait(5);
danielashercohen 0:36eee45709c8 476 }
danielashercohen 0:36eee45709c8 477
danielashercohen 0:36eee45709c8 478 }
danielashercohen 0:36eee45709c8 479
danielashercohen 0:36eee45709c8 480
danielashercohen 0:36eee45709c8 481
danielashercohen 0:36eee45709c8 482 // EOF