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@0:257c833fe9de, 2017-06-28 (annotated)
- 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?
User | Revision | Line number | New 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 | } |