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();
}
}