Input channele exchange and display the channel on LCD (ACM1602Ni) for ST Nucleo F401RE.
Dependencies: UIT_ACM1602NI UIT_ADDA mbed
main.cpp@0:096d748fede9, 2014-12-26 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Dec 26 00:30:30 2014 +0000
- Revision:
- 0:096d748fede9
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:096d748fede9 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:096d748fede9 | 2 | // 入力の切り替え(ラインとマイク),LCD 表示 ---- 割り込み利用 |
MikamiUitOpen | 0:096d748fede9 | 3 | // Analog Input : A0 |
MikamiUitOpen | 0:096d748fede9 | 4 | // Analog Output: MCP4922 using SPI |
MikamiUitOpen | 0:096d748fede9 | 5 | // 2014/12/26, Copyright (c) 2014 MIKAMI, Naoki |
MikamiUitOpen | 0:096d748fede9 | 6 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:096d748fede9 | 7 | |
MikamiUitOpen | 0:096d748fede9 | 8 | #include "ADC_Interrupt.hpp" // for ADC using interrupt |
MikamiUitOpen | 0:096d748fede9 | 9 | #include "DAC_MCP4922.hpp" // for DAC MCP4922 |
MikamiUitOpen | 0:096d748fede9 | 10 | #include "ACM1602NI.hpp" // for LCD |
MikamiUitOpen | 0:096d748fede9 | 11 | |
MikamiUitOpen | 0:096d748fede9 | 12 | using namespace Mikami; |
MikamiUitOpen | 0:096d748fede9 | 13 | |
MikamiUitOpen | 0:096d748fede9 | 14 | const int FS_ = 10000; // Sampling frequency: 10 kHz |
MikamiUitOpen | 0:096d748fede9 | 15 | ADC_Intr adc_(A0, FS_, A1); // CH1: Line, CH2: Mic |
MikamiUitOpen | 0:096d748fede9 | 16 | DAC_MCP4922 myDac_; // for DA |
MikamiUitOpen | 0:096d748fede9 | 17 | DigitalIn sw_(D2, PullDown); // for SW |
MikamiUitOpen | 0:096d748fede9 | 18 | Acm1602Ni lcd_; // for LCD |
MikamiUitOpen | 0:096d748fede9 | 19 | |
MikamiUitOpen | 0:096d748fede9 | 20 | // Interrupt service routine for ADC |
MikamiUitOpen | 0:096d748fede9 | 21 | void AdcIsr() |
MikamiUitOpen | 0:096d748fede9 | 22 | { |
MikamiUitOpen | 0:096d748fede9 | 23 | float xn = adc_.Read(); // Read from A0 |
MikamiUitOpen | 0:096d748fede9 | 24 | myDac_.Write(xn); // to DAC |
MikamiUitOpen | 0:096d748fede9 | 25 | } |
MikamiUitOpen | 0:096d748fede9 | 26 | |
MikamiUitOpen | 0:096d748fede9 | 27 | int main() |
MikamiUitOpen | 0:096d748fede9 | 28 | { |
MikamiUitOpen | 0:096d748fede9 | 29 | lcd_.Clear(); |
MikamiUitOpen | 0:096d748fede9 | 30 | myDac_.ScfClockTim3(420000); // cutoff frequency: 4.2 kHz |
MikamiUitOpen | 0:096d748fede9 | 31 | adc_.SetIntrVec(AdcIsr); // Assign ISR for ADC interrupt |
MikamiUitOpen | 0:096d748fede9 | 32 | |
MikamiUitOpen | 0:096d748fede9 | 33 | int swBefore = 0; |
MikamiUitOpen | 0:096d748fede9 | 34 | |
MikamiUitOpen | 0:096d748fede9 | 35 | while (true) |
MikamiUitOpen | 0:096d748fede9 | 36 | { |
MikamiUitOpen | 0:096d748fede9 | 37 | int swNow = sw_.read(); |
MikamiUitOpen | 0:096d748fede9 | 38 | if (swNow != swBefore) |
MikamiUitOpen | 0:096d748fede9 | 39 | { |
MikamiUitOpen | 0:096d748fede9 | 40 | if (swNow == 0) adc_.Select1stChannel(); // line input |
MikamiUitOpen | 0:096d748fede9 | 41 | else adc_.Select2ndChannel(); // mic. input |
MikamiUitOpen | 0:096d748fede9 | 42 | swBefore = swNow; |
MikamiUitOpen | 0:096d748fede9 | 43 | } |
MikamiUitOpen | 0:096d748fede9 | 44 | |
MikamiUitOpen | 0:096d748fede9 | 45 | if (swNow == 0) lcd_.WriteStringXY("Input: Line", 0, 0); |
MikamiUitOpen | 0:096d748fede9 | 46 | else lcd_.WriteStringXY("Input: Mic ", 0, 0); |
MikamiUitOpen | 0:096d748fede9 | 47 | wait(0.1f); |
MikamiUitOpen | 0:096d748fede9 | 48 | } |
MikamiUitOpen | 0:096d748fede9 | 49 | } |