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 12 04:48:34 2014 +0000
Revision:
1:f5b8687f67b8
Parent:
0:36eee45709c8
Child:
2:2b0cf4d80668
Buttons and Adafruit 128x64 OLED display working

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