Simulated the CD changer of a Saab to implement a bluetooth connection to the car stereo. Control of playback device (phone) with steering wheel buttons. Needs a RN52 bluetooth transciever and a CAN transiever. So far only audio playback and control via steering wheel buttons implemented. Hands free calling planned.
Diff: main.cpp
- Revision:
- 0:6cf6e566c0da
- Child:
- 2:10c60edc8573
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jan 04 15:31:12 2016 +0000 @@ -0,0 +1,117 @@ +// Inspired from BlueSaab +// Project/Hardware: http://bluesaab.blogspot.com/ +// Code: https://github.com/kveilands/SAAB-CDC/tree/master/SAAB-CDC +// I-Bus information from http://pikkupossu.1g.fi/tomi/projects/i-bus/i-bus.html + +#include "mbed.h" +#include "CDC.h" +#include "RN52.h" + +CDC cdc; +RN52 rn52; +RN52_RESULT res; + +Timer playback; + + +Serial pc(USBTX, USBRX); // tx, rx + +int main() { + printf("Petters BT CDC-emulator\r\n"); + printf("Initializing\r\n"); + cdc.init(); + rn52.init(); + printf("Starting loop\r\n"); + playback.start(); //only for debug + while(1) { + if(pc.readable()) { + switch (pc.getc()) { + case 'p': + if(rn52.set(RN52_PLAYPAUSE)) { + printf("play/pause\r\n"); + } + break; + case 'v': + printf("volume up\r\n"); + rn52.set(RN52_VOLUMEUP); + break; + case 'n': + printf("next track\r\n"); + rn52.set(RN52_NEXTTRACK); + break; + case 'q': + printf("getting status\r\n"); + rn52.get(RN52_GETSTATUS, &res); + printf("%s", res.response); + case 't': + rn52.get(RN52_CALLER_ID, &res); + printf("%s", res.response); + } + } + cdc.set_time((char)(((int)playback.read())/60),(char)(((int)playback.read())%60)); + switch (cdc.get_cmd()) { + case IBUS_OTHER_MESSAGE: + break; + case IBUS_DOORS_LOCKED: + break; + case IBUS_DOORS_UNLOCKED: + break; + case IBUS_NEXT: + cdc.display("NEXT"); + rn52.set(RN52_PLAYPAUSE); + break; + case IBUS_CDC_ON: + cdc.display("CDC ON"); + break; + case IBUS_CDC_OFF: + cdc.display("CDC OFF"); + break; + case IBUS_VOLUME_UP: + cdc.display("VOLUME UP"); + rn52.set(RN52_VOLUMEUP); + break; + case IBUS_VOLUME_DOWN: + cdc.display("VOLUME DOWN"); + break; + case IBUS_SKIP_FW: + cdc.display("SKIP FW"); + rn52.set(RN52_NEXTTRACK); + break; + case IBUS_SKIP_BW: + cdc.display("SKIP BW"); + rn52.set(RN52_PREVTRACK); + break; + case IBUS_SET: + cdc.display("SET"); + rn52.set(RN52_CONNECT); + break; + case IBUS_CLEAR: + cdc.display("CLEAR"); + rn52.set(RN52_DISCONNECT); + break; + } + if(rn52.changed()) { + rn52.get(RN52_GETSTATUS, &res); + switch (res.event) { + case RN52_CALLER_ID_EVENT: + rn52.get(RN52_CALLER_ID, &res); + break; + case RN52_TRACK_CHANGE_EVENT: + rn52.get(RN52_TRACK_METADATA, &res); + playback.reset(); + break; + default: //no event occured, check connection status + if(res.connection == RN52_AUDIO_STREAMING) { + cdc.display("BT SPELAR"); + playback.start(); + } + else { + playback.stop(); + playback.reset(); + } + + } + + } + } +} \ No newline at end of file