USes Sdcard reader, uLCD display, Speaker, Keypad, and Potenitometer slider to control volume

Dependencies:   4DGL-uLCD-SE FatFileSystem SDFileSystem mbed wave_player

Fork of MPR121_Demo by jim hamblen

Committer:
ryanmc
Date:
Wed Mar 11 20:13:09 2015 +0000
Revision:
1:4d4dcc154052
Parent:
0:e09703934ff4
lksdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
4180_1 0:e09703934ff4 1 #include <mbed.h>
4180_1 0:e09703934ff4 2 #include <string>
4180_1 0:e09703934ff4 3 #include <list>
4180_1 0:e09703934ff4 4 #include <mpr121.h>
4180_1 0:e09703934ff4 5
ryanmc 1:4d4dcc154052 6 #include "mbed.h"
ryanmc 1:4d4dcc154052 7 #include "SDFileSystem.h"
ryanmc 1:4d4dcc154052 8 #include "wave_player.h"
ryanmc 1:4d4dcc154052 9 #include "uLCD_4DGL.h"
ryanmc 1:4d4dcc154052 10 #include <iostream>
ryanmc 1:4d4dcc154052 11 #include <fstream>
ryanmc 1:4d4dcc154052 12 using namespace std;
ryanmc 1:4d4dcc154052 13
ryanmc 1:4d4dcc154052 14 SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
ryanmc 1:4d4dcc154052 15 AnalogOut DACout(p18);
ryanmc 1:4d4dcc154052 16 wave_player waver(&DACout);
ryanmc 1:4d4dcc154052 17 uLCD_4DGL uLCD(p28, p27, p30); // serial tx, serial rx, reset pin;
ryanmc 1:4d4dcc154052 18 AnalogIn pot(p20); // Potentiometer slider
ryanmc 1:4d4dcc154052 19 Ticker timerz;
ryanmc 1:4d4dcc154052 20 InterruptIn button(p12);
4180_1 0:e09703934ff4 21 DigitalOut led1(LED1);
4180_1 0:e09703934ff4 22 DigitalOut led2(LED2);
4180_1 0:e09703934ff4 23 DigitalOut led3(LED3);
4180_1 0:e09703934ff4 24 DigitalOut led4(LED4);
4180_1 0:e09703934ff4 25
ryanmc 1:4d4dcc154052 26 float ain;
ryanmc 1:4d4dcc154052 27 int kp;
ryanmc 1:4d4dcc154052 28 bool lock = false;
ryanmc 1:4d4dcc154052 29 int vol = 14;
ryanmc 1:4d4dcc154052 30 bool playing = true;
ryanmc 1:4d4dcc154052 31
ryanmc 1:4d4dcc154052 32
4180_1 0:e09703934ff4 33 // Create the interrupt receiver object on pin 26
4180_1 0:e09703934ff4 34 InterruptIn interrupt(p26);
4180_1 0:e09703934ff4 35
ryanmc 1:4d4dcc154052 36 void volumechange() {
ryanmc 1:4d4dcc154052 37 ain = pot.read();
ryanmc 1:4d4dcc154052 38 vol = ((floor(ain*100)) );
ryanmc 1:4d4dcc154052 39 }
ryanmc 1:4d4dcc154052 40
4180_1 0:e09703934ff4 41 // Setup the Serial to the PC for debugging
4180_1 0:e09703934ff4 42 Serial pc(USBTX, USBRX);
4180_1 0:e09703934ff4 43
4180_1 0:e09703934ff4 44 // Setup the i2c bus on pins 28 and 27
4180_1 0:e09703934ff4 45 I2C i2c(p9, p10);
4180_1 0:e09703934ff4 46
4180_1 0:e09703934ff4 47 // Setup the Mpr121:
4180_1 0:e09703934ff4 48 // constructor(i2c object, i2c address of the mpr121)
4180_1 0:e09703934ff4 49 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
4180_1 0:e09703934ff4 50
ryanmc 1:4d4dcc154052 51
ryanmc 1:4d4dcc154052 52
ryanmc 1:4d4dcc154052 53 void call_speaker_code(int key_code) {
ryanmc 1:4d4dcc154052 54 if (key_code != 0) {
ryanmc 1:4d4dcc154052 55 pc.printf("key code: %d\r\n", key_code);
ryanmc 1:4d4dcc154052 56 /////////////////////////////////////
ryanmc 1:4d4dcc154052 57 // Speaker/SD card code goes here...
ryanmc 1:4d4dcc154052 58 // ex. Play song 1
ryanmc 1:4d4dcc154052 59
ryanmc 1:4d4dcc154052 60 }
ryanmc 1:4d4dcc154052 61 }
4180_1 0:e09703934ff4 62 void fallInterrupt() {
4180_1 0:e09703934ff4 63 int key_code=0;
4180_1 0:e09703934ff4 64 int i=0;
4180_1 0:e09703934ff4 65 int value=mpr121.read(0x00);
ryanmc 1:4d4dcc154052 66
ryanmc 1:4d4dcc154052 67 if (lock == false) {
4180_1 0:e09703934ff4 68 value +=mpr121.read(0x01)<<8;
4180_1 0:e09703934ff4 69 // LED demo mod by J. Hamblen
4180_1 0:e09703934ff4 70 //pc.printf("MPR value: %x \r\n", value);
4180_1 0:e09703934ff4 71 i=0;
4180_1 0:e09703934ff4 72 // puts key number out to LEDs for demo
4180_1 0:e09703934ff4 73 for (i=0; i<12; i++) {
4180_1 0:e09703934ff4 74 if (((value>>i)&0x01)==1) key_code=i+1;
4180_1 0:e09703934ff4 75 }
4180_1 0:e09703934ff4 76 led4=key_code & 0x01;
4180_1 0:e09703934ff4 77 led3=(key_code>>1) & 0x01;
4180_1 0:e09703934ff4 78 led2=(key_code>>2) & 0x01;
4180_1 0:e09703934ff4 79 led1=(key_code>>3) & 0x01;
ryanmc 1:4d4dcc154052 80 call_speaker_code(key_code);
ryanmc 1:4d4dcc154052 81 kp = key_code;
ryanmc 1:4d4dcc154052 82 }
4180_1 0:e09703934ff4 83 }
4180_1 0:e09703934ff4 84 int main() {
ryanmc 1:4d4dcc154052 85
4180_1 0:e09703934ff4 86 pc.printf("\nHello from the mbed & mpr121\n\r");
4180_1 0:e09703934ff4 87
4180_1 0:e09703934ff4 88 unsigned char dataArray[2];
4180_1 0:e09703934ff4 89 int key;
4180_1 0:e09703934ff4 90 int count = 0;
4180_1 0:e09703934ff4 91
4180_1 0:e09703934ff4 92 pc.printf("Test 1: read a value: \r\n");
4180_1 0:e09703934ff4 93 dataArray[0] = mpr121.read(AFE_CFG);
4180_1 0:e09703934ff4 94 pc.printf("Read value=%x\r\n\n",dataArray[0]);
4180_1 0:e09703934ff4 95
4180_1 0:e09703934ff4 96 pc.printf("Test 2: read a value: \r\n");
4180_1 0:e09703934ff4 97 dataArray[0] = mpr121.read(0x5d);
4180_1 0:e09703934ff4 98 pc.printf("Read value=%x\r\n\n",dataArray[0]);
4180_1 0:e09703934ff4 99
4180_1 0:e09703934ff4 100 pc.printf("Test 3: write & read a value: \r\n");
4180_1 0:e09703934ff4 101 mpr121.read(ELE0_T);
4180_1 0:e09703934ff4 102 mpr121.write(ELE0_T,0x22);
4180_1 0:e09703934ff4 103 dataArray[0] = mpr121.read(ELE0_T);
4180_1 0:e09703934ff4 104 pc.printf("Read value=%x\r\n\n",dataArray[0]);
4180_1 0:e09703934ff4 105
4180_1 0:e09703934ff4 106 pc.printf("Test 4: Write many values: \r\n");
4180_1 0:e09703934ff4 107 unsigned char data[] = {0x1,0x3,0x5,0x9,0x15,0x25,0x41};
4180_1 0:e09703934ff4 108 mpr121.writeMany(0x42,data,7);
4180_1 0:e09703934ff4 109
4180_1 0:e09703934ff4 110 // Now read them back ..
4180_1 0:e09703934ff4 111 key = 0x42;
4180_1 0:e09703934ff4 112 count = 0;
4180_1 0:e09703934ff4 113 while (count < 7) {
4180_1 0:e09703934ff4 114 char result = mpr121.read(key);
4180_1 0:e09703934ff4 115 key++;
4180_1 0:e09703934ff4 116 count++;
4180_1 0:e09703934ff4 117 pc.printf("Read value: '%x'=%x\n\r",key,result);
4180_1 0:e09703934ff4 118 }
4180_1 0:e09703934ff4 119
4180_1 0:e09703934ff4 120 pc.printf("Test 5: Read Electrodes:\r\n");
4180_1 0:e09703934ff4 121 key = ELE0_T;
4180_1 0:e09703934ff4 122 count = 0;
4180_1 0:e09703934ff4 123 while (count < 24) {
4180_1 0:e09703934ff4 124 char result = mpr121.read(key);
4180_1 0:e09703934ff4 125 pc.printf("Read key:%x value:%x\n\r",key,result);
4180_1 0:e09703934ff4 126 key++;
4180_1 0:e09703934ff4 127 count++;
4180_1 0:e09703934ff4 128 }
4180_1 0:e09703934ff4 129 pc.printf("--------- \r\n\n");
4180_1 0:e09703934ff4 130
4180_1 0:e09703934ff4 131 // mpr121.setProximityMode(true);
4180_1 0:e09703934ff4 132
4180_1 0:e09703934ff4 133 pc.printf("ELE_CFG=%x", mpr121.read(ELE_CFG));
4180_1 0:e09703934ff4 134
4180_1 0:e09703934ff4 135 interrupt.fall(&fallInterrupt);
4180_1 0:e09703934ff4 136 interrupt.mode(PullUp);
ryanmc 1:4d4dcc154052 137
ryanmc 1:4d4dcc154052 138 timerz.attach(&volumechange, .25);
ryanmc 1:4d4dcc154052 139 ////////////////////////////////////
4180_1 0:e09703934ff4 140 while (1) {
ryanmc 1:4d4dcc154052 141
ryanmc 1:4d4dcc154052 142
ryanmc 1:4d4dcc154052 143 if(kp == 1){
ryanmc 1:4d4dcc154052 144 lock = true;
ryanmc 1:4d4dcc154052 145 uLCD.cls();
ryanmc 1:4d4dcc154052 146 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 147 uLCD.printf("Movie Title: \nChristmas Vacation \n");
ryanmc 1:4d4dcc154052 148 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 149 FILE *wave_file;
ryanmc 1:4d4dcc154052 150 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 151 wave_file=fopen("/sd/cv.wav", "r");
ryanmc 1:4d4dcc154052 152 waver.play(wave_file);
ryanmc 1:4d4dcc154052 153 fclose(wave_file);
ryanmc 1:4d4dcc154052 154
ryanmc 1:4d4dcc154052 155
ryanmc 1:4d4dcc154052 156 wait(1);
ryanmc 1:4d4dcc154052 157 kp = 0;
ryanmc 1:4d4dcc154052 158 lock = false;
ryanmc 1:4d4dcc154052 159 }
ryanmc 1:4d4dcc154052 160
ryanmc 1:4d4dcc154052 161 else if(kp == 2){
ryanmc 1:4d4dcc154052 162 lock = true;
ryanmc 1:4d4dcc154052 163 uLCD.cls();
ryanmc 1:4d4dcc154052 164 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 165 uLCD.printf("Music Artist: \n Psy \n\n Song Title: \n Gangnam Style \n");
ryanmc 1:4d4dcc154052 166 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 167 FILE *wave_file;
ryanmc 1:4d4dcc154052 168 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 169 wave_file=fopen("/sd/psy.wav", "r");
ryanmc 1:4d4dcc154052 170 waver.play(wave_file);
ryanmc 1:4d4dcc154052 171 fclose(wave_file);
ryanmc 1:4d4dcc154052 172 wait(1);
ryanmc 1:4d4dcc154052 173 kp = 0;
ryanmc 1:4d4dcc154052 174 lock = false;
ryanmc 1:4d4dcc154052 175 }
ryanmc 1:4d4dcc154052 176
ryanmc 1:4d4dcc154052 177 else if(kp == 3){
ryanmc 1:4d4dcc154052 178 lock = true;
ryanmc 1:4d4dcc154052 179 uLCD.cls();
ryanmc 1:4d4dcc154052 180 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 181 uLCD.printf("Music Artist: \n Led Zeppelin \n \n Song Title: \n Kashmir\n");
ryanmc 1:4d4dcc154052 182 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 183 FILE *wave_file;
ryanmc 1:4d4dcc154052 184 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 185 wave_file=fopen("/sd/led.wav", "r");
ryanmc 1:4d4dcc154052 186 waver.play(wave_file);
ryanmc 1:4d4dcc154052 187 fclose(wave_file);
ryanmc 1:4d4dcc154052 188 wait(1);
ryanmc 1:4d4dcc154052 189 kp = 0;
ryanmc 1:4d4dcc154052 190 lock = false;
ryanmc 1:4d4dcc154052 191 }
ryanmc 1:4d4dcc154052 192
ryanmc 1:4d4dcc154052 193 else if(kp == 4){
ryanmc 1:4d4dcc154052 194 lock = true;
ryanmc 1:4d4dcc154052 195 uLCD.cls();
ryanmc 1:4d4dcc154052 196 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 197 uLCD.printf("Movie Title: \n Forrest Gump \n");
ryanmc 1:4d4dcc154052 198 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 199 FILE *wave_file;
ryanmc 1:4d4dcc154052 200 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 201 wave_file=fopen("/sd/boc.wav", "r");
ryanmc 1:4d4dcc154052 202 waver.play(wave_file);
ryanmc 1:4d4dcc154052 203 fclose(wave_file);
ryanmc 1:4d4dcc154052 204 wait(1);
ryanmc 1:4d4dcc154052 205 kp = 0;
ryanmc 1:4d4dcc154052 206 lock = false;
ryanmc 1:4d4dcc154052 207 }
ryanmc 1:4d4dcc154052 208
ryanmc 1:4d4dcc154052 209 else if(kp == 5){
ryanmc 1:4d4dcc154052 210 lock = true;
ryanmc 1:4d4dcc154052 211 uLCD.cls();
ryanmc 1:4d4dcc154052 212 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 213 uLCD.printf("Movie Title: \n Forrest Gump \n \n");
ryanmc 1:4d4dcc154052 214 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 215 FILE *wave_file;
ryanmc 1:4d4dcc154052 216 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 217 wave_file=fopen("/sd/shrimp.wav", "r");
ryanmc 1:4d4dcc154052 218 waver.play(wave_file);
ryanmc 1:4d4dcc154052 219 fclose(wave_file);
ryanmc 1:4d4dcc154052 220 wait(1);
ryanmc 1:4d4dcc154052 221 kp = 0;
ryanmc 1:4d4dcc154052 222 lock = false;
ryanmc 1:4d4dcc154052 223 }
ryanmc 1:4d4dcc154052 224
ryanmc 1:4d4dcc154052 225 else if(kp == 6){
ryanmc 1:4d4dcc154052 226 lock = true;
ryanmc 1:4d4dcc154052 227 uLCD.cls();
ryanmc 1:4d4dcc154052 228 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 229 uLCD.printf("Movie Title: \n TombStone \n \n I'm Your Huckleberry...");
ryanmc 1:4d4dcc154052 230 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 231 FILE *wave_file;
ryanmc 1:4d4dcc154052 232 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 233 wave_file=fopen("/sd/doc.wav", "r");
ryanmc 1:4d4dcc154052 234 waver.play(wave_file);
ryanmc 1:4d4dcc154052 235 fclose(wave_file);
ryanmc 1:4d4dcc154052 236 wait(1);
ryanmc 1:4d4dcc154052 237 kp = 0;
ryanmc 1:4d4dcc154052 238 lock = false;
ryanmc 1:4d4dcc154052 239 }
ryanmc 1:4d4dcc154052 240
ryanmc 1:4d4dcc154052 241 else if(kp == 7){
ryanmc 1:4d4dcc154052 242 lock = true;
ryanmc 1:4d4dcc154052 243 uLCD.cls();
ryanmc 1:4d4dcc154052 244 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 245 uLCD.printf("Movie Title: \n Rush Hour \n");
ryanmc 1:4d4dcc154052 246 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 247 FILE *wave_file;
ryanmc 1:4d4dcc154052 248 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 249 wave_file=fopen("/sd/rushhour.wav", "r");
ryanmc 1:4d4dcc154052 250 waver.play(wave_file);
ryanmc 1:4d4dcc154052 251 fclose(wave_file);
ryanmc 1:4d4dcc154052 252 wait(1);
ryanmc 1:4d4dcc154052 253 kp = 0;
ryanmc 1:4d4dcc154052 254 lock = false;
ryanmc 1:4d4dcc154052 255 }
ryanmc 1:4d4dcc154052 256
ryanmc 1:4d4dcc154052 257 else if(kp == 8){
ryanmc 1:4d4dcc154052 258 lock = true;
ryanmc 1:4d4dcc154052 259 uLCD.cls();
ryanmc 1:4d4dcc154052 260 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 261 uLCD.printf("Movie Title: \n Meet the Parents \n");
ryanmc 1:4d4dcc154052 262 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 263 FILE *wave_file;
ryanmc 1:4d4dcc154052 264 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 265 wave_file=fopen("/sd/meet.wav", "r");
ryanmc 1:4d4dcc154052 266 waver.play(wave_file);
ryanmc 1:4d4dcc154052 267 fclose(wave_file);
ryanmc 1:4d4dcc154052 268 wait(1);
ryanmc 1:4d4dcc154052 269 kp = 0;
ryanmc 1:4d4dcc154052 270 lock = false;
ryanmc 1:4d4dcc154052 271 }
ryanmc 1:4d4dcc154052 272
ryanmc 1:4d4dcc154052 273 else if(kp == 9){
ryanmc 1:4d4dcc154052 274 lock = true;
ryanmc 1:4d4dcc154052 275 uLCD.cls();
ryanmc 1:4d4dcc154052 276 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 277 uLCD.printf("Music Artist: \n Glen Miller \n \n Song Title: In the Mood \n");
ryanmc 1:4d4dcc154052 278 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 279 FILE *wave_file;
ryanmc 1:4d4dcc154052 280 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 281 wave_file=fopen("/sd/glenmiller.wav", "r");
ryanmc 1:4d4dcc154052 282 waver.play(wave_file);
ryanmc 1:4d4dcc154052 283 fclose(wave_file);
ryanmc 1:4d4dcc154052 284 wait(1);
ryanmc 1:4d4dcc154052 285 kp = 0;
ryanmc 1:4d4dcc154052 286 lock = false;
ryanmc 1:4d4dcc154052 287 }
ryanmc 1:4d4dcc154052 288
ryanmc 1:4d4dcc154052 289 else if(kp == 10){
ryanmc 1:4d4dcc154052 290 lock = true;
ryanmc 1:4d4dcc154052 291 uLCD.cls();
ryanmc 1:4d4dcc154052 292 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 293 uLCD.printf("Music Artist: \n El dudio \n \n Song Title: \n Guitarra de Noche\n");
ryanmc 1:4d4dcc154052 294 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 295 FILE *wave_file;
ryanmc 1:4d4dcc154052 296 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 297 wave_file=fopen("/sd/gut.wav", "r");
ryanmc 1:4d4dcc154052 298 waver.play(wave_file);
ryanmc 1:4d4dcc154052 299 fclose(wave_file);
ryanmc 1:4d4dcc154052 300 wait(1);
ryanmc 1:4d4dcc154052 301 kp = 0;
ryanmc 1:4d4dcc154052 302 lock = false;
ryanmc 1:4d4dcc154052 303 }
ryanmc 1:4d4dcc154052 304
ryanmc 1:4d4dcc154052 305 else if(kp == 11){
ryanmc 1:4d4dcc154052 306 lock = true;
ryanmc 1:4d4dcc154052 307 uLCD.cls();
ryanmc 1:4d4dcc154052 308 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 309 uLCD.printf("Movie Title: \n The Lion King \n");
ryanmc 1:4d4dcc154052 310 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 311 FILE *wave_file;
ryanmc 1:4d4dcc154052 312 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 313 wave_file=fopen("/sd/lionking.wav", "r");
ryanmc 1:4d4dcc154052 314 waver.play(wave_file);
ryanmc 1:4d4dcc154052 315 fclose(wave_file);
ryanmc 1:4d4dcc154052 316 wait(1);
ryanmc 1:4d4dcc154052 317 kp = 0;
ryanmc 1:4d4dcc154052 318 lock = false;
ryanmc 1:4d4dcc154052 319 }
ryanmc 1:4d4dcc154052 320
ryanmc 1:4d4dcc154052 321 else if(kp == 12){
ryanmc 1:4d4dcc154052 322 lock = true;
ryanmc 1:4d4dcc154052 323 uLCD.cls();
ryanmc 1:4d4dcc154052 324 uLCD.locate(0,0);
ryanmc 1:4d4dcc154052 325 uLCD.printf("Movie Title: \n Anchor Man \n");
ryanmc 1:4d4dcc154052 326 // Play MUSIC CHOICE
ryanmc 1:4d4dcc154052 327 FILE *wave_file;
ryanmc 1:4d4dcc154052 328 //printf("\n\n\nHello, wave world!\n");
ryanmc 1:4d4dcc154052 329 wave_file=fopen("/sd/anchor.wav", "r");
ryanmc 1:4d4dcc154052 330 waver.play(wave_file);
ryanmc 1:4d4dcc154052 331 fclose(wave_file);
ryanmc 1:4d4dcc154052 332 wait(1);
ryanmc 1:4d4dcc154052 333 kp = 0;
ryanmc 1:4d4dcc154052 334 lock = false;
ryanmc 1:4d4dcc154052 335 }
ryanmc 1:4d4dcc154052 336
ryanmc 1:4d4dcc154052 337 }//ends while
ryanmc 1:4d4dcc154052 338 }//ends main
4180_1 0:e09703934ff4 339