mp3모듈을 사용하는 법 2탄입니다. ㅎㅎ
라이브러리를 추가하지 않고! 직접 제어코드를 작성하여 실험했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX (아두이노 업로드를 위해 가상 시리얼 사용) void setup () { Serial.begin(9600); pinMode(A0, INPUT); pinMode(7, INPUT); mySerial.begin (9600); // 소프트웨어 시리얼 통신 시작(9600 Baud rate) mp3_volume(0x0F); delay(20); if(digitalRead(7) == LOW) { while(digitalRead(7) == LOW) { mp3_run(1); } } } void loop () { } /* * 데이터시트에 나와 있는 MP3 폴더 안에 0001번 0002번 0255번 실행 */ void mp3_run(unsigned int num) { switch(num) { case 1: // 0001번 mySerial.write(0x7E); mySerial.write(0xFF); mySerial.write(0x06); mySerial.write(0x12); mySerial.write((byte)0x00); mySerial.write((byte)0x00); mySerial.write(0x01); mySerial.write(0xFE); mySerial.write(0xE8); mySerial.write(0xEF); while(digitalRead(A0) == LOW); break; case 2: // 0002번 mySerial.write(0x7E); mySerial.write(0xFF); mySerial.write(0x06); mySerial.write(0x12); mySerial.write((byte)0x00); mySerial.write((byte)0x00); mySerial.write(0xFF); mySerial.write(0xFD); mySerial.write(0xEA); mySerial.write(0xEF); while(digitalRead(A0) == LOW); break; case 3: // 0255번 mySerial.write(0x7E); mySerial.write(0xFF); mySerial.write(0x06); mySerial.write(0x12); mySerial.write((byte)0x00); mySerial.write((byte)0x00); mySerial.write(0x02); mySerial.write(0xFE); mySerial.write(0xE7); mySerial.write(0xEF); while(digitalRead(A0) == LOW); break; } } /* * checksum 적용 된 volume 조절 */ void mp3_volume(unsigned int level) { unsigned char check_MSB = mp3_volume_checkSum(level) >> 8; unsigned char check_LSB = mp3_volume_checkSum(level) & 0x00FF; mySerial.write(0x7E); // $S mySerial.write(0xFF); // Ver mySerial.write(0x06); // Length mySerial.write(0x06); // CMD mySerial.write((byte)0x00); // FeedBack mySerial.write((byte)0x00); // Param_MSB mySerial.write(level); // Param_LSB mySerial.write(check_MSB); // Check_MSB mySerial.write(check_LSB); // Check_LSB mySerial.write(0xEF); // $O } /* * volume cmd 적용된 check sum 생성 */ unsigned int mp3_volume_checkSum(unsigned int level) { unsigned int checksum = 0; checksum = 0xFFFF - (0xFF + 0x06 + 0x06 + level) + 1; return checksum; } | cs |
원래
모든 cmd를 적용 가능한 check sum 함수를 만들면 굳이 volume용으로 안만들어도 되지만 테스트만 한것임으로
필요하면 추가적으로 함수를 만들어서 적용하면 될듯 합니다.
참 쉽죠?
반응형
'b. 임베디드 > 아두이노' 카테고리의 다른 글
[아두이노] nrf24l01 RF통신 모듈 사용하기 (0) | 2022.06.03 |
---|---|
[아두이노] 74HC4051 모듈 사용하기 (0) | 2022.05.01 |
[아두이노] Byte 수대로 데이터 읽어오기 (0) | 2018.08.08 |
[아두이노] DFPlayerMini mp3모듈 사용(1) (0) | 2018.08.02 |
[아두이노] HX711 로드셀을 이용한 무게측정하기 (0) | 2018.08.02 |
[아두이노] #define _DEBUG_ 사용하기 (0) | 2018.08.02 |
[아두이노] String문자를 int형으로 변환하기 (0) | 2018.08.02 |
[아두이노] 소수점 표현하기 (0) | 2018.08.02 |