Filip Stevanovic 2020/0039

Dependencies:   mbed

Committer:
filip_ste
Date:
Sat Nov 13 08:44:54 2021 +0000
Revision:
1:f62564cb5261
Parent:
0:569d2e559397
Child:
2:67f18997ff0d
Filip Stevanovic 2020/0039

Who changed what in which revision?

UserRevisionLine numberNew contents of line
filip_ste 0:569d2e559397 1 /*
filip_ste 0:569d2e559397 2 Zasto ljudi cudno cuju?
filip_ste 0:569d2e559397 3 -Filip Stevanovic
filip_ste 0:569d2e559397 4
filip_ste 0:569d2e559397 5 Da bi smo bili bolji predatori, evolucija je coveku razvila veoma osetljiva cula.
filip_ste 0:569d2e559397 6 Da bi se to ostvarilo, mozak signale sa cula logaritmuje, i tako se promene
filip_ste 0:569d2e559397 7 na veoma malim nivoima jasno uocavaju dok se promene na velikim nivoima skoro uopste
filip_ste 0:569d2e559397 8 ne primecuju.
filip_ste 0:569d2e559397 9
filip_ste 0:569d2e559397 10 Hvala na paznji
filip_ste 0:569d2e559397 11 */
filip_ste 0:569d2e559397 12
filip_ste 0:569d2e559397 13 #include "mbed.h"
filip_ste 0:569d2e559397 14
filip_ste 0:569d2e559397 15 //Constants
filip_ste 0:569d2e559397 16 #define DebouncePeriod 100 //Period that a button needs to stabilise in miliseconds. 100 should be okay
filip_ste 0:569d2e559397 17 #define ArbitraryWaitPeriod 1 //Aritrary pooling waiting periods, its should be the in the scale of tens of miliseconds to max 100
filip_ste 0:569d2e559397 18
filip_ste 0:569d2e559397 19 //Constants for frequency spectrum function
filip_ste 0:569d2e559397 20 const int n = 5000;
filip_ste 0:569d2e559397 21 const int k = -4950;
filip_ste 0:569d2e559397 22
filip_ste 0:569d2e559397 23 //Pins
filip_ste 0:569d2e559397 24 #define A PA_10
filip_ste 0:569d2e559397 25 #define B PA_9
filip_ste 0:569d2e559397 26 #define C PA_8
filip_ste 0:569d2e559397 27 #define D PB_10
filip_ste 0:569d2e559397 28 #define E PB_5
filip_ste 0:569d2e559397 29 #define F PB_4
filip_ste 0:569d2e559397 30 #define G PB_3
filip_ste 0:569d2e559397 31 #define SEL1 PB_6
filip_ste 0:569d2e559397 32 #define SEL2 PC_7
filip_ste 0:569d2e559397 33 #define SW1 PC_9
filip_ste 0:569d2e559397 34 #define POT1 PA_0
filip_ste 0:569d2e559397 35 #define POT2 PA_1
filip_ste 0:569d2e559397 36 #define BUZZ PA_11
filip_ste 0:569d2e559397 37 #define LD2 PB_15
filip_ste 0:569d2e559397 38
filip_ste 0:569d2e559397 39 //Pin/Object declaration
filip_ste 0:569d2e559397 40 PwmOut buzzer (BUZZ);
filip_ste 0:569d2e559397 41 DigitalOut led2 (LD2);
filip_ste 0:569d2e559397 42 InterruptIn sw1 (SW1);
filip_ste 0:569d2e559397 43 AnalogIn pot1 (POT1);
filip_ste 0:569d2e559397 44 AnalogIn pot2 (POT2);
filip_ste 0:569d2e559397 45 BusOut display (A,B,C,D,E,F,G);
filip_ste 0:569d2e559397 46 BusOut select (SEL2,SEL1);
filip_ste 0:569d2e559397 47
filip_ste 0:569d2e559397 48 //Timer declaration
filip_ste 0:569d2e559397 49 Timer t;
filip_ste 0:569d2e559397 50
filip_ste 0:569d2e559397 51 //Global variable for updating the display when SW1 is pressed
filip_ste 0:569d2e559397 52 int value = 0;
filip_ste 0:569d2e559397 53
filip_ste 0:569d2e559397 54 //ISR for Switch1 (Fall)
filip_ste 0:569d2e559397 55 void ISR_sw1(){
filip_ste 0:569d2e559397 56 //If the button recently fell, dont do the ISR again (Debounce)
filip_ste 0:569d2e559397 57 //If it didnt, do it and save the new time when you did it
filip_ste 0:569d2e559397 58 if(t.read_ms()> DebouncePeriod){
filip_ste 0:569d2e559397 59 value = pot1 * 100;
filip_ste 0:569d2e559397 60 led2 = !led2;
filip_ste 0:569d2e559397 61 t.reset();
filip_ste 0:569d2e559397 62 }
filip_ste 0:569d2e559397 63 }
filip_ste 0:569d2e559397 64
filip_ste 1:f62564cb5261 65 ////////////////////////////////////////////////////////
filip_ste 1:f62564cb5261 66 //Made on last test thus minimal commenting
filip_ste 0:569d2e559397 67 //Show digit on display
filip_ste 0:569d2e559397 68 void SegDisp (int num){
filip_ste 0:569d2e559397 69 switch(num){
filip_ste 0:569d2e559397 70 case 0:display = 0b1000000;break;
filip_ste 0:569d2e559397 71 case 1:display = 0b1111001;break;
filip_ste 0:569d2e559397 72 case 2:display = 0b0100100;break;
filip_ste 0:569d2e559397 73 case 3:display = 0b0110000;break;
filip_ste 0:569d2e559397 74 case 4:display = 0b0011001;break;
filip_ste 0:569d2e559397 75 case 5:display = 0b0010010;break;
filip_ste 0:569d2e559397 76 case 6:display = 0b0000010;break;
filip_ste 0:569d2e559397 77 case 7:display = 0b1111000;break;
filip_ste 0:569d2e559397 78 case 8:display = 0b0000000;break;
filip_ste 0:569d2e559397 79 case 9:display = 0b0010000;break;
filip_ste 0:569d2e559397 80 default:display = 0x7f; break;
filip_ste 0:569d2e559397 81
filip_ste 0:569d2e559397 82 }
filip_ste 0:569d2e559397 83 }
filip_ste 0:569d2e559397 84
filip_ste 0:569d2e559397 85 //Convert number to digits and show on display
filip_ste 0:569d2e559397 86 void PrintDisp(int num){
filip_ste 0:569d2e559397 87 int j = num%10,d = num/10;
filip_ste 0:569d2e559397 88 if(d==0)
filip_ste 0:569d2e559397 89 SegDisp(-1);
filip_ste 0:569d2e559397 90 else
filip_ste 0:569d2e559397 91 SegDisp(d);
filip_ste 0:569d2e559397 92 select = 0b01;
filip_ste 0:569d2e559397 93 wait_ms(ArbitraryWaitPeriod);
filip_ste 0:569d2e559397 94 SegDisp(j);
filip_ste 0:569d2e559397 95 select = 0b10;
filip_ste 0:569d2e559397 96 wait_ms(ArbitraryWaitPeriod);
filip_ste 0:569d2e559397 97 }
filip_ste 1:f62564cb5261 98 ////////////////////////////////////////////////////////
filip_ste 0:569d2e559397 99
filip_ste 0:569d2e559397 100 //Main
filip_ste 0:569d2e559397 101 int main(){
filip_ste 0:569d2e559397 102 //Starting timer
filip_ste 0:569d2e559397 103 t.start();
filip_ste 0:569d2e559397 104 //Binding ISR to fall for Switch1
filip_ste 0:569d2e559397 105 sw1.fall(&ISR_sw1);
filip_ste 0:569d2e559397 106
filip_ste 0:569d2e559397 107 //Main Loop
filip_ste 0:569d2e559397 108 while(1){
filip_ste 0:569d2e559397 109 //Pooling Pot1 i Pot2
filip_ste 1:f62564cb5261 110 buzzer=pot1*0.5f; //Arbitrary division by 2 as it is apsolutely same if duty is .25 or .75
filip_ste 0:569d2e559397 111 buzzer.period_us(k*pot2+n); //Linearise frequency from 20Hz to 20kHz
filip_ste 0:569d2e559397 112
filip_ste 0:569d2e559397 113 //Print Pot1 to Display
filip_ste 0:569d2e559397 114 PrintDisp(value); //It never gets to 1 so it wont get to 100 thus its limited to 99
filip_ste 0:569d2e559397 115
filip_ste 0:569d2e559397 116 //Pooling time is integrated in PrintDisp function
filip_ste 0:569d2e559397 117 }
filip_ste 0:569d2e559397 118 }
filip_ste 0:569d2e559397 119