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:
Sun Oct 19 04:30:40 2014 +0000
Revision:
2:2b0cf4d80668
Parent:
1:f5b8687f67b8
Child:
3:8d3cc3488cd8
first sound from the TDA4719;

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