Basic DRV2605 driver demo

Dependencies:   DRV2605 MPR121 mbed

Committer:
electromotivated
Date:
Wed Oct 21 01:09:14 2015 +0000
Revision:
0:4f0a06335fbe
v1 upload;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
electromotivated 0:4f0a06335fbe 1 /*
electromotivated 0:4f0a06335fbe 2 Bryce Williams
electromotivated 0:4f0a06335fbe 3 10/19/2015
electromotivated 0:4f0a06335fbe 4
electromotivated 0:4f0a06335fbe 5 Basic Demo of the TI DRV2605L Haptics Driver Breakout.
electromotivated 0:4f0a06335fbe 6 This code uses the MPR121 Library and modified version
electromotivated 0:4f0a06335fbe 7 of Dr. Jim Hamblen's Hello World Example for the MPR121
electromotivated 0:4f0a06335fbe 8 for Capacitive Touch Keypad for user input.
electromotivated 0:4f0a06335fbe 9
electromotivated 0:4f0a06335fbe 10 The user and touch keys 3,7,11,2,6,10, 1,5,9,and 0.
electromotivated 0:4f0a06335fbe 11 Each Key will toggle through about 10 effects each,
electromotivated 0:4f0a06335fbe 12 (key 11 toggles between 12 or 13 of the effects).
electromotivated 0:4f0a06335fbe 13 Effects are the ROM Library Haptics effects internal to
electromotivated 0:4f0a06335fbe 14 the DRV2605L Haptics Driver.
electromotivated 0:4f0a06335fbe 15 */
electromotivated 0:4f0a06335fbe 16
electromotivated 0:4f0a06335fbe 17 #include "mbed.h"
electromotivated 0:4f0a06335fbe 18 #include "DRV2605.h"
electromotivated 0:4f0a06335fbe 19 #include "mpr121.h"
electromotivated 0:4f0a06335fbe 20
electromotivated 0:4f0a06335fbe 21 DRV2605 haptics(p9, p10);
electromotivated 0:4f0a06335fbe 22 DigitalOut led1(LED1);
electromotivated 0:4f0a06335fbe 23 DigitalOut led2(LED2);
electromotivated 0:4f0a06335fbe 24 DigitalOut led3(LED3);
electromotivated 0:4f0a06335fbe 25 DigitalOut led4(LED4);
electromotivated 0:4f0a06335fbe 26 // Setup the i2c bus on pins 28 and 27
electromotivated 0:4f0a06335fbe 27 I2C i2c(p28, p27);
electromotivated 0:4f0a06335fbe 28 // Create the interrupt receiver object on pin 26
electromotivated 0:4f0a06335fbe 29 InterruptIn interrupt(p26);
electromotivated 0:4f0a06335fbe 30
electromotivated 0:4f0a06335fbe 31 // Setup the Mpr121 Cap Touch Driver:
electromotivated 0:4f0a06335fbe 32 // constructor(i2c object, i2c address of the mpr121)
electromotivated 0:4f0a06335fbe 33 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
electromotivated 0:4f0a06335fbe 34
electromotivated 0:4f0a06335fbe 35 void fallInterrupt() {
electromotivated 0:4f0a06335fbe 36 int key_code=0;
electromotivated 0:4f0a06335fbe 37 int i=0;
electromotivated 0:4f0a06335fbe 38 int value=mpr121.read(0x00);
electromotivated 0:4f0a06335fbe 39 value +=mpr121.read(0x01)<<8;
electromotivated 0:4f0a06335fbe 40 // LED demo mod by J. Hamblen
electromotivated 0:4f0a06335fbe 41 printf("MPR value: %x \r\n", value);
electromotivated 0:4f0a06335fbe 42 i=0;
electromotivated 0:4f0a06335fbe 43 // puts key number out to LEDs for demo
electromotivated 0:4f0a06335fbe 44 for (i=0; i<12; i++) {
electromotivated 0:4f0a06335fbe 45 if (((value>>i)&0x01)==1) key_code=i+1;
electromotivated 0:4f0a06335fbe 46 }
electromotivated 0:4f0a06335fbe 47 led4=key_code & 0x01;
electromotivated 0:4f0a06335fbe 48 led3=(key_code>>1) & 0x01;
electromotivated 0:4f0a06335fbe 49 led2=(key_code>>2) & 0x01;
electromotivated 0:4f0a06335fbe 50 led1=(key_code>>3) & 0x01;
electromotivated 0:4f0a06335fbe 51
electromotivated 0:4f0a06335fbe 52 // Evaluate Keypad from Left-to-Right Top-to-Bottom like reading
electromotivated 0:4f0a06335fbe 53 // Each Key sequences through decimal indexes ending with
electromotivated 0:4f0a06335fbe 54 // corresponding positions... i.e.
electromotivated 0:4f0a06335fbe 55 // Key 3 (value = 800) sequences 3, 13, 23, ... 123
electromotivated 0:4f0a06335fbe 56 // Key 5 (value = 40) sequences 5, 15, 25,... 115
electromotivated 0:4f0a06335fbe 57 // Key 11(value = 10) and 12 (value = 100) are free for custom
electromotivated 0:4f0a06335fbe 58 // implementation
electromotivated 0:4f0a06335fbe 59 switch(value){
electromotivated 0:4f0a06335fbe 60 static int e1 = 1, e2 = 2, e3 = 3, e4 = 4, e5 = 5, e6 = 6,
electromotivated 0:4f0a06335fbe 61 e7 = 7, e8 = 8, e9 = 9, e10 = 10;
electromotivated 0:4f0a06335fbe 62 case 0x8:
electromotivated 0:4f0a06335fbe 63 printf("Playing %i\n", e1);
electromotivated 0:4f0a06335fbe 64 haptics.play_waveform(e1);
electromotivated 0:4f0a06335fbe 65 e1+=10;
electromotivated 0:4f0a06335fbe 66 if(e1 > 121) e1 = 1;
electromotivated 0:4f0a06335fbe 67 break;
electromotivated 0:4f0a06335fbe 68 case 0x80:
electromotivated 0:4f0a06335fbe 69 printf("Playing %i\n", e2);
electromotivated 0:4f0a06335fbe 70 haptics.play_waveform(e2);
electromotivated 0:4f0a06335fbe 71 e2+=10;
electromotivated 0:4f0a06335fbe 72 if(e2 > 122) e2 = 2;
electromotivated 0:4f0a06335fbe 73 break;
electromotivated 0:4f0a06335fbe 74 case 0x800:
electromotivated 0:4f0a06335fbe 75 printf("Playing %i\n", e3);
electromotivated 0:4f0a06335fbe 76 haptics.play_waveform(e3);
electromotivated 0:4f0a06335fbe 77 e3+=10;
electromotivated 0:4f0a06335fbe 78 if(e3 > 123) e3 = 3;
electromotivated 0:4f0a06335fbe 79 break;
electromotivated 0:4f0a06335fbe 80 case 0x4:
electromotivated 0:4f0a06335fbe 81 printf("Playing %i\n", e4);
electromotivated 0:4f0a06335fbe 82 haptics.play_waveform(e4);
electromotivated 0:4f0a06335fbe 83 e4+=10;
electromotivated 0:4f0a06335fbe 84 if(e4 > 114) e4 = 4;
electromotivated 0:4f0a06335fbe 85 break;
electromotivated 0:4f0a06335fbe 86 case 0x40:
electromotivated 0:4f0a06335fbe 87 printf("Playing %i\n", e5);
electromotivated 0:4f0a06335fbe 88 haptics.play_waveform(e5);
electromotivated 0:4f0a06335fbe 89 e5+=10;
electromotivated 0:4f0a06335fbe 90 if(e5 > 115) e5 = 5;
electromotivated 0:4f0a06335fbe 91 break;
electromotivated 0:4f0a06335fbe 92 case 0x400:
electromotivated 0:4f0a06335fbe 93 printf("Playing %i\n", e6);
electromotivated 0:4f0a06335fbe 94 haptics.play_waveform(e6);
electromotivated 0:4f0a06335fbe 95 e6+=10;
electromotivated 0:4f0a06335fbe 96 if(e6 > 116) e6 = 6;
electromotivated 0:4f0a06335fbe 97 break;
electromotivated 0:4f0a06335fbe 98 case 0x2:
electromotivated 0:4f0a06335fbe 99 printf("Playing %i\n", e7);
electromotivated 0:4f0a06335fbe 100 haptics.play_waveform(e7);
electromotivated 0:4f0a06335fbe 101 e7+=10;
electromotivated 0:4f0a06335fbe 102 if(e7 > 117) e7 = 7;
electromotivated 0:4f0a06335fbe 103 break;
electromotivated 0:4f0a06335fbe 104 case 0x20:
electromotivated 0:4f0a06335fbe 105 printf("Playing %i\n", e8);
electromotivated 0:4f0a06335fbe 106 haptics.play_waveform(e8);
electromotivated 0:4f0a06335fbe 107 e8+=10;
electromotivated 0:4f0a06335fbe 108 if(e8 > 118) e8 = 8;
electromotivated 0:4f0a06335fbe 109 break;
electromotivated 0:4f0a06335fbe 110 case 0x200:
electromotivated 0:4f0a06335fbe 111 printf("Playing %i\n", e9);
electromotivated 0:4f0a06335fbe 112 haptics.play_waveform(e9);
electromotivated 0:4f0a06335fbe 113 e9+=10;
electromotivated 0:4f0a06335fbe 114 if(e9 > 119) e9 = 9;
electromotivated 0:4f0a06335fbe 115 break;
electromotivated 0:4f0a06335fbe 116 case 0x1:
electromotivated 0:4f0a06335fbe 117 printf("Playing %i\n", e10);
electromotivated 0:4f0a06335fbe 118 haptics.play_waveform(e10);
electromotivated 0:4f0a06335fbe 119 e10+=10;
electromotivated 0:4f0a06335fbe 120 if(e10 > 120) e10 = 10;
electromotivated 0:4f0a06335fbe 121 break;
electromotivated 0:4f0a06335fbe 122 case 0x10:
electromotivated 0:4f0a06335fbe 123 break;
electromotivated 0:4f0a06335fbe 124 case 0x100:
electromotivated 0:4f0a06335fbe 125 break;
electromotivated 0:4f0a06335fbe 126 }
electromotivated 0:4f0a06335fbe 127 }
electromotivated 0:4f0a06335fbe 128
electromotivated 0:4f0a06335fbe 129 int main() {
electromotivated 0:4f0a06335fbe 130 // Set up Interrupts for MPR121 Cap Touch Driver/ Keypad
electromotivated 0:4f0a06335fbe 131 interrupt.fall(&fallInterrupt);
electromotivated 0:4f0a06335fbe 132 interrupt.mode(PullUp);
electromotivated 0:4f0a06335fbe 133
electromotivated 0:4f0a06335fbe 134 // Daignostics Routine
electromotivated 0:4f0a06335fbe 135 printf("Diagnostics Result: %X\n", haptics.diagnostics());
electromotivated 0:4f0a06335fbe 136
electromotivated 0:4f0a06335fbe 137 // Initialization Procedure as outlined in Section 9.3 of Device Datasheet
electromotivated 0:4f0a06335fbe 138 printf("Calibration Result: %X\n",haptics.init(3.3));
electromotivated 0:4f0a06335fbe 139
electromotivated 0:4f0a06335fbe 140 // Daignostics Routine
electromotivated 0:4f0a06335fbe 141 printf("Diagnostics Result: %X\n", haptics.diagnostics());
electromotivated 0:4f0a06335fbe 142
electromotivated 0:4f0a06335fbe 143 // Play sequence of library waveforms as outlined in Section 9.3.2.1 of Device Datasheet
electromotivated 0:4f0a06335fbe 144 haptics.load_waveform_sequence(123,21,43,18,94,48,112,36);
electromotivated 0:4f0a06335fbe 145 haptics.play();
electromotivated 0:4f0a06335fbe 146 while(haptics.i2cReadByte(GO)); // Wait for playback to complete
electromotivated 0:4f0a06335fbe 147
electromotivated 0:4f0a06335fbe 148 wait(2);
electromotivated 0:4f0a06335fbe 149
electromotivated 0:4f0a06335fbe 150 haptics.load_waveform_sequence(55,65);
electromotivated 0:4f0a06335fbe 151 haptics.play();
electromotivated 0:4f0a06335fbe 152 while(haptics.i2cReadByte(GO)); // Wait for playback to complete
electromotivated 0:4f0a06335fbe 153
electromotivated 0:4f0a06335fbe 154 wait(2);
electromotivated 0:4f0a06335fbe 155
electromotivated 0:4f0a06335fbe 156 // Play a waveform corresponding to touch-keypad press
electromotivated 0:4f0a06335fbe 157 while(1);
electromotivated 0:4f0a06335fbe 158 }