Input channele exchange and display the channel on LCD (ACM1602Ni) for ST Nucleo F401RE.

Dependencies:   UIT_ACM1602NI UIT_ADDA mbed

Committer:
MikamiUitOpen
Date:
Fri Dec 26 00:30:30 2014 +0000
Revision:
0:096d748fede9
1

Who changed what in which revision?

UserRevisionLine numberNew 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 }