BT201 последовательность комманд

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

BT201 последовательность комманд

Сообщение Forsio »

Сразу извиняюсь если не туда написал. Долго думал и искал подходящий раздел под мою тему.
Купил я себе модуль BT201. И сейчас стоит задача написать прошивку в ATMEGA16 пишу на си. С этим я надеюсь что управлюсь сам. Ну если что спрошу здесь. Пока нужно прояснить последовательность команд модуля BT201. Во первых что нужно делать при запуске модуля?
Так я уже смотрел и ознакомился с многими командами и документацией к модулю.
Была уже написана и основа под ATMEGA16 то есть вывод информации на дисплей, передача и приём UART. В общем всё что нужно для написания прошивки управления из меги. Также уже готова и запаяна плата.
Вот схема.
Изображение
Сейчас для начала нужно понять последовательность команд модуля.
Реклама
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

В общем дополню здесь информацию кодом, который я кое как всё же написал. Сильно не ругаться в программировании ещё только новичок и получилось, то что получилось.
Спойлер

Код: Выделить всё

#define F_CPU 7372800UL
#define BAUND 9600L
#define UBRRL_value (F_CPU/(BAUND*16))-1

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

#define MAIN_H_
#define LCD_H_

#define LCD_DDR DDRD
#define LCD_PORT PORTD
#define LCD_PIN PIND

#define LED_DDR DDRA
#define LED_PORT PORTA
#define LED_PIN PINA

#define BTN_DDR DDRC
#define BTN_PORT PORTC
#define BTN_PIN PINC

#define DATA 0b11110000
#define RS PD2
#define E PD3

#define E1 LCD_PORT|=(1<<E)
#define E0 LCD_PORT&=~(1<<E)

#define RS1 LCD_PORT|=(1<<RS)
#define RS0 LCD_PORT&=~(1<<RS)

#define LED1_R1 LED_PORT|=(1<<PA0)
#define LED1_R0 LED_PORT&=~(1<<PA0)

#define LED1_G1 LED_PORT|=(1<<PA1)
#define LED1_G0 LED_PORT&=~(1<<PA1)

#define LED1_B1 LED_PORT|=(1<<PA2)
#define LED1_B0 LED_PORT&=~(1<<PA2)

#define LED2_G1 LED_PORT|=(1<<PA3)
#define LED2_G0 LED_PORT&=~(1<<PA3)

#define LED2_R1 LED_PORT|=(1<<PA4)
#define LED2_R0 LED_PORT&=~(1<<PA4)

#define LED3_Y1 LED_PORT|=(1<<PA5)
#define LED3_Y0 LED_PORT&=~(1<<PA5)

#define LED4_B1 LED_PORT|=(1<<PA6)
#define LED4_B0 LED_PORT&=~(1<<PA6)

#define LED5_G1 LED_PORT|=(1<<PA7)
#define LED5_G0 LED_PORT&=~(1<<PA7)

#define BTN_PLAY_PAUSE (~PINC&(1<<PC0))
#define BTN_PREV (~PINC&(1<<PC1))
#define BTN_NEXT (~PINC&(1<<PC2))
#define BTN_VOL_MIN (~PINC&(1<<PC3))
#define BTN_VOL_PLS (~PINC&(1<<PC4))
#define BTN_RAND (~PINC&(1<<PC5))
#define BTN_REPEAT (~PINC&(1<<PC6))
#define BTN_MODE (~PINC&(1<<PC7))

#define FLAG_END_RX (1<<3)
#define FLAG_ERR_RX (1<<4)
#define BUF_SIZE 20

char rx_buf[BUF_SIZE];
char buf_index = 0;
char rxb;

volatile start=1, flags;

uint8_t n=0;

char ind7=0;
char ind6=0;
char ind5=0;
char ind4=0;
char ind3=0;
char ind2=0;
char ind1=0;
char ind0=0;

char chl=0;

char min=0;
char sec=0;

char vol=0;
char mode=0;
char repeat=0;

unsigned int dec=0;
unsigned int def=0;
unsigned int dek=0;
unsigned int dec_chl=0;

void lcd_ini(void);
void lcd_str(char* str);
void lcd_pos(uint8_t line, uint8_t pos);
void lcd_num(uint8_t num, uint8_t line, uint8_t pos);
void bt201_start(void);

void bt201_start (void)
{
	//Команда AT+CT01 задаём модулю скорость 9600
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('T');
	send_UART('0');
	send_UART('1');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(2000);
	//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('M');
	send_UART('0');
	send_UART('2');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(20);
	//Устанавливаем значение 2 в переменной mode
	mode=2;
	
	//Команда AT+CA15 задаём модулю уровень громкости на 15
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('A');
	send_UART('1');
	send_UART('5');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	
	//Конвертируем значение уровня звука в ASCII
	vol = 15;
	dek = vol%10;
	def = vol/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	
	//Выводим на дисплей уровень звука
	lcd_pos(0,11);
	lcd_str("VOL");
	lcd_pos(0,14);
	send_byte(ind1,1);
	lcd_pos(0,15);
	send_byte(ind0,1);
}

void write(uint8_t n)
{
	n<<=4;
	E1;
	LCD_PORT&=~DATA;
	LCD_PORT|=n;
	_delay_us(1);
	E0;
}

void send_byte(uint8_t byte, uint8_t tip)
{
	if (tip) //если тип данные на линии RS 1
	{
		RS1;
	}
	else //иначе тип команда и на линии RS 0
	{
		RS0;
	}
	
	write(byte>>4); //передача старшего полубайта
	_delay_us(250);
	write(byte); //передача младшего полубайта
	_delay_us(250);
}

void lcd_ini(void)
{
	LCD_DDR|=DATA | (1<<RS) | (1<<E);
	_delay_ms(20);
	RS0;
	write(3);
	_delay_ms(5);
	write(3);
	_delay_us(150);
	write(3);
	_delay_us(50);
	write(2);
	_delay_us(50);
	
	send_byte(40,0);
	_delay_us(50);
	
	send_byte(12,0);
	_delay_us(50);
	
	send_byte(1,0);
	_delay_ms(2);
	
	send_byte(6,0);
	_delay_us(50);
}

void lcd_str(char* str)
{
	uint8_t n=0;
	while(str[n])
	{
		send_byte(str[n],1);
		n++;
	}
}

void lcd_pos(uint8_t line, uint8_t pos)
{
	uint8_t adress=(line*0x40+pos)|0x80;
	send_byte(adress,0);
	_delay_us(50);
}

void init_UART()
{
	UBRRL = UBRRL_value;
	UBRRH = UBRRL_value>>8;
	UCSRB|=(1<<TXEN);
	UCSRB|=(1<<RXEN);
	UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1));
	UCSRB|=(1<<RXCIE);
	sei();
	flags = 0;
}

void send_UART(char value)
{
	while(!(UCSRA&(1<<UDRE)));
	UDR=value;
}

char CharToInt(char c)
{
	char chl=0;
	if ('0' <= c && c <= '9')
	{
		chl=c-48;
	}
	else if ('A' <= c && c <= 'F')
	{
		chl=c-55;
	}
	return chl;
}

char CharToDec(unsigned int s)
{
	unsigned int dec_chl=0;
	dek = s%10;
	def = s/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	dek = def%10;
	def = def/10;
	ind2 = dek+48;
	dek = def%10;
	def = def/10;
	ind3 = dek+48;
	dek = def%10;
	def = def/10;
	ind4 = dek+48;
	dek = def%10;
	def = def/10;
	ind5 = dek+48;
	dek = def%10;
	def = def/10;
	ind6 = dek+48;
	dek = def%10;
	def = def/10;
	ind7 = dek+48;
	return dec_chl;
}

char Time(unsigned int s)
{
	char min = s/60;
	char sec = s%60;
	
	dek = min%10;
	def = min/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	
	dek = sec%10;
	def = sec/10;
	ind2 = dek+48;
	dek = def%10;
	def = def/10;
	ind3 = dek+48;
	
	return min;
}

ISR(USART_RXC_vect)
{
	char rxb = UDR;
	if(!(flags & FLAG_END_RX))
	{
		rx_buf[buf_index]=rxb;
		if(rx_buf[buf_index] == 0x0D)
		{
			flags |= FLAG_END_RX;
			return;
		}
		buf_index++;
		if(buf_index >= BUF_SIZE)
		{
			buf_index = 0;
			flags |= FLAG_ERR_RX;
		}
	}
}

int main(void)
{
	init_UART();
	lcd_ini();
	void bt201_start();
	
	_delay_ms(500);
	send_UART('O');
	send_UART('K');
	send_UART('!');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	flags = 0;
	
	while(1)
    {
        char i = 0;
		if (rx_buf[i] == 'M')
		{
			i++;
			if (rx_buf[i] == '1')
			{
				//M1 Номер текущего файла
				long dec = CharToInt(rx_buf[3]);
				dec = dec*16 + CharToInt(rx_buf[4]);
				dec = dec*16 + CharToInt(rx_buf[5]);
				dec = dec*16 + CharToInt(rx_buf[6]);
				dec = dec*16 + CharToInt(rx_buf[7]);
				dec = dec*16 + CharToInt(rx_buf[8]);
				dec = dec*16 + CharToInt(rx_buf[9]);
				dec = dec*16 + CharToInt(rx_buf[10]);
				
				CharToDec(dec);
				
				lcd_pos(1,0);
				send_byte(ind3,1);
				lcd_pos(1,1);
				send_byte(ind2,1);
				lcd_pos(1,2);
				send_byte(ind1,1);
				lcd_pos(1,3);
				send_byte(ind0,1);
				lcd_pos(1,4);
				send_byte('/',1);
			}
			else if (rx_buf[i] == '2')
			{
				//M2 Общее колличество звуковых файлов
				long dec = CharToInt(rx_buf[3]);
				dec = dec*16 + CharToInt(rx_buf[4]);
				dec = dec*16 + CharToInt(rx_buf[5]);
				dec = dec*16 + CharToInt(rx_buf[6]);
				dec = dec*16 + CharToInt(rx_buf[7]);
				dec = dec*16 + CharToInt(rx_buf[8]);
				dec = dec*16 + CharToInt(rx_buf[9]);
				dec = dec*16 + CharToInt(rx_buf[10]);
				
				CharToDec(dec);
				
				lcd_pos(1,5);
				send_byte(ind3,1);
				lcd_pos(1,6);
				send_byte(ind2,1);
				lcd_pos(1,7);
				send_byte(ind1,1);
				lcd_pos(1,8);
				send_byte(ind0,1);
			}
			else if (rx_buf[i] == 'T')
			{
				//MT Общее время воспроизведения
				
				long dec = CharToInt(rx_buf[3]);
				dec = dec*16 + CharToInt(rx_buf[4]);
				dec = dec*16 + CharToInt(rx_buf[5]);
				dec = dec*16 + CharToInt(rx_buf[6]);
				dec = dec*16 + CharToInt(rx_buf[7]);
				dec = dec*16 + CharToInt(rx_buf[8]);
				dec = dec*16 + CharToInt(rx_buf[9]);
				dec = dec*16 + CharToInt(rx_buf[10]);
				
				CharToDec(dec);
				Time(dec);
				
				lcd_pos(0,7);
				send_byte(ind1,1);
				lcd_pos(0,8);
				send_byte(ind0,1);
				lcd_pos(0,9);
				send_byte(':',1);
				lcd_pos(0,10);
				send_byte(ind3,1);
				lcd_pos(0,11);
				send_byte(ind2,1);
			}
			/*else if (rx_buf[i] == 'K')
			{
				//MK Время воспроизведения текущего файла
				long dec = CharToInt(rx_buf[3]);
				dec = dec*16 + CharToInt(rx_buf[4]);
				dec = dec*16 + CharToInt(rx_buf[5]);
				dec = dec*16 + CharToInt(rx_buf[6]);
				dec = dec*16 + CharToInt(rx_buf[7]);
				dec = dec*16 + CharToInt(rx_buf[8]);
				dec = dec*16 + CharToInt(rx_buf[9]);
				dec = dec*16 + CharToInt(rx_buf[10]);
				
				CharToDec(dec);
				Time(dec);
				
				lcd_pos(0,7);
				send_byte(ind1,1);
				lcd_pos(0,8);
				send_byte(ind0,1);
				lcd_pos(0,9);
				send_byte(':',1);
				lcd_pos(0,10);
				send_byte(ind3,1);
				lcd_pos(0,11);
				send_byte(ind2,1);
			}*/
			else if (rx_buf[i] == 'F')
			{
				//MF Имя текущего файла
				lcd_pos(0,0);
				send_byte(rx_buf[4],1);
				lcd_pos(0,1);
				send_byte(rx_buf[5],1);
				lcd_pos(0,2);
				send_byte(rx_buf[6],1);
				lcd_pos(0,3);
				send_byte(rx_buf[7],1);
				lcd_pos(0,4);
				send_byte(rx_buf[8],1);
				lcd_pos(0,5);
				send_byte(rx_buf[9],1);
			}
			else if (rx_buf[i] == 'P')
			{
				//MP Текущее состояние плеера
				if (rx_buf[4] == 0)
				{
					//Стоп
					LED2_R1;
					LED2_G0;
				}
				if (rx_buf[4] == 1)
				{
					//Воспроизведение
					LED2_G1;
					LED2_R0;
				}
				if (rx_buf[4] == 2)
				{
					//Пауза
					LED2_R1;
					LED2_G0;
					_delay_ms(10);
					LED2_G1;
					LED2_R0;
					_delay_ms(10);
				}
			}
		}
		else if (rx_buf[i] == 'Q')
		{
			i++;
			if (rx_buf[i] == 'M')
			{
				//QM Режим работы плеера
				if (rx_buf[4] == 1)
				{
					//Блютус
					lcd_pos(0,13);
					lcd_str("BLE");
					
					LED1_R1;
					LED1_G0;
					LED1_B0;
				}
				if (rx_buf[4] == 2)
				{
					//USB Flash
					lcd_pos(0,13);
					lcd_str("USB");
					
					LED1_R0;
					LED1_G1;
					LED1_B0;
				}
				if (rx_buf[4] == 3)
				{
					//SD Card
					lcd_pos(0,13);
					lcd_str(" SD");
					
					LED1_R0;
					LED1_G0;
					LED1_B1;
				}
			}
		}
		/*
		//Команда AT+M1 запрос номера текущего файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('1');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(10);
		
		//Команда AT+M2 запрос общего колличества файлов
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('2');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(10);
		
		//Команда AT+MT запрос общего времени воспроизводимого файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('T');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(10);
		
		//Команда AT+MK запрос текущего времени воспроизводимого файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('K');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(10);
		*/
		if (BTN_PREV)
		{
			//Команда AT+CD задаём модулю воспроизведение предыдущего трека
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('D');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(10);
		}
		if (BTN_NEXT)
		{
			//Команда AT+CC задаём модулю воспроизведение следующего трека
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('C');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(10);
		}
		if (BTN_VOL_MIN)
		{
			//Команда AT+CF задаём модулю уменьшение громкости
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('F');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(10);
			vol--;
			
			//Конвертируем значение уровня звука в ASCII
			dek = vol%10;
			def = vol/10;
			ind0 = dek+48;
			dek = def%10;
			def = def/10;
			ind1 = dek+48;
			
			//Выводим на дисплей уровень звука
			lcd_pos(0,11);
			lcd_str("VOL");
			lcd_pos(0,14);
			send_byte(ind1,1);
			lcd_pos(0,15);
			send_byte(ind0,1);
		}
		if (BTN_VOL_PLS)
		{
			//Команда AT+CE задаём модулю увеличение громкости
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('E');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(10);
			vol++;
			
			//Конвертируем значение уровня звука в ASCII
			dek = vol%10;
			def = vol/10;
			ind0 = dek+48;
			dek = def%10;
			def = def/10;
			ind1 = dek+48;
			
			//Выводим на дисплей уровень звука
			lcd_pos(0,11);
			lcd_str("VOL");
			lcd_pos(0,14);
			send_byte(ind1,1);
			lcd_pos(0,15);
			send_byte(ind0,1);
		}
		if (BTN_MODE)
		{
			if (mode == 3)
			{
				//Команда AT+CM01 зададаём модулю режим воспроизведения с BLE
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('1');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				//Устанавливаем значение 1 в переменной mode
				mode=1;
			}
			if (mode == 2)
			{
				//Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('3');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				//Устанавливаем значение 3 в переменной mode
				mode=3;
			}
			if (mode == 1)
			{
				//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('2');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				//Устанавливаем значение 2 в переменной mode
				mode=2;
			}
		}
		if (BTN_PLAY_PAUSE)
		{
			//Команда AT+CB даём модулю команду PLAY/PAUSE
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('B');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(10);
		}
		if (BTN_REPEAT)
		{
			if (repeat == 2)
			{
				repeat=0;
				//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('0');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B0;
			}
			else
			{
				repeat=2;
				//Команда AT+AC02 воспроизведение в цикле
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('2');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y1;
				LED4_B0;
			}
		}
		if (BTN_RAND)
		{
			if (repeat == 3)
			{
				repeat=0;
				//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('0');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B0;
			}
			else
			{
				repeat=3;
				//Команда AT+AC03 воспроизведение в случайном порядке
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('3');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B1;
			}
		}
    }
}
Так вот что данный код проверялся сами функции все рабочие, но проблема тут как раз таки в том что здесь нужно разобраться с правильной последовательностью команд самого модуля BT201 и возможно здесь нужны будут какие ни будь задержки чтобы успевала обработаться информация. Вот с этим нужно разобраться. Потому как этот код проверялся в железе уже вместе с самим модулем, но в модуле происходит постоянный цикличный перезапуск и он так и не может нормально стартовать. Хотя от компа через терминал модуль успешно работает.
Реклама
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: BT201 последовательность комманд

Сообщение Novice user »

На схем.нет вам все тщательно разжевали и положили в рот,осталось только проглотить
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Ничего подобного там то что подсказали с написанием кода я уже и сделал, но сейчас вопрос стоит именно с самим модулем BT201. Нужно разбираться именно с последовательностью команд и задержками между этими командами в самом модуле BT201.
Реклама
Эиком - электронные компоненты и радиодетали
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: BT201 последовательность комманд

Сообщение Novice user »

Как не сказали?Я лично несколько раз вам писал-ЧИТАЙ ДАТАШИТ!!!
Например-нахрена каждый раз при включении переключать скорость на 9600,и то не правильно? В той вашей теме в самом первом сообщении есть ссылка,которую ВЫ ИЗУЧИЛИ (ваши слова),там русским языком написано как переключить скорость
Реклама
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Novice user, ну со скоростью понятно значит не нужно её каждый раз дергать раз уже установлена на 9600, то так и должно быть тем более что я её уже через терминал давно переключил в самом модуле. Но дальше то абсолютно непонятно какие команды засылать модулю, что опрашивать и главное с какими задержками. Я так примерно что по логике написал, но насколько оно верно непонятно.
Там то что я смотрел несколько статей всегда попадается подключение с ардуиной что ни разу здесь не подходит. Пытался в тех скриптах отследить хотя бы команды и задержки всю эту последовательность, но там мало что находишь. Нету у меня чёткого представления в какой последовательности должны выполнятся команды и с какими паузами (задержками) потому как у меня ещё есть подозрение что без задержек оно не успевает обрабатываться на какой либо стороне.
Реклама
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Даже уже и не знаю что не так? Почему не хочет работать данный код?
Спойлер

Код: Выделить всё

#define F_CPU 7372800UL
#define BAUND 9600L
#define UBRRL_value (F_CPU/(BAUND*16))-1

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

#define MAIN_H_
#define LCD_H_

#define LCD_DDR DDRD
#define LCD_PORT PORTD
#define LCD_PIN PIND

#define LED_DDR DDRA
#define LED_PORT PORTA
#define LED_PIN PINA

#define BTN_DDR DDRC
#define BTN_PORT PORTC
#define BTN_PIN PINC

#define DATA 0b11110000
#define RS PD2
#define E PD3

#define E1 LCD_PORT|=(1<<E)
#define E0 LCD_PORT&=~(1<<E)

#define RS1 LCD_PORT|=(1<<RS)
#define RS0 LCD_PORT&=~(1<<RS)

#define LED1_R1 LED_PORT|=(1<<PA0)
#define LED1_R0 LED_PORT&=~(1<<PA0)

#define LED1_G1 LED_PORT|=(1<<PA1)
#define LED1_G0 LED_PORT&=~(1<<PA1)

#define LED1_B1 LED_PORT|=(1<<PA2)
#define LED1_B0 LED_PORT&=~(1<<PA2)

#define LED2_G1 LED_PORT|=(1<<PA3)
#define LED2_G0 LED_PORT&=~(1<<PA3)

#define LED2_R1 LED_PORT|=(1<<PA4)
#define LED2_R0 LED_PORT&=~(1<<PA4)

#define LED3_Y1 LED_PORT|=(1<<PA5)
#define LED3_Y0 LED_PORT&=~(1<<PA5)

#define LED4_B1 LED_PORT|=(1<<PA6)
#define LED4_B0 LED_PORT&=~(1<<PA6)

#define LED5_G1 LED_PORT|=(1<<PA7)
#define LED5_G0 LED_PORT&=~(1<<PA7)

#define BTN_PLAY_PAUSE (~PINC&(1<<PC0))
#define BTN_PREV (~PINC&(1<<PC1))
#define BTN_NEXT (~PINC&(1<<PC2))
#define BTN_VOL_MIN (~PINC&(1<<PC3))
#define BTN_VOL_PLS (~PINC&(1<<PC4))
#define BTN_RAND (~PINC&(1<<PC5))
#define BTN_REPEAT (~PINC&(1<<PC6))
#define BTN_MODE (~PINC&(1<<PC7))

#define FLAG_END_RX (1<<3)
#define FLAG_ERR_RX (1<<4)
#define BUF_SIZE 20

char rx_buf[BUF_SIZE];
char buf_index = 0;
char rxb;

volatile start=1, flags;

uint8_t n=0;

char ind7=0;
char ind6=0;
char ind5=0;
char ind4=0;
char ind3=0;
char ind2=0;
char ind1=0;
char ind0=0;

char chl=0;

char min=0;
char sec=0;

char vol=0;
char mode=0;
char repeat=0;

unsigned int dec=0;
unsigned int def=0;
unsigned int dek=0;
unsigned int dec_chl=0;

void lcd_ini(void);
void lcd_str(char* str);
void lcd_pos(uint8_t line, uint8_t pos);
void lcd_num(uint8_t num, uint8_t line, uint8_t pos);
void bt201_start(void);

void bt201_start (void)
{
	/*
	//Команда AT+CT01 задаём модулю скорость 9600
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('T');
	send_UART('0');
	send_UART('1');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(2000);
	*/
	//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('M');
	send_UART('0');
	send_UART('2');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	
	//Устанавливаем значение 2 в переменной mode
	mode=2;
	
	//Команда AT+CA15 задаём модулю уровень громкости на 15
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('C');
	send_UART('A');
	send_UART('1');
	send_UART('5');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(2000);
	
	//Конвертируем значение уровня звука в ASCII
	vol = 15;
	dek = vol%10;
	def = vol/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	
	//Выводим на дисплей уровень звука
	lcd_pos(0,11);
	lcd_str("VOL");
	lcd_pos(0,14);
	send_byte(ind1,1);
	lcd_pos(0,15);
	send_byte(ind0,1);
	
	//Команда AT+AA00 останавливаем воспроизведение
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('A');
	send_UART('A');
	send_UART('0');
	send_UART('0');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(100);
	
	//Команда AT+AA01 задаём модулю команду PLAY
	send_UART('A');
	send_UART('T');
	send_UART('+');
	send_UART('A');
	send_UART('A');
	send_UART('0');
	send_UART('1');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	
	
}

void write(uint8_t n)
{
	n<<=4;
	E1;
	LCD_PORT&=~DATA;
	LCD_PORT|=n;
	_delay_us(1);
	E0;
}

void send_byte(uint8_t byte, uint8_t tip)
{
	if (tip) //если тип данные на линии RS 1
	{
		RS1;
	}
	else //иначе тип команда и на линии RS 0
	{
		RS0;
	}
	
	write(byte>>4); //передача старшего полубайта
	_delay_us(250);
	write(byte); //передача младшего полубайта
	_delay_us(250);
}

void lcd_ini(void)
{
	LCD_DDR|=DATA | (1<<RS) | (1<<E);
	_delay_ms(20);
	RS0;
	write(3);
	_delay_ms(5);
	write(3);
	_delay_us(150);
	write(3);
	_delay_us(50);
	write(2);
	_delay_us(50);
	
	send_byte(40,0);
	_delay_us(50);
	
	send_byte(12,0);
	_delay_us(50);
	
	send_byte(1,0);
	_delay_ms(2);
	
	send_byte(6,0);
	_delay_us(50);
}

void lcd_str(char* str)
{
	uint8_t n=0;
	while(str[n])
	{
		send_byte(str[n],1);
		n++;
	}
}

void lcd_pos(uint8_t line, uint8_t pos)
{
	uint8_t adress=(line*0x40+pos)|0x80;
	send_byte(adress,0);
	_delay_us(50);
}

void init_UART()
{
	UBRRL = UBRRL_value;
	UBRRH = UBRRL_value>>8;
	UCSRB|=(1<<TXEN);
	UCSRB|=(1<<RXEN);
	UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1));
	UCSRB|=(1<<RXCIE);
	sei();
	flags = 0;
}

void send_UART(char value)
{
	while(!(UCSRA&(1<<UDRE)));
	UDR=value;
}

char CharToInt(char c)
{
	char chl=0;
	if ('0' <= c && c <= '9')
	{
		chl=c-48;
	}
	else if ('A' <= c && c <= 'F')
	{
		chl=c-55;
	}
	return chl;
}

char CharToDec(unsigned int s)
{
	unsigned int dec_chl=0;
	dek = s%10;
	def = s/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	dek = def%10;
	def = def/10;
	ind2 = dek+48;
	dek = def%10;
	def = def/10;
	ind3 = dek+48;
	dek = def%10;
	def = def/10;
	ind4 = dek+48;
	dek = def%10;
	def = def/10;
	ind5 = dek+48;
	dek = def%10;
	def = def/10;
	ind6 = dek+48;
	dek = def%10;
	def = def/10;
	ind7 = dek+48;
	return dec_chl;
}

char Time(unsigned int s)
{
	char min = s/60;
	char sec = s%60;
	
	dek = min%10;
	def = min/10;
	ind0 = dek+48;
	dek = def%10;
	def = def/10;
	ind1 = dek+48;
	
	dek = sec%10;
	def = sec/10;
	ind2 = dek+48;
	dek = def%10;
	def = def/10;
	ind3 = dek+48;
	
	return min;
}

ISR(USART_RXC_vect)
{
	char rxb = UDR;
	if(!(flags & FLAG_END_RX))
	{
		rx_buf[buf_index]=rxb;
		if(rx_buf[buf_index] == 0x0D)
		{
			flags |= FLAG_END_RX;
			return;
		}
		buf_index++;
		if(buf_index >= BUF_SIZE)
		{
			buf_index = 0;
			flags |= FLAG_ERR_RX;
		}
	}
}

int main(void)
{
	init_UART();
	lcd_ini();
	void bt201_start();
	
	_delay_ms(500);
	send_UART('O');
	send_UART('K');
	send_UART('!');
	send_UART(0x0D);
	send_UART(0x0A);
	_delay_ms(10);
	flags = 0;
	
	while(1)
    {
        char i = 0;
		if (rx_buf[i] == 'M')
		{
			i++;
			if (rx_buf[i] == '1')
			{
				//M1 Номер текущего файла
				long dec = CharToInt(rx_buf[3]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[4]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[5]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[6]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[7]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[8]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[9]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[10]);
				_delay_us(1);
				
				CharToDec(dec);
				
				lcd_pos(1,0);
				send_byte(ind3,1);
				lcd_pos(1,1);
				send_byte(ind2,1);
				lcd_pos(1,2);
				send_byte(ind1,1);
				lcd_pos(1,3);
				send_byte(ind0,1);
				lcd_pos(1,4);
				send_byte('/',1);
				_delay_ms(300);
			}
			else if (rx_buf[i] == '2')
			{
				//M2 Общее колличество звуковых файлов
				long dec = CharToInt(rx_buf[3]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[4]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[5]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[6]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[7]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[8]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[9]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[10]);
				_delay_us(1);
				
				CharToDec(dec);
				
				lcd_pos(1,5);
				send_byte(ind3,1);
				lcd_pos(1,6);
				send_byte(ind2,1);
				lcd_pos(1,7);
				send_byte(ind1,1);
				lcd_pos(1,8);
				send_byte(ind0,1);
				_delay_ms(300);
			}
			else if (rx_buf[i] == 'T')
			{
				//MT Общее время воспроизведения
				
				long dec = CharToInt(rx_buf[3]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[4]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[5]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[6]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[7]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[8]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[9]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[10]);
				_delay_us(1);
				
				CharToDec(dec);
				_delay_us(1);
				Time(dec);
				
				lcd_pos(0,7);
				send_byte(ind1,1);
				lcd_pos(0,8);
				send_byte(ind0,1);
				lcd_pos(0,9);
				send_byte(':',1);
				lcd_pos(0,10);
				send_byte(ind3,1);
				lcd_pos(0,11);
				send_byte(ind2,1);
				_delay_ms(300);
			}
			/*else if (rx_buf[i] == 'K')
			{
				//MK Время воспроизведения текущего файла
				long dec = CharToInt(rx_buf[3]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[4]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[5]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[6]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[7]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[8]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[9]);
				_delay_us(1);
				dec = dec*16 + CharToInt(rx_buf[10]);
				_delay_us(1);
				
				CharToDec(dec);
				_delay_us(1);
				Time(dec);
				
				lcd_pos(0,7);
				send_byte(ind1,1);
				lcd_pos(0,8);
				send_byte(ind0,1);
				lcd_pos(0,9);
				send_byte(':',1);
				lcd_pos(0,10);
				send_byte(ind3,1);
				lcd_pos(0,11);
				send_byte(ind2,1);
				_delay_ms(300);
			}*/
			else if (rx_buf[i] == 'F')
			{
				//MF Имя текущего файла
				lcd_pos(0,0);
				send_byte(rx_buf[4],1);
				lcd_pos(0,1);
				send_byte(rx_buf[5],1);
				lcd_pos(0,2);
				send_byte(rx_buf[6],1);
				lcd_pos(0,3);
				send_byte(rx_buf[7],1);
				lcd_pos(0,4);
				send_byte(rx_buf[8],1);
				lcd_pos(0,5);
				send_byte(rx_buf[9],1);
				_delay_ms(300);
			}
			else if (rx_buf[i] == 'P')
			{
				//MP Текущее состояние плеера
				if (rx_buf[4] == 0)
				{
					//Стоп
					LED2_R1;
					LED2_G0;
					_delay_ms(300);
				}
				if (rx_buf[4] == 1)
				{
					//Воспроизведение
					LED2_G1;
					LED2_R0;
					_delay_ms(300);
				}
				if (rx_buf[4] == 2)
				{
					//Пауза
					LED2_R1;
					LED2_G0;
					_delay_ms(300);
					LED2_G1;
					LED2_R0;
					_delay_ms(300);
				}
			}
		}
		else if (rx_buf[i] == 'Q')
		{
			i++;
			if (rx_buf[i] == 'M')
			{
				//QM Режим работы плеера
				if (rx_buf[4] == 1)
				{
					//Блютус
					lcd_pos(0,13);
					lcd_str("BLE");
					
					LED1_R1;
					LED1_G0;
					LED1_B0;
					_delay_ms(300);
				}
				if (rx_buf[4] == 2)
				{
					//USB Flash
					lcd_pos(0,13);
					lcd_str("USB");
					
					LED1_R0;
					LED1_G1;
					LED1_B0;
					_delay_ms(300);
				}
				if (rx_buf[4] == 3)
				{
					//SD Card
					lcd_pos(0,13);
					lcd_str(" SD");
					
					LED1_R0;
					LED1_G0;
					LED1_B1;
					_delay_ms(300);
				}
			}
		}
		/*
		//Команда AT+M1 запрос номера текущего файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('1');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(300);
		
		//Команда AT+M2 запрос общего колличества файлов
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('2');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(300);
		
		//Команда AT+MT запрос общего времени воспроизводимого файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('T');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(300);
		
		//Команда AT+MK запрос текущего времени воспроизводимого файла
		send_UART('A');
		send_UART('T');
		send_UART('+');
		send_UART('M');
		send_UART('K');
		send_UART(0x0D);
		send_UART(0x0A);
		_delay_ms(300);
		*/
		if (BTN_PREV)
		{
			//Команда AT+CD задаём модулю воспроизведение предыдущего трека
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('D');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(500);
		}
		if (BTN_NEXT)
		{
			//Команда AT+CC задаём модулю воспроизведение следующего трека
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('C');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(500);
		}
		if (BTN_VOL_MIN)
		{
			//Команда AT+CF задаём модулю уменьшение громкости
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('F');
			send_UART(0x0D);
			send_UART(0x0A);
			vol--;
			_delay_ms(200);
			
			//Конвертируем значение уровня звука в ASCII
			dek = vol%10;
			def = vol/10;
			ind0 = dek+48;
			dek = def%10;
			def = def/10;
			ind1 = dek+48;
			
			//Выводим на дисплей уровень звука
			lcd_pos(0,11);
			lcd_str("VOL");
			lcd_pos(0,14);
			send_byte(ind1,1);
			lcd_pos(0,15);
			send_byte(ind0,1);
		}
		if (BTN_VOL_PLS)
		{
			//Команда AT+CE задаём модулю увеличение громкости
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('E');
			send_UART(0x0D);
			send_UART(0x0A);
			vol++;
			_delay_ms(200);
			
			//Конвертируем значение уровня звука в ASCII
			dek = vol%10;
			def = vol/10;
			ind0 = dek+48;
			dek = def%10;
			def = def/10;
			ind1 = dek+48;
			
			//Выводим на дисплей уровень звука
			lcd_pos(0,11);
			lcd_str("VOL");
			lcd_pos(0,14);
			send_byte(ind1,1);
			lcd_pos(0,15);
			send_byte(ind0,1);
		}
		if (BTN_MODE)
		{
			if (mode == 3)
			{
				//Команда AT+CM01 зададаём модулю режим воспроизведения с BLE
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('1');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				//Устанавливаем значение 1 в переменной mode
				mode=1;
			}
			if (mode == 2)
			{
				//Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('3');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(20);
				//Устанавливаем значение 3 в переменной mode
				mode=3;
			}
			if (mode == 1)
			{
				//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('C');
				send_UART('M');
				send_UART('0');
				send_UART('2');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(20);
				//Устанавливаем значение 2 в переменной mode
				mode=2;
			}
		}
		if (BTN_PLAY_PAUSE)
		{
			//Команда AT+CB даём модулю команду PLAY/PAUSE
			send_UART('A');
			send_UART('T');
			send_UART('+');
			send_UART('C');
			send_UART('B');
			send_UART(0x0D);
			send_UART(0x0A);
			_delay_ms(20);
		}
		if (BTN_REPEAT)
		{
			/*
			if (repeat == 2)
			{
				repeat=0;
				//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('0');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B0;
			}
			else
			{
				repeat=2;
				//Команда AT+AC02 воспроизведение в цикле
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('2');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y1;
				LED4_B0;
			}
			*/
		}
		if (BTN_RAND)
		{
			/*
			if (repeat == 3)
			{
				repeat=0;
				//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('0');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B0;
			}
			else
			{
				repeat=3;
				//Команда AT+AC03 воспроизведение в случайном порядке
				send_UART('A');
				send_UART('T');
				send_UART('+');
				send_UART('A');
				send_UART('C');
				send_UART('0');
				send_UART('3');
				send_UART(0x0D);
				send_UART(0x0A);
				_delay_ms(10);
				LED3_Y0;
				LED4_B1;
			}
			*/
		}
    }
}
Сейчас попытался поправить, но это особо не помогло. Не могу понять почему плеер не стартует? Какие ему ещё дать команды нужно? Уже попробовал всякие задержки в промежутках между командами чтобы успевали обработаться данные, но это особо и не помогло. Где искать проблему не понятно абсолютно?
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

Forsio, вы ерундой полнейшей занимаетесь. Без обид, пожалуйста, потому как прикручиваете свой микроконтроллер к еще одному микроконтроллеру, который и без вашего микроконтроллера может в принципе все требуемое делать. И без всяких там команд по uart. Вот эта вот микросхема ACxxxxxxxxxx-25A что на схеме, она в сотни раз производительнее вашей меги16. Мега здесь как собаке 5_я нога или 2_ой хвост.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Asmodey, извините конечно, но мне нужно именно управление из меги и никак иначе. Специально искал такой модуль с которым можно это всё сделать плюс к тому можно вывести на дисплей информацию и к тому же сделать более широкое управление что для меня очень важно. Так что никакая это не ерунда, а вполне хорошее дело. По итогу должен получится очень хороший плеер.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

[uquote="Forsio",url="/forum/viewtopic.php?p=4581877#p4581877"]мне нужно именно управление из меги и никак иначе[/uquote]
Хозяин-барин.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Asmodey, Ну так что знаешь может чего? Подскажешь?
Так то оно по сути понятно что этот плеер уже является самостоятельным, но мне как раз таки нужны расширенные возможности, а в данном модуле их достаточно много и всё управление идёт по UART. От компа через терминал пробовал управлять и вроде как отрабатывает вполне, но с меги пока не получается. Нужно ещё разбираться в чём проблема.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

Конкретно этот модуль (BT201) в руках не держал. Заинтересовался было пару лет назад, тоже хотел его использовать управляя им по uart от PIC микроконтроллера, потом забил.

Скорости uart интерфейса у меги установлена такая же как на компьютере?

P.S. Как вижу, в коде 9600. На компе такая же скорость была?
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Asmodey, в модуле BT201 я сразу переключил скорость на 9600 и в компе с терминала он работает с этой скоростью, но вот с мегой он как то не работает хотя я в коде у меги тоже прописал скорость 9600. Собрано как по схеме в первом сообщении. Как мне рекомендовали установить кварц на 7.3728 MHz. Не знаю насколько это правильно. Может как раз таки и в этом проблема. Потому как нет вообще никакой реакции на команды и при старте идёт цикличный перезапуск модуля.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

[uquote="Forsio",url="/forum/viewtopic.php?p=4581907#p4581907"]Потому как нет вообще никакой реакции на команды и при старте идёт цикличный перезапуск модуля.[/uquote]
Напряжение питания какое? После перезагрузки модуль что-то пишет в терминал?

Добавлено after 4 minutes 22 seconds:
Я не понял. Это ошибка на схеме или так оно и есть - вывод BT_RF на землю через конденсатор закорочен???
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Нет это когда запускаю в связке с мегой идет цикличный перезапуск, а от компа с терминала работает хорошо без проблем. Так что тут нужно искать причину либо в коде либо в схеме. Но я не знаю даже на что думать.

Добавлено after 3 minutes 40 seconds:
Нет там антенна блютус на модуле она так и есть к земле и на вывода через кондёры.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

[uquote="Forsio",url="/forum/viewtopic.php?p=4581911#p4581911"]Нет это когда запускаю в связке с мегой идет цикличный перезапуск[/uquote]
Каким напряжением и от чего питается модуль когда он работает с мегой?

[uquote="Forsio",url="/forum/viewtopic.php?p=4581911#p4581911"]Нет там антенна блютус на модуле она так и есть к земле и на вывода через кондёры.[/uquote]Понятно, на схеме сама антенна на скорую руку изображена.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Asmodey, ну мне уже говорили что это китайская подделка. Много признаков на это указывает, но работает практически так же как и оригинал. Заказал ещё пару модулей в другом месте посмотрю что придёт.
Когда запускаю с мегой питаю от 5 вольт с импульсного блока питания. Хотя когда установлю уже на место питание там будет уже другое, но тоже 5 вольт.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

Питание точно не проседает с этого импульсного? Обычно они ведут себя так (старт-перезагрузка-старт-перезагрузка) когда напряжение ниже 3,6 вольта подается. Включаются, стартуют, а через несколько секунд перезагружаются. Я имею ввиду чипы на которых построены эти BT201.
Астролябия-сама меряет, было бы что мерять!!!
Аватара пользователя
Forsio
Первый раз сказал Мяу!
Сообщения: 35
Зарегистрирован: Вс май 19, 2024 10:05:49
Откуда: Россия Кемерово
Контактная информация:

Re: BT201 последовательность комманд

Сообщение Forsio »

Asmodey, здесь с питанием точно никаких проблем проверил с двух разных импульсных блоков питания поведение одинаковое, на самих блоках питания чётко 5 вольт. Также проверял от 12 вольтового аккумулятора через 7805. Во всех случаях поведение модуля одинаковое идёт цикличный перезапуск.
Это всё таки я думаю искать нужно причину в схеме. возможно я не попадаю на те частоты с которыми работает модуль BT201 и происходит расхождение.
Аватара пользователя
Asmodey
Друг Кота
Сообщения: 6299
Зарегистрирован: Сб янв 28, 2006 22:47:24

Re: BT201 последовательность комманд

Сообщение Asmodey »

Лог. анализатором посмотреть, что там на uart интерфейсе происходит при передаче команд
Астролябия-сама меряет, было бы что мерять!!!
Ответить

Вернуться в «Разные вопросы по МК»