We made an instrument using buttons and a temperature/humidity sensor. Currently the sounds are mapped to the harmonic series with sine / saw / square waves mix. The humidity sensor triggers the timbral change.
Dependencies: DHT11 HC_SR04_Ultrasonic_Library mbed
main.cpp
- Committer:
- nonchalamment
- Date:
- 2017-06-28
- Revision:
- 0:257c833fe9de
File content as of revision 0:257c833fe9de:
#include "mbed.h" #include "ultrasonic.h" #include "Dht11.h" #include <stdio.h> Serial pc(USBTX, USBRX); // tx, rx // pull down DigitalIn b1(D9); DigitalIn b2(D8); DigitalIn b3(D7); DigitalIn b4(D6); DigitalIn b5(D5); DigitalIn b6(D4); DigitalIn b7(D3); DigitalIn b8(D2); Dht11 tmpSensor(D0); DigitalIn buttons[8]={b1,b2,b3,b4,b5,b6,b7,b8}; int buttonNames[] = {1,2,3,4,5,6,7,8}; // values for temp/humidity sensor; int tempSamples[5]; int humiSamples[5]; int counter = 0; int tempValue = 0; int minTemp = 0; int humiValue = 0; int minHumi = 0; float findMedian(int x[]) { float temp; int i, j; // the following two loops sort the array x in ascending order for(i=0; i < 4; i++) { for(j=i+1; j<5; j++) { if(x[j] < x[i]) { // swap elements temp = x[i]; x[i] = x[j]; x[j] = temp; } } } return x[2]; } void averageTH(int temperature, int humidity) { if (counter==5){ counter=0; int medTemp = findMedian(tempSamples); int medHumi = findMedian(humiSamples); if (medTemp >= minTemp && medHumi >= minHumi) { tempValue = medTemp; humiValue = medHumi; printf("tmp %d\r\n", tempValue); printf("hum %d\r\n", humiValue); } } else { tempSamples[counter] = temperature; humiSamples[counter] = humidity; counter += 1; //printf("Temperature changed to %dmm\r\n", temperature); } } void waitforbuttons() { for (int i = 0; i < 8; i++) { DigitalIn button = buttons[i]; int name = buttonNames[i]; if (button.read() == 0) { pc.printf("button %d\r\n", name); } } wait(0.1); } int main(){ while(1) { tmpSensor.read(); averageTH(tmpSensor.getFahrenheit(), tmpSensor.getHumidity()); waitforbuttons(); } }