The final project of Embedde class.
Dependencies: C12832 LM75B ESP-call MMA7660
BUZZER/BUZZER.cpp@1:ed1c6618f739, 2021-06-03 (annotated)
- Committer:
- pkr7098
- Date:
- Thu Jun 03 07:08:47 2021 +0000
- Revision:
- 1:ed1c6618f739
The final project of Embedde class.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pkr7098 | 1:ed1c6618f739 | 1 | #include "BUZZER.h" |
pkr7098 | 1:ed1c6618f739 | 2 | |
pkr7098 | 1:ed1c6618f739 | 3 | PwmOut buzzer(BUZZER_PIN); |
pkr7098 | 1:ed1c6618f739 | 4 | Thread buzzerThread; |
pkr7098 | 1:ed1c6618f739 | 5 | |
pkr7098 | 1:ed1c6618f739 | 6 | Semaphore semaphoreBuzzer(0); |
pkr7098 | 1:ed1c6618f739 | 7 | Semaphore semaphoreBuzzerValues(1); |
pkr7098 | 1:ed1c6618f739 | 8 | |
pkr7098 | 1:ed1c6618f739 | 9 | char buzzerInstruction = 0; |
pkr7098 | 1:ed1c6618f739 | 10 | short buzzerCnt = 0; |
pkr7098 | 1:ed1c6618f739 | 11 | int buzzerDelay = 0; |
pkr7098 | 1:ed1c6618f739 | 12 | int buzzerFreq = BUZZER_BEEP_FREQUENCY; |
pkr7098 | 1:ed1c6618f739 | 13 | |
pkr7098 | 1:ed1c6618f739 | 14 | static void _buzzerThread(void) |
pkr7098 | 1:ed1c6618f739 | 15 | { |
pkr7098 | 1:ed1c6618f739 | 16 | int instruction; |
pkr7098 | 1:ed1c6618f739 | 17 | int delay; |
pkr7098 | 1:ed1c6618f739 | 18 | int cnt; |
pkr7098 | 1:ed1c6618f739 | 19 | int freq; |
pkr7098 | 1:ed1c6618f739 | 20 | while(1) { |
pkr7098 | 1:ed1c6618f739 | 21 | semaphoreBuzzer.acquire(); |
pkr7098 | 1:ed1c6618f739 | 22 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 23 | |
pkr7098 | 1:ed1c6618f739 | 24 | instruction = buzzerInstruction; |
pkr7098 | 1:ed1c6618f739 | 25 | delay = buzzerDelay; |
pkr7098 | 1:ed1c6618f739 | 26 | cnt = buzzerCnt; |
pkr7098 | 1:ed1c6618f739 | 27 | buzzerInstruction = BUZZER_INSTRUCTION_OFF; |
pkr7098 | 1:ed1c6618f739 | 28 | freq = buzzerFreq; |
pkr7098 | 1:ed1c6618f739 | 29 | |
pkr7098 | 1:ed1c6618f739 | 30 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 31 | |
pkr7098 | 1:ed1c6618f739 | 32 | switch(instruction) { |
pkr7098 | 1:ed1c6618f739 | 33 | case BUZZER_INSTRUCTION_INIT: |
pkr7098 | 1:ed1c6618f739 | 34 | buzzer.period(1.0 / BUZZER_BEEP_FREQUENCY); |
pkr7098 | 1:ed1c6618f739 | 35 | case BUZZER_INSTRUCTION_OFF: |
pkr7098 | 1:ed1c6618f739 | 36 | buzzer = 0; |
pkr7098 | 1:ed1c6618f739 | 37 | break; |
pkr7098 | 1:ed1c6618f739 | 38 | |
pkr7098 | 1:ed1c6618f739 | 39 | case BUZZER_INSTRUCTION_ON: |
pkr7098 | 1:ed1c6618f739 | 40 | buzzer.period(1.0 / freq); |
pkr7098 | 1:ed1c6618f739 | 41 | buzzer = 0.5; |
pkr7098 | 1:ed1c6618f739 | 42 | break; |
pkr7098 | 1:ed1c6618f739 | 43 | |
pkr7098 | 1:ed1c6618f739 | 44 | case BUZZER_INSTRUCTION_RINGING: |
pkr7098 | 1:ed1c6618f739 | 45 | buzzer.period(1.0 / freq); |
pkr7098 | 1:ed1c6618f739 | 46 | for(cnt; cnt > 0; cnt--) { |
pkr7098 | 1:ed1c6618f739 | 47 | buzzer = 0.5; |
pkr7098 | 1:ed1c6618f739 | 48 | thread_sleep_for(delay); |
pkr7098 | 1:ed1c6618f739 | 49 | buzzer = 0.0; |
pkr7098 | 1:ed1c6618f739 | 50 | thread_sleep_for(delay); |
pkr7098 | 1:ed1c6618f739 | 51 | } |
pkr7098 | 1:ed1c6618f739 | 52 | break; |
pkr7098 | 1:ed1c6618f739 | 53 | } |
pkr7098 | 1:ed1c6618f739 | 54 | } |
pkr7098 | 1:ed1c6618f739 | 55 | } |
pkr7098 | 1:ed1c6618f739 | 56 | |
pkr7098 | 1:ed1c6618f739 | 57 | void buzzerInit(void) |
pkr7098 | 1:ed1c6618f739 | 58 | { |
pkr7098 | 1:ed1c6618f739 | 59 | printf("Init buzzer\r\n"); |
pkr7098 | 1:ed1c6618f739 | 60 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 61 | buzzerInstruction = BUZZER_INSTRUCTION_INIT; |
pkr7098 | 1:ed1c6618f739 | 62 | buzzerCnt = 0; |
pkr7098 | 1:ed1c6618f739 | 63 | buzzerDelay = 0; |
pkr7098 | 1:ed1c6618f739 | 64 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 65 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 66 | buzzerThread.start(_buzzerThread); |
pkr7098 | 1:ed1c6618f739 | 67 | } |
pkr7098 | 1:ed1c6618f739 | 68 | |
pkr7098 | 1:ed1c6618f739 | 69 | void buzzerOn(int freq) |
pkr7098 | 1:ed1c6618f739 | 70 | { |
pkr7098 | 1:ed1c6618f739 | 71 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 72 | buzzerFreq = freq; |
pkr7098 | 1:ed1c6618f739 | 73 | buzzerInstruction = BUZZER_INSTRUCTION_ON; |
pkr7098 | 1:ed1c6618f739 | 74 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 75 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 76 | } |
pkr7098 | 1:ed1c6618f739 | 77 | |
pkr7098 | 1:ed1c6618f739 | 78 | void buzzerOn(void) |
pkr7098 | 1:ed1c6618f739 | 79 | { |
pkr7098 | 1:ed1c6618f739 | 80 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 81 | buzzerFreq = BUZZER_BEEP_FREQUENCY; |
pkr7098 | 1:ed1c6618f739 | 82 | buzzerInstruction = BUZZER_INSTRUCTION_ON; |
pkr7098 | 1:ed1c6618f739 | 83 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 84 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 85 | } |
pkr7098 | 1:ed1c6618f739 | 86 | |
pkr7098 | 1:ed1c6618f739 | 87 | void buzzerOff(void) |
pkr7098 | 1:ed1c6618f739 | 88 | { |
pkr7098 | 1:ed1c6618f739 | 89 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 90 | buzzerInstruction = BUZZER_INSTRUCTION_OFF; |
pkr7098 | 1:ed1c6618f739 | 91 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 92 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 93 | } |
pkr7098 | 1:ed1c6618f739 | 94 | void buzzerRinging(short cnt, int delay, int freq) |
pkr7098 | 1:ed1c6618f739 | 95 | { |
pkr7098 | 1:ed1c6618f739 | 96 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 97 | buzzerFreq = freq; |
pkr7098 | 1:ed1c6618f739 | 98 | buzzerInstruction = BUZZER_INSTRUCTION_RINGING; |
pkr7098 | 1:ed1c6618f739 | 99 | buzzerCnt = cnt; |
pkr7098 | 1:ed1c6618f739 | 100 | buzzerDelay = delay; |
pkr7098 | 1:ed1c6618f739 | 101 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 102 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 103 | } |
pkr7098 | 1:ed1c6618f739 | 104 | |
pkr7098 | 1:ed1c6618f739 | 105 | void buzzerRinging(short cnt, int delay) |
pkr7098 | 1:ed1c6618f739 | 106 | { |
pkr7098 | 1:ed1c6618f739 | 107 | semaphoreBuzzerValues.acquire(); |
pkr7098 | 1:ed1c6618f739 | 108 | buzzerFreq = BUZZER_BEEP_FREQUENCY; |
pkr7098 | 1:ed1c6618f739 | 109 | buzzerInstruction = BUZZER_INSTRUCTION_RINGING; |
pkr7098 | 1:ed1c6618f739 | 110 | buzzerCnt = cnt; |
pkr7098 | 1:ed1c6618f739 | 111 | buzzerDelay = delay; |
pkr7098 | 1:ed1c6618f739 | 112 | semaphoreBuzzerValues.release(); |
pkr7098 | 1:ed1c6618f739 | 113 | semaphoreBuzzer.release(); |
pkr7098 | 1:ed1c6618f739 | 114 | } |