/* Analog signal chain on Educational BoosterPack MK II http://boosterpackdepot.info/wiki/index.php?title=Educational_BoosterPack_MK_II The sketch demonstrates a complete analog signal chain getting input from the 3-axis accelerometer and using that to mix the color for the RGB LED. Sketch was originally written for Educational BoosterPack and for the "Getting Started with LaunchPad" book. Updated to use 12-bit ADC LaunchPad and with new pin-out of the Educational BoosterPack MK II The circuit utilizes the LEDs on the Educational BoosterPack MK II: * RED LED attached from digital pin 39 to ground. * GREEN LED attached from digital pin 38 to ground. * BLUE LED attached from digital pin 37 to ground. Analog accelerometer channels: * analog 25: z-axis * analog 24: y-axis * analog 23: x-axis Absolute rating/conversion can be determined from the ADXL3xx datasheet. As a quick reference, for LaunchPads with 12-bit ADC (MSP430F5529, Tiva C, etc.), the entire analog range is [0,4096]. For simple tilting calculation [-1g,1g] ~ = [mid-800, mid + 800] = [2048-800,2048+800] = [1248,2848] Created Dec 2012 Modified Dec 2013 by Dung Dang */ const int xpin = 23; // x-axis of the accelerometer const int ypin = 24; // y-axis const int zpin = 25; // z-axis (only on 3-axis models) const int redLED= 39; // assign red LED to Pin #9 const int greenLED= 38;// assign green LED to Pin #10 const int blueLED= 37; // assign blueLED to Pin #12 void setup() { // By default MSP432 has analogRead() set to 10 bits. // This Sketch assumes 12 bits. Uncomment to line below to set analogRead() // to 12 bit resolution for MSP432. //analogReadResolution(12); Serial.begin(9600); // initialize for sending diagnostic info to computer } void loop() { int analogValue;// CHECK X AXIS (red) analogValue = analogRead(xpin); // read X axis Serial.print("RED (X): "); // print to serial monitor Serial.print(analogValue); Serial.print("\t"); if(analogValue >2048){ // check if tilting on x axis in positive direction analogValue = map(analogValue, 2048, 2850, 0, 150); // map to RGB range analogWrite(redLED, analogValue); // output color } else if(analogValue<2048){ // check if tilting on x axis in negative direction analogValue = map(analogValue, 1250, 2048, 150, 0); // map to RGB range analogWrite(redLED, analogValue); // output color } else{ analogWrite(redLED, 0); // analogValue is b/w 450 & 490, X axis is ~flat } // CHECK Y AXIS (green) analogValue = analogRead(ypin); // read Y axis Serial.print("GREEN (Y): "); // print to serial monitor Serial.print(analogValue); Serial.print("\t"); if(analogValue >2048){ // check if tilting on Y axis in positive direction analogValue = map(analogValue, 2048, 2850, 0, 150); // map to RGB range analogWrite(greenLED, analogValue); // output color } else if(analogValue<2048){ // check if tilting on Y axis in negative direction analogValue = map(analogValue, 1250, 2048, 150, 0); // map to RGB range analogWrite(greenLED, analogValue); // output color } else{ analogWrite(greenLED, 0);// analogValue is b/w 450 & 490, Y axis is ~flat } // CHECK Z AXIS (blue) analogValue = analogRead(zpin); // read Z axis Serial.print("BLUE (Z): "); // print to serial monitor Serial.print(analogValue); Serial.print("\t"); if(analogValue >2048){ // check if tilting on Z axis in positive direction analogValue = map(analogValue, 2048, 2850, 0, 150); // map to RGB range analogWrite(blueLED, analogValue); // output color } else if(analogValue<2048){ // check if tilting on Z axis in negative direction analogValue = map(analogValue, 1250, 2048, 150, 0); // map to RGB range analogWrite(blueLED, analogValue); // output color } else{ analogWrite(blueLED, 0); // analogValue is b/w 450 & 490, Z axis is ~flat } }