//********************************************************************** /*    『遠隔操作(携帯電話使用)V2』 */ //********************************************************************** #define PHONE PORTB.B4 #define PHONE_ON 1 #define PHONE_OFF 0 #define BYTE unsigned char #define WORD unsigned int #define DELAY 100 #define SW1 PORTA.B1 #define SW2 PORTA.B0 #define SW3 PORTA.B7 #define SW_ON 0 #define SW_OFF 1 #define LED4 PORTA.B3 #define LED1 PORTA.B6 #define LED2 PORTB.B7 #define LED3 PORTB.B6 #define LED_ON 1 #define LED_OFF 0 #define DTMF_STD PORTA.B5 //********************************************************************** void do_mi_so_do() { Sound_Play(523, 250); //ド(ピン) Sound_Play(659, 250); //ミ(ポン) Sound_Play(784, 250); //ソ(パン) Sound_Play(1047, 500); //ド(ポーン) } //********************************************************************** void do_so_mi_do() { Sound_Play(1047, 250); //ド(ピン) Sound_Play(784, 250); //ソ(ポン) Sound_Play(659, 250); //ミ(パン) Sound_Play(523, 500); //ド(ポーン) } //********************************************************************** const char table[][8] = { "A.-", "B-...", "C-.-.", "D-..", "E.", "F..-.", "G--.", "H....", "I..", "J.---", "K-.-", "L.-..", "M--", "N-.", "O---", "P.--.", "Q--.-", "R.-.", "S...", "T-", "U..-", "V...-", "W.--", "X-..-", "Y-.--", "Z--..", "1.----", "2..---", "3...--", "4....-", "5.....", "6-....", "7--...", "8---..", "9----.", "0-----", "..-.-.-" }; void short_beep() { Sound_Play(800, DELAY); Delay_ms(DELAY); } void long_beep() { Sound_Play(800, DELAY * 3); Delay_ms(DELAY); } void morse_chr(char chr) { static short cnt, i; // if (chr == ' ') { Delay_ms(DELAY * 3); return; } // for (cnt = 0; cnt < 37; cnt++) { if (table[cnt][0] == chr) { for (i = 1; table[cnt][i] != 0x00; i++) { if (table[cnt][i] == '.') short_beep(); else long_beep(); } Delay_ms(DELAY * 3); return; } } } void morse_str(char* str) { while (*str != 0x00) { morse_chr(*str); str++; } } //********************************************************************** int ring_tone() { WORD ad; short cnt; // ad = 0; for (cnt = 0; cnt < 50; cnt++) { ad += ADC_Get_Sample(2); } return (ad / 50); } //********************************************************************** void proc() { short key; //通知開始“ドミソド”を知らせます。 Delay_ms(500); do_mi_so_do(); Delay_ms(500); // while (1) { //キー(DTMF信号)が押されるのを待ちます。 while (DTMF_STD == 0) { } while (DTMF_STD == 1) { } key = PORTB & 0x0F; // switch (key) { case 1: if (SW1 == 1) { Sound_Play(2000, 500); } else { Sound_Play(500, 500); } break; case 2: if (SW2 == 1) { Sound_Play(2000, 500); } else { Sound_Play(500, 500); } break; case 3: if (SW3 == 1) { Sound_Play(2000, 500); } else { Sound_Play(500, 500); } break; case 4: LED1 = LED_ON; Sound_Play(1000, 500); break; case 5: LED1 = LED_OFF; Sound_Play(1000, 500); break; case 6: LED2 = LED_ON; Sound_Play(1000, 500); break; case 7: LED2 = LED_OFF; Sound_Play(1000, 500); break; case 8: LED3 = LED_ON; Sound_Play(1000, 500); break; case 9: LED3 = LED_OFF; Sound_Play(1000, 500); break; case 10: //通知終了“ドソミド”を知らせます。 Delay_ms(500); do_so_mi_do(); Delay_ms(500); return; break; } } } //********************************************************************** void main() { double ad; short cnt; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000100; // A/D変換を使用する。 TRISA = 0b10110111; TRISB = 0b00001111; PHONE = PHONE_OFF; LED4 = LED_OFF; // for (cnt = 0; cnt < 10; cnt++) { LED1 = LED_ON; LED2 = LED_ON; LED3 = LED_ON; Delay_ms(100); LED1 = LED_OFF; LED2 = LED_OFF; LED3 = LED_OFF; Delay_ms(100); } // ADC_Init(); Sound_Init(&PORTB, 5); Delay_ms(1000); // while (1) { while (1) { //自動応答:着信をチェックします。 ad = ring_tone(); ad *= 4.8828125; if (ad > 300.0) { //電圧が300mV以上で自動着信します。 //着信を承諾(受付)します。 PHONE = PHONE_ON; Delay_ms(1000); PHONE = PHONE_OFF; break; } //自動通知:SW1の押下で自動通知します。 if (SW1 == 0) { //自動発信します。 PHONE = PHONE_ON; Delay_ms(2000); PHONE = PHONE_OFF; break; } } //自動応答または自動通知の処理を行います。 LED4 = LED_ON; proc(); LED4 = LED_OFF; //通話を終了します。 PHONE = PHONE_ON; Delay_ms(2000); PHONE = PHONE_OFF; //暫らく待機します。 Delay_ms(10000); } }//~! //**********************************************************************