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

Committer:
nonchalamment
Date:
Wed Jun 28 22:26:55 2017 +0000
Revision:
0:257c833fe9de
We made an instrument activated by buttons and a humidity sensor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nonchalamment 0:257c833fe9de 1 #include "mbed.h"
nonchalamment 0:257c833fe9de 2 #include "ultrasonic.h"
nonchalamment 0:257c833fe9de 3 #include "Dht11.h"
nonchalamment 0:257c833fe9de 4 #include <stdio.h>
nonchalamment 0:257c833fe9de 5 Serial pc(USBTX, USBRX); // tx, rx
nonchalamment 0:257c833fe9de 6
nonchalamment 0:257c833fe9de 7 // pull down
nonchalamment 0:257c833fe9de 8 DigitalIn b1(D9);
nonchalamment 0:257c833fe9de 9 DigitalIn b2(D8);
nonchalamment 0:257c833fe9de 10 DigitalIn b3(D7);
nonchalamment 0:257c833fe9de 11 DigitalIn b4(D6);
nonchalamment 0:257c833fe9de 12 DigitalIn b5(D5);
nonchalamment 0:257c833fe9de 13 DigitalIn b6(D4);
nonchalamment 0:257c833fe9de 14 DigitalIn b7(D3);
nonchalamment 0:257c833fe9de 15 DigitalIn b8(D2);
nonchalamment 0:257c833fe9de 16
nonchalamment 0:257c833fe9de 17 Dht11 tmpSensor(D0);
nonchalamment 0:257c833fe9de 18
nonchalamment 0:257c833fe9de 19 DigitalIn buttons[8]={b1,b2,b3,b4,b5,b6,b7,b8};
nonchalamment 0:257c833fe9de 20 int buttonNames[] = {1,2,3,4,5,6,7,8};
nonchalamment 0:257c833fe9de 21
nonchalamment 0:257c833fe9de 22
nonchalamment 0:257c833fe9de 23 // values for temp/humidity sensor;
nonchalamment 0:257c833fe9de 24 int tempSamples[5];
nonchalamment 0:257c833fe9de 25 int humiSamples[5];
nonchalamment 0:257c833fe9de 26 int counter = 0;
nonchalamment 0:257c833fe9de 27
nonchalamment 0:257c833fe9de 28 int tempValue = 0;
nonchalamment 0:257c833fe9de 29 int minTemp = 0;
nonchalamment 0:257c833fe9de 30
nonchalamment 0:257c833fe9de 31 int humiValue = 0;
nonchalamment 0:257c833fe9de 32 int minHumi = 0;
nonchalamment 0:257c833fe9de 33
nonchalamment 0:257c833fe9de 34 float findMedian(int x[]) {
nonchalamment 0:257c833fe9de 35 float temp;
nonchalamment 0:257c833fe9de 36 int i, j;
nonchalamment 0:257c833fe9de 37 // the following two loops sort the array x in ascending order
nonchalamment 0:257c833fe9de 38 for(i=0; i < 4; i++) {
nonchalamment 0:257c833fe9de 39 for(j=i+1; j<5; j++) {
nonchalamment 0:257c833fe9de 40 if(x[j] < x[i]) {
nonchalamment 0:257c833fe9de 41 // swap elements
nonchalamment 0:257c833fe9de 42 temp = x[i];
nonchalamment 0:257c833fe9de 43 x[i] = x[j];
nonchalamment 0:257c833fe9de 44 x[j] = temp;
nonchalamment 0:257c833fe9de 45 }
nonchalamment 0:257c833fe9de 46 }
nonchalamment 0:257c833fe9de 47 }
nonchalamment 0:257c833fe9de 48 return x[2];
nonchalamment 0:257c833fe9de 49 }
nonchalamment 0:257c833fe9de 50
nonchalamment 0:257c833fe9de 51
nonchalamment 0:257c833fe9de 52
nonchalamment 0:257c833fe9de 53 void averageTH(int temperature, int humidity) {
nonchalamment 0:257c833fe9de 54 if (counter==5){
nonchalamment 0:257c833fe9de 55 counter=0;
nonchalamment 0:257c833fe9de 56 int medTemp = findMedian(tempSamples);
nonchalamment 0:257c833fe9de 57 int medHumi = findMedian(humiSamples);
nonchalamment 0:257c833fe9de 58 if (medTemp >= minTemp && medHumi >= minHumi) {
nonchalamment 0:257c833fe9de 59 tempValue = medTemp;
nonchalamment 0:257c833fe9de 60 humiValue = medHumi;
nonchalamment 0:257c833fe9de 61 printf("tmp %d\r\n", tempValue);
nonchalamment 0:257c833fe9de 62 printf("hum %d\r\n", humiValue);
nonchalamment 0:257c833fe9de 63 }
nonchalamment 0:257c833fe9de 64
nonchalamment 0:257c833fe9de 65 } else {
nonchalamment 0:257c833fe9de 66 tempSamples[counter] = temperature;
nonchalamment 0:257c833fe9de 67 humiSamples[counter] = humidity;
nonchalamment 0:257c833fe9de 68 counter += 1;
nonchalamment 0:257c833fe9de 69 //printf("Temperature changed to %dmm\r\n", temperature);
nonchalamment 0:257c833fe9de 70 }
nonchalamment 0:257c833fe9de 71
nonchalamment 0:257c833fe9de 72
nonchalamment 0:257c833fe9de 73
nonchalamment 0:257c833fe9de 74 }
nonchalamment 0:257c833fe9de 75
nonchalamment 0:257c833fe9de 76 void waitforbuttons() {
nonchalamment 0:257c833fe9de 77 for (int i = 0; i < 8; i++) {
nonchalamment 0:257c833fe9de 78 DigitalIn button = buttons[i];
nonchalamment 0:257c833fe9de 79 int name = buttonNames[i];
nonchalamment 0:257c833fe9de 80 if (button.read() == 0) {
nonchalamment 0:257c833fe9de 81 pc.printf("button %d\r\n", name);
nonchalamment 0:257c833fe9de 82 }
nonchalamment 0:257c833fe9de 83 }
nonchalamment 0:257c833fe9de 84 wait(0.1);
nonchalamment 0:257c833fe9de 85 }
nonchalamment 0:257c833fe9de 86
nonchalamment 0:257c833fe9de 87
nonchalamment 0:257c833fe9de 88
nonchalamment 0:257c833fe9de 89 int main(){
nonchalamment 0:257c833fe9de 90
nonchalamment 0:257c833fe9de 91
nonchalamment 0:257c833fe9de 92
nonchalamment 0:257c833fe9de 93 while(1)
nonchalamment 0:257c833fe9de 94 {
nonchalamment 0:257c833fe9de 95 tmpSensor.read();
nonchalamment 0:257c833fe9de 96 averageTH(tmpSensor.getFahrenheit(), tmpSensor.getHumidity());
nonchalamment 0:257c833fe9de 97 waitforbuttons();
nonchalamment 0:257c833fe9de 98 }
nonchalamment 0:257c833fe9de 99 }