#include boolean Adafruit_CircuitPlayground::begin(uint8_t brightness) { pinMode(CPLAY_REDLED, OUTPUT); pinMode(CPLAY_SLIDESWITCHPIN, INPUT); pinMode(CPLAY_LEFTBUTTON, INPUT); pinMode(CPLAY_RIGHTBUTTON, INPUT); pinMode(CPLAY_BUZZER, OUTPUT); pinMode(CPLAY_CAPSENSE_SHARED, OUTPUT); strip = Adafruit_CPlay_NeoPixel(); strip.updateType(NEO_GRB + NEO_KHZ800); strip.updateLength(10); strip.setPin(CPLAY_NEOPIXELPIN); lis = Adafruit_CPlay_LIS3DH(CPLAY_LIS3DH_CS); mic = Adafruit_CPlay_Mic(); strip.begin(); strip.show(); // Initialize all pixels to 'off' strip.setBrightness(brightness); cap[0] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 0); cap[1] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 1); cap[2] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 2); cap[3] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 3); cap[4] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 6); cap[5] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 9); cap[6] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 10); cap[7] = CPlay_CapacitiveSensor(CPLAY_CAPSENSE_SHARED, 12); if (! lis.begin(0x18)) { // change this to 0x19 for alternative i2c address return false; } return true; } uint16_t Adafruit_CircuitPlayground::readCap(uint8_t p, uint8_t samples) { switch (p) { case 0: return cap[0].capacitiveSensor(samples); case 1: return cap[1].capacitiveSensor(samples); case 2: return cap[2].capacitiveSensor(samples); case 3: return cap[3].capacitiveSensor(samples); case 6: return cap[4].capacitiveSensor(samples); case 9: return cap[5].capacitiveSensor(samples); case 10: return cap[6].capacitiveSensor(samples); case 12: return cap[7].capacitiveSensor(samples); default: return 0; } } // just turn on/off the red #13 LED void Adafruit_CircuitPlayground::redLED(boolean v) { digitalWrite(CPLAY_REDLED, v); } // just read the slide switch boolean Adafruit_CircuitPlayground::slideSwitch(void) { return digitalRead(CPLAY_SLIDESWITCHPIN); } // just read the left button boolean Adafruit_CircuitPlayground::leftButton(void) { return digitalRead(CPLAY_LEFTBUTTON); } // just read the right button boolean Adafruit_CircuitPlayground::rightButton(void) { return digitalRead(CPLAY_RIGHTBUTTON); } void Adafruit_CircuitPlayground::playTone(uint16_t freq, uint16_t time, boolean wait) { tone(CPLAY_BUZZER, freq, time); if (wait) delay(time); } uint16_t Adafruit_CircuitPlayground::lightSensor(void) { return analogRead(CPLAY_LIGHTSENSOR); } uint16_t Adafruit_CircuitPlayground::soundSensor(void) { return analogRead(CPLAY_SOUNDSENSOR); } float Adafruit_CircuitPlayground::motionX(void) { sensors_event_t event; CircuitPlayground.lis.getEvent(&event); return event.acceleration.x; } float Adafruit_CircuitPlayground::motionY(void) { sensors_event_t event; CircuitPlayground.lis.getEvent(&event); return event.acceleration.y; } float Adafruit_CircuitPlayground::motionZ(void) { sensors_event_t event; CircuitPlayground.lis.getEvent(&event); return event.acceleration.z; } float Adafruit_CircuitPlayground::temperature(void) { // Thermistor test float reading; reading = analogRead(CPLAY_THERMISTORPIN); //Serial.print("Thermistor reading: "); Serial.println(reading); // convert the value to resistance reading = ((1023.0 * SERIESRESISTOR) / reading); reading -= SERIESRESISTOR; //Serial.print("Thermistor resistance: "); Serial.println(reading); float steinhart; steinhart = reading / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; // convert to C return steinhart; } // Get the temperature in degrees Fahrenheit float Adafruit_CircuitPlayground::temperatureF(void) { float tempF = CircuitPlayground.temperature() * 1.8 + 32; return tempF; } // Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Adafruit_CircuitPlayground::colorWheel(uint8_t WheelPos) { WheelPos = 255 - WheelPos; if (WheelPos < 85) { return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos < 170) { WheelPos -= 85; return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } void Adafruit_CircuitPlayground::senseColor(uint8_t& red, uint8_t& green, uint8_t& blue) { // Save the current pixel brightness so it can later be restored. Then bump // the brightness to max to make sure the LED is as bright as possible for // the color readings. uint8_t old_brightness = strip.getBrightness(); strip.setBrightness(255); // Set pixel 1 (next to the light sensor) to full red, green, blue // color and grab a light sensor reading. Make sure to wait a bit // after changing pixel colors to let the light sensor change // resistance! setPixelColor(1, 255, 0, 0); // Red delay(LIGHT_SETTLE_MS); uint16_t raw_red = lightSensor(); setPixelColor(1, 0, 255, 0); // Green delay(LIGHT_SETTLE_MS); uint16_t raw_green = lightSensor(); setPixelColor(1, 0, 0, 255); // Blue delay(LIGHT_SETTLE_MS); uint16_t raw_blue = lightSensor(); // Turn off the pixel and restore brightness, we're done with readings. setPixelColor(1, 0); strip.setBrightness(old_brightness); // Now scale down each of the raw readings to be within // 0 to 255. Remember each sensor reading is from the ADC // which has 10 bits of resolution (0 to 1023), so dividing // by 4 will change the range from 0-1023 to 0-255. Also // use the min function to clamp the value to 255 at most (just // to prevent overflow from 255.xx to 0). red = min(255, raw_red/4); green = min(255, raw_green/4); blue = min(255, raw_blue/4); } // instantiate static Adafruit_CircuitPlayground CircuitPlayground;