BT201 последовательность комманд
- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
Asmodey, По крайней мере у меня только так получается. Вне цикла с массива информацию не вытянуть. В своё время я долго с этим мучался. По итогу решил отказаться от массива и сделать несколько переменных.
- Реклама
Re: BT201 последовательность комманд
Что ж, тогда увы. Рискну посоветовать выбрать другое хобби (о профессии в данном случае речи и быть не может). Например, только паять-пилить-крутить, а программировать просить программистов.
- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
Martian, Так что же всё таки по поводу приёма данных. Вот мне главное с этим разобраться. Потому как это очень нужно.
А программировать никто не будет не от кого не дождёшься. Я итак уже два месяца ждал чтоб кто нибудь взялся за написание прошивки к этому модулю, но по итогу пришлось делать всё самому. Да и всё равно программировать по не многу нужно. Потому как в наше время это очень облегчает схемы. А с электроники я всё равно не уйду по крайней мере пока ближайшие несколько лет.
Это хорошо ещё было как то договорился один раз радиоприёмник мне на 8 меге написали. Я только сказал что мне конкретно нужно было и всё, но с этим модулем никто не хочет работать и писать прошивку под него.
А программировать никто не будет не от кого не дождёшься. Я итак уже два месяца ждал чтоб кто нибудь взялся за написание прошивки к этому модулю, но по итогу пришлось делать всё самому. Да и всё равно программировать по не многу нужно. Потому как в наше время это очень облегчает схемы. А с электроники я всё равно не уйду по крайней мере пока ближайшие несколько лет.
Это хорошо ещё было как то договорился один раз радиоприёмник мне на 8 меге написали. Я только сказал что мне конкретно нужно было и всё, но с этим модулем никто не хочет работать и писать прошивку под него.
Re: BT201 последовательность комманд
Ну, я не могу ответить по приёму данных. Посмотрел лишь частный случай, из последних сообщений. Не вижу всей картины. Ща посмотрю.
Добавлено after 56 minutes 16 seconds:
Немного подправил. Код стал в два раза меньше. Вряд ли заработает сразу. Посмотрите. Оптимизируйте как это я сделал, там, где я не сделал. Обратите внимание, что многие места одинаковы, а значит, можно вынести в функцию. Заставьте это снова работать, как было до оптимизации. И обязательно разберитесь с _delay, мне сложно поверить, что они нужны, например, здесь:
Добавлено after 1 hour 10 minutes 15 seconds:
Зачем здесь dec_chl? зачем CharToDec() возвращает результат, если ни где потом он не используется, функция вызывается трижды просто CharToDec(dec);?
Нужны ли dek и def глобально? Сомневаюсь.
далее:
сравните с этим вариантом:
Ок, оптимизировали, но смотрим дальше, теперь код такой:
И снова возникает вопрос: если нигде больше эти значения первых двух элементов массива не используются, то разве не лучше сделать так:
Можно ли ещё оптимизировать? Конечно!
Ещё:
Наверняка можно так (не зная алгоритма, невозможно сказать точно, могут ли быть ещё состояния):
Видите разницу? Я ухудшил читаемость, расположив несколько операторов на одной строке, но мой вариант всё равно читается значительно лучше!
Так что, приводите код в порядок. Берите книжку по Си, здесь в "Сундуке" их куча, и причёсывайте. С нормальным кодом помочь с алгоритмом желающих будет намного больше, но скорее всего, вопрос сам собой отпадёт: Вы сами увидите, что необходимо сделать.
И изучите структуры. Хранить громкость, режим, имя трека, его длительность и т.д. в них намного удобнее и проще. Такой код:
превратился бы в
Добавлено after 56 minutes 16 seconds:
Немного подправил. Код стал в два раза меньше. Вряд ли заработает сразу. Посмотрите. Оптимизируйте как это я сделал, там, где я не сделал. Обратите внимание, что многие места одинаковы, а значит, можно вынести в функцию. Заставьте это снова работать, как было до оптимизации. И обязательно разберитесь с _delay, мне сложно поверить, что они нужны, например, здесь:
Код: Выделить всё
char i = 0;
if (rx_buf[i] == 'M')
{
i++;
if (rx_buf[i] == '1')
{
// M1 Номер текущего файла
long dec = CharToInt(rx_buf[3]);
_delay_us(1);
for (uint8_t x = 4; x < 11; x++)
{
dec = dec * 16 + CharToInt(rx_buf[x]);
_delay_us(1);
}Код: Выделить всё
char CharToDec(unsigned int s)
{
unsigned int dec_chl = 0;
dek = s % 10;
def = s / 10;
for (uint8_t i = 0; i < 8; i++)
{
ind[i] = dek + 48;
dek = def % 10;
def = def / 10;
}
return dec_chl;
}Нужны ли dek и def глобально? Сомневаюсь.
далее:
Код: Выделить всё
// Конвертируем значение уровня звука в ASCII
vol = 15;
dek = vol % 10;
def = vol / 10;
ind[0] = dek + 48;
dek = def % 10;
def = def / 10;
ind[1] = dek + 48;
Код: Выделить всё
// Конвертируем значение уровня звука в ASCII
vol = 15;
ind[0] = 5 + 48;
ind[1] = 1 + 48;
Код: Выделить всё
// Конвертируем значение уровня звука в ASCII
vol = 15;
ind[0] = 1 + 48;
ind[1] = 5 + 48;
// Выводим на дисплей уровень звука
lcd_pos(0, 11);
lcd_str("VOL");
lcd_pos(0, 14);
send_byte(ind[1], 1);
lcd_pos(0, 15);
send_byte(ind[0], 1);Код: Выделить всё
vol = 15;
// Выводим на дисплей уровень звука
lcd_pos(0, 11);
lcd_str("VOL");
lcd_pos(0, 14);
send_byte(53, 1);// вывод "5"
lcd_pos(0, 15);
send_byte(49, 1); // вывод "1"Код: Выделить всё
vol = 15;
// Выводим на дисплей уровень звука
lcd_pos(0, 11);
lcd_str("VOL 15");
Код: Выделить всё
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);
}
}Код: Выделить всё
if (rx_buf[i] == 'M') // QM Режим работы плеера
{
LED1_R0; LED1_G0; LED1_B0;
lcd_pos(0, 13);
switch (rx_buf[4])
{
case 1 :
lcd_str("BLE"); LED1_R1;
break;
case 2 :
lcd_str("USB"); LED1_G1;
break;
case 3 :
lcd_str(" SD"); LED1_B1;
break;
}
_delay_ms(300);
}Так что, приводите код в порядок. Берите книжку по Си, здесь в "Сундуке" их куча, и причёсывайте. С нормальным кодом помочь с алгоритмом желающих будет намного больше, но скорее всего, вопрос сам собой отпадёт: Вы сами увидите, что необходимо сделать.
И изучите структуры. Хранить громкость, режим, имя трека, его длительность и т.д. в них намного удобнее и проще. Такой код:
Код: Выделить всё
if (rx_buf[i] == 'Q')
{
i++;
if (rx_buf[i] == 'M') // QM Режим работы плеераКод: Выделить всё
if (Player.Mode == QM)
{ -
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: BT201 последовательность комманд
Tifaso Я тебе готовый код дал на том форуме,страница 32
И не надо врать-тебе многие помогали,но ты сам начинал-я так не хочу,я так не буду делать,у меня так не работает и т д и т п
Выше я тебе написал-убери задержки,тебе пофиг,тогда что толку советовать? Пока идёт задержка 300 мсек все пакеты летят мимо и в итоге у тебя просто будет не успевать обрабатывать
И не надо врать-тебе многие помогали,но ты сам начинал-я так не хочу,я так не буду делать,у меня так не работает и т д и т п
Выше я тебе написал-убери задержки,тебе пофиг,тогда что толку советовать? Пока идёт задержка 300 мсек все пакеты летят мимо и в итоге у тебя просто будет не успевать обрабатывать
- Реклама
Re: BT201 последовательность комманд
Novice user, можно ссылку на тот форум? а то, похоже, здесь просто бессмысленно...
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: BT201 последовательность комманд
[uquote="Martian",url="/forum/viewtopic.php?p=4583518#p4583518"]Novice user, можно ссылку на тот форум? а то, похоже, здесь просто бессмысленно...[/uquote]Судя по тому форуму, ТС там около месяца пытался получить что-то с UART и вывести потом на LCD. При помощи целой группы неравнодушных товарищей. Но так и не добился корректного результата. Сомневаюсь что и у вас получится.
Как видно - ТС совершенно не изучал программирование, не понимает его, да и не желает изучать. В этом случае от любых объяснений толку не будет никакого. Только разве что если вы Д’Артаньян и полностью весь код сами за ТС напишете.
Как видно - ТС совершенно не изучал программирование, не понимает его, да и не желает изучать. В этом случае от любых объяснений толку не будет никакого. Только разве что если вы Д’Артаньян и полностью весь код сами за ТС напишете.
Re: BT201 последовательность комманд
Novice user, jcxz, да, ясненько... Тут нужен талантливый педагог, это точно не я.
Re: BT201 последовательность комманд
Еxel-моксель... майкрософт! С 8 марта жеж... Почти 3 месяца - четверть года 
За это время какихнить Кернигана с Ритчи можно всех полностью перечитать.
За это время какихнить Кернигана с Ритчи можно всех полностью перечитать.
Астролябия-сама меряет, было бы что мерять!!!
Re: BT201 последовательность комманд
Тут, наверное, не Керниган с Ритчи нужен, а какой-то вариант Кнута для детей. После прочтения Кернигана и Ритчи у него появится более обширный инструментарий, но он будет им пользоваться всё равно абы как, не видя алгоритмов и картины в целом. Как только это исправится, начнутся возникать вопросы, как написать, и тогда пойдёт уже специфика языка
Re: BT201 последовательность комманд
К слову, почему еще никто не посоветовал топикстартеру конструктор алгоритмов? Ему, и еще тому, который радиву с фонариком, часами и двустрочным дисплеем клепает.
Астролябия-сама меряет, было бы что мерять!!!
Re: BT201 последовательность комманд
Дракона?
Re: BT201 последовательность комманд
Я пользовался (и сейчас иногда пользуюсь) простенькой и древней прожкой Flowcharts. Но, рекомендовать ее никому не могу, она реально устарела. Сам просто привык к ней. Есть масса других, более современных программ, даже в состав MS Office что-то такое входит.
Астролябия-сама меряет, было бы что мерять!!!
- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
В общем убрал я задержки в приёме данных, но пока это не помогает. Нужно всё таки ещё раз посмотреть и отладить скрипты приёма данных. Похоже ещё и в них проблема. Ну что же а вот и получившийся на данный момент код.
Спойлер
Код: Выделить всё
#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)
{
_delay_ms(2000);
//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
Send_Command("AT+CM02\r\n");
_delay_ms(100);
//Устанавливаем значение 2 в переменной mode
mode=2;
//Команда AT+CA15 задаём модулю уровень громкости на 15
Send_Command("AT+CA15\r\n");
_delay_ms(100);
//Конвертируем значение уровня звука в ASCII
vol = 15;
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
//Команда AT+AA00 останавливаем воспроизведение
Send_Command("AT+AA00\r\n");
_delay_ms(100);
//Команда AT+AA01 задаём модулю команду PLAY
Send_Command("AT+AA01\r\n");
_delay_ms(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;
}
void Send_Command(char *str)
{
for(uint8_t i = 0; i < strlen(str); i++)
{
while(!(UCSRA&(1<<UDRE)));
UDR=str[i];
}
}
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)
{
BTN_PORT = 0b11111111;
init_UART();
lcd_ini();
flags = 0;
_delay_ms(5000);
bt201_start();
while(1)
{
char i = 0;
if (rx_buf[i] == 'M')
{
i++;
if (rx_buf[i] == '1')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
//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')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
//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')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
min=0;
sec=0;
//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] == '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] == '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] == 'P')
{
//MP Текущее состояние плеера
if (rx_buf[4] == 0)
{
//Стоп
LED2_R1;
LED2_G0;
_delay_us(250);
}
if (rx_buf[4] == 1)
{
//Воспроизведение
LED2_G1;
LED2_R0;
_delay_us(250);
}
if (rx_buf[4] == 2)
{
//Пауза
LED2_R1;
LED2_G0;
_delay_us(250);
LED2_G1;
LED2_R0;
_delay_us(250);
}
}
*/
}
/*
//i = 0;
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_us(250);
}
if (rx_buf[4] == 2)
{
//USB Flash
lcd_pos(0,13);
lcd_str("USB");
LED1_R0;
LED1_G1;
LED1_B0;
_delay_us(250);
}
if (rx_buf[4] == 3)
{
//SD Card
lcd_pos(0,13);
lcd_str(" SD");
LED1_R0;
LED1_G0;
LED1_B1;
_delay_us(250);
}
}
}
*/
if (BTN_PREV)
{
//Команда AT+CD задаём модулю воспроизведение предыдущего трека
Send_Command("AT+CD\r\n");
_delay_ms(500);
}
if (BTN_NEXT)
{
//Команда AT+CC задаём модулю воспроизведение следующего трека
Send_Command("AT+CC\r\n");
_delay_ms(500);
}
if (BTN_VOL_MIN)
{
//Команда AT+CF задаём модулю уменьшение громкости
Send_Command("AT+CF\r\n");
vol--;
_delay_ms(500);
//Конвертируем значение уровня звука в ASCII
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
}
if (BTN_VOL_PLS)
{
//Команда AT+CE задаём модулю увеличение громкости
Send_Command("AT+CE\r\n");
vol++;
_delay_ms(500);
//Конвертируем значение уровня звука в ASCII
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
}
if (BTN_MODE)
{
if (mode == 3)
{
//Команда AT+CM01 зададаём модулю режим воспроизведения с BLE
Send_Command("AT+CM01\r\n");
_delay_ms(500);
//Устанавливаем значение 1 в переменной mode
mode=1;
}
else if (mode == 2)
{
//Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD
Send_Command("AT+CM03\r\n");
_delay_ms(500);
//Устанавливаем значение 3 в переменной mode
mode=3;
}
else if (mode == 1)
{
//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
Send_Command("AT+CM02\r\n");
_delay_ms(500);
//Устанавливаем значение 2 в переменной mode
mode=2;
}
}
if (BTN_PLAY_PAUSE)
{
//Команда AT+CB даём модулю команду PLAY/PAUSE
Send_Command("AT+CB\r\n");
_delay_ms(500);
}
if (BTN_REPEAT)
{
if (repeat == 2)
{
repeat=0;
//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
Send_Command("AT+AC00\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B0;
}
else
{
repeat=2;
//Команда AT+AC02 воспроизведение в цикле
Send_Command("AT+AC02\r\n");
_delay_ms(500);
LED3_Y1;
LED4_B0;
}
}
if (BTN_RAND)
{
if (repeat == 3)
{
repeat=0;
//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
Send_Command("AT+AC00\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B0;
}
else
{
repeat=3;
//Команда AT+AC03 воспроизведение в случайном порядке
Send_Command("AT+AC03\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B1;
}
}
}
}- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
Сейчас ещё раз проверил код. Этот код все пришедшие данные обрабатывает при подключении к компу через терминал. И то есть такая особенность. Берёт он в обработку только первые данные которые примет остальное же не обрабатывается. Специально подавал команды на мегу в разных порядках чтобы проверить все скрипты обработки данных и вывод на дисплей. Всё работает, но на дисплей выводит только первые данные.
Пробовал запустить в связке с модулем там данные не выводит вообще. В чём тут ещё может быть проблема пока не понятно.
Честно я уже вообще не пойму в чём тут может быть проблема? У меня только напрашивается вывод что всё таки какие то разные скорости используются и потому не успевает обработать данные с модуля. Хотя я там устанавливал скорость на 9600 как и в меге, но на что думать уже не знаю.
Либо всё таки этот китайский модуль чем то слегка отличается от других. Ведь мне уже говорили ранее и я сам понял по некоторым признакам что это у меня всего лишь китайская подделка. Однако я недавно заказал ещё два таких модуля с другого магазина. Посмотрю что там придёт. Потому как я уже в сети находил инфу что люди также мучались с неработающими функциями этого модуля и как спецы указывали что скорей всего имеем дело с подделкой.
Так что возможно с другим модулем ситуация поменяется.
Пробовал запустить в связке с модулем там данные не выводит вообще. В чём тут ещё может быть проблема пока не понятно.
Спойлер
Код: Выделить всё
#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;
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)
{
_delay_ms(2000);
//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
Send_Command("AT+CM02\r\n");
_delay_ms(100);
//Устанавливаем значение 2 в переменной mode
mode=2;
//Команда AT+CA15 задаём модулю уровень громкости на 15
Send_Command("AT+CA15\r\n");
_delay_ms(100);
//Конвертируем значение уровня звука в ASCII
vol = 15;
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
//Команда AT+AA00 останавливаем воспроизведение
Send_Command("AT+AA00\r\n");
_delay_ms(100);
//Команда AT+AA01 задаём модулю команду PLAY
Send_Command("AT+AA01\r\n");
_delay_ms(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;
}
void Send_Command(char *str)
{
for(uint8_t i = 0; i < strlen(str); i++)
{
while(!(UCSRA&(1<<UDRE)));
UDR=str[i];
}
}
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)
{
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;
}
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;
}
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)
{
BTN_PORT = 0b11111111;
init_UART();
lcd_ini();
flags = 0;
_delay_ms(5000);
bt201_start();
while(1)
{
char i = 0;
if (rx_buf[i] == 'M')
{
i++;
if (rx_buf[i] == '1')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
//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')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
//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')
{
dec=0;
def=0;
dek=0;
ind7=0;
ind6=0;
ind5=0;
ind4=0;
ind3=0;
ind2=0;
ind1=0;
ind0=0;
min=0;
sec=0;
//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] == '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] == '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] == 'P')
{
//MP Текущее состояние плеера
if (rx_buf[4] == 0)
{
//Стоп
LED2_R1;
LED2_G0;
_delay_us(250);
}
if (rx_buf[4] == 1)
{
//Воспроизведение
LED2_G1;
LED2_R0;
_delay_us(250);
}
if (rx_buf[4] == 2)
{
//Пауза
LED2_R1;
LED2_G0;
_delay_us(250);
LED2_G1;
LED2_R0;
_delay_us(250);
}
}
*/
}
/*
//i = 0;
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_us(250);
}
if (rx_buf[4] == 2)
{
//USB Flash
lcd_pos(0,13);
lcd_str("USB");
LED1_R0;
LED1_G1;
LED1_B0;
_delay_us(250);
}
if (rx_buf[4] == 3)
{
//SD Card
lcd_pos(0,13);
lcd_str(" SD");
LED1_R0;
LED1_G0;
LED1_B1;
_delay_us(250);
}
}
}
*/
if (BTN_PREV)
{
//Команда AT+CD задаём модулю воспроизведение предыдущего трека
Send_Command("AT+CD\r\n");
_delay_ms(500);
}
if (BTN_NEXT)
{
//Команда AT+CC задаём модулю воспроизведение следующего трека
Send_Command("AT+CC\r\n");
_delay_ms(500);
}
if (BTN_VOL_MIN)
{
//Команда AT+CF задаём модулю уменьшение громкости
Send_Command("AT+CF\r\n");
if (vol>0)
{
vol--;
}
_delay_ms(500);
//Конвертируем значение уровня звука в ASCII
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
}
if (BTN_VOL_PLS)
{
//Команда AT+CE задаём модулю увеличение громкости
Send_Command("AT+CE\r\n");
if (vol<30)
{
vol++;
}
_delay_ms(500);
//Конвертируем значение уровня звука в ASCII
dek = vol%10;
def = vol/10;
ind0 = dek+48;
dek = def%10;
def = def/10;
ind1 = dek+48;
//Выводим на дисплей уровень звука
lcd_pos(1,11);
lcd_str("VOL");
lcd_pos(1,14);
send_byte(ind1,1);
lcd_pos(1,15);
send_byte(ind0,1);
}
if (BTN_MODE)
{
if (mode == 3)
{
//Команда AT+CM01 зададаём модулю режим воспроизведения с BLE
Send_Command("AT+CM01\r\n");
_delay_ms(500);
//Устанавливаем значение 1 в переменной mode
mode=1;
}
else if (mode == 2)
{
//Команда AT+CM03 зададаём модулю режим воспроизведения с SD CARD
Send_Command("AT+CM03\r\n");
_delay_ms(500);
//Устанавливаем значение 3 в переменной mode
mode=3;
}
else if (mode == 1)
{
//Команда AT+CM02 зададаём модулю режим воспроизведения с USB
Send_Command("AT+CM02\r\n");
_delay_ms(500);
//Устанавливаем значение 2 в переменной mode
mode=2;
}
}
if (BTN_PLAY_PAUSE)
{
//Команда AT+CB даём модулю команду PLAY/PAUSE
Send_Command("AT+CB\r\n");
_delay_ms(500);
}
if (BTN_REPEAT)
{
if (repeat == 2)
{
repeat=0;
//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
Send_Command("AT+AC00\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B0;
}
else
{
repeat=2;
//Команда AT+AC02 воспроизведение в цикле
Send_Command("AT+AC02\r\n");
_delay_ms(500);
LED3_Y1;
LED4_B0;
}
}
if (BTN_RAND)
{
if (repeat == 3)
{
repeat=0;
//Команда AT+AC00 сбрасываем настройки воспроизведения по умолчанию
Send_Command("AT+AC00\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B0;
}
else
{
repeat=3;
//Команда AT+AC03 воспроизведение в случайном порядке
Send_Command("AT+AC03\r\n");
_delay_ms(500);
LED3_Y0;
LED4_B1;
}
}
}
}Либо всё таки этот китайский модуль чем то слегка отличается от других. Ведь мне уже говорили ранее и я сам понял по некоторым признакам что это у меня всего лишь китайская подделка. Однако я недавно заказал ещё два таких модуля с другого магазина. Посмотрю что там придёт. Потому как я уже в сети находил инфу что люди также мучались с неработающими функциями этого модуля и как спецы указывали что скорей всего имеем дело с подделкой.
Так что возможно с другим модулем ситуация поменяется.
Re: BT201 последовательность комманд
Нет смысла обсуждать модуль, если как и прежде отсутствует работа с массивом, присутствуют миллион переменных и опять куча задержек, которые максимум должны быть при инициализации дисплея, а больше нигде. Пока программа не будет выглядеть программой, все Ваши сетования на аппаратную часть можно воспринимать как жалобы мартышки на неработающие очки.
- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
Martian, от массива одни проблемы там как всегда сыпет кучу ошибок типа не правильно объявил массив или ещё какие то непонятные ошибки. Можешь хоть тогда по человечески написать как объявляются массивы. Вот с этим у меня вечная проблема и потом его нужно объявлять глобально потому как использовать приходится из разных участков программы. По другому то не сделать.
Ещё кое что это нужно после передачи данных обнулять массив. То есть очищать чтобы в дальнейшем можно было спокойно работать с ним.
Задержки используются только при старте, инициализации и на кнопках больше нигде их нет. В данных местах они обязательны, а больше нигде и не нужно.
Ещё кое что это нужно после передачи данных обнулять массив. То есть очищать чтобы в дальнейшем можно было спокойно работать с ним.
Задержки используются только при старте, инициализации и на кнопках больше нигде их нет. В данных местах они обязательны, а больше нигде и не нужно.
Re: BT201 последовательность комманд
[uquote="Forsio",url="/forum/viewtopic.php?p=4585128#p4585128"]В чём тут ещё может быть проблема пока не понятно.[/uquote]Что там непонятного? Достаточно взглянуть хотя бы на это:
[uquote="Forsio",url="/forum/viewtopic.php?p=4585128#p4585128"][/uquote]
чтобы понять, что это безобразие не может работать в принципе.
Чего вы ожидали, написав такую галиматью???
Как видно по этому "коду" - вы даже не пытались продумать как в целом должно всё работать. Также как видно опять же по этой галиматье - вы так же совершенно не освоили даже самых основ языка программирования - ни про типы переменных не поняли (и в чём их различие) ни что такое volatile и зачем он нужен, ни про циклы. И т.д. Не говоря уже о том, что совершенно не понимаете - что такое прерывания и основной цикл, как они взаимодействуют.
Добавлено after 2 minutes 22 seconds:
[uquote="Forsio",url="/forum/viewtopic.php?p=4585140#p4585140"]Вот с этим у меня вечная проблема и потом его нужно объявлять глобально потому как использовать приходится из разных участков программы. По другому то не сделать.[/uquote]Для начала вам следует взять учебник по программированию и освоить хотя бы самые основы. По другому не сделать.
Начинать нужно с самых основ. Разбирая примеры и пытаясь понять - почему сделано так, а не иначе.
Ну или идти в раздел "Предлагаю работу" и искать того, кто напишет вам программу.
[uquote="Forsio",url="/forum/viewtopic.php?p=4585128#p4585128"]
Код: Выделить всё
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)
{
BTN_PORT = 0b11111111;
init_UART();
lcd_ini();
flags = 0;
_delay_ms(5000);
bt201_start();
while(1)
{
char i = 0;
if (rx_buf[i] == 'M')
{
i++;
if (rx_buf[i] == '1')
{
...чтобы понять, что это безобразие не может работать в принципе.
Чего вы ожидали, написав такую галиматью???
Как видно по этому "коду" - вы даже не пытались продумать как в целом должно всё работать. Также как видно опять же по этой галиматье - вы так же совершенно не освоили даже самых основ языка программирования - ни про типы переменных не поняли (и в чём их различие) ни что такое volatile и зачем он нужен, ни про циклы. И т.д. Не говоря уже о том, что совершенно не понимаете - что такое прерывания и основной цикл, как они взаимодействуют.
Добавлено after 2 minutes 22 seconds:
[uquote="Forsio",url="/forum/viewtopic.php?p=4585140#p4585140"]Вот с этим у меня вечная проблема и потом его нужно объявлять глобально потому как использовать приходится из разных участков программы. По другому то не сделать.[/uquote]Для начала вам следует взять учебник по программированию и освоить хотя бы самые основы. По другому не сделать.
Начинать нужно с самых основ. Разбирая примеры и пытаясь понять - почему сделано так, а не иначе.
Ну или идти в раздел "Предлагаю работу" и искать того, кто напишет вам программу.
- Forsio
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Вс май 19, 2024 10:05:49
- Откуда: Россия Кемерово
- Контактная информация:
Re: BT201 последовательность комманд
Да в том то и дело я когда брал этот модуль. Я сразу хотел кого нибудь попросить написать мне прошивку, но подождав какое то время так никто и не отозвался и пришлось писать программу самому, но слишком здесь всё сложно, то в одном месте, то в другом проблемы.
Ещё конечно нужно учитывать и то что модули немного разные и под них нужно тоже настраивать прошивку индивидуально. Однако я всё таки думаю так нужно дождаться пока придут ко мне ещё два модуля уже в конце этой недели должны быть в пункте выдачи. Посмотрю уже всё это через терминал чтобы понять что и как и нужно будет обязательно за скринить. После чего готовить так называемое тех задание и точную схему того что я хочу получить на выходе. Дисплей кстати тоже заказал на 2004 потому как уже понял что 1602 достаточно тесный для вывода инфы с данного модуля. Да всё таки наверное попробую составить тех задание и попросить чтоб мне кто нибудь написал прошивку по всем моим запросам, но для начала нужно как следует всё рассмотреть через терминал. Чтобы увидеть какие функции как отрабатывают что выводит модуль когда начинает воспроизводить музыку.
Сам я как видно не потяну такую ношу с написанием данной прошивки. Однако я получил не мало опыта в программировании освоил работу с дисплеем и также работу UART. Надеюсь народ согласится написать код для ATMEGA16 для управления модулем.
Ещё конечно нужно учитывать и то что модули немного разные и под них нужно тоже настраивать прошивку индивидуально. Однако я всё таки думаю так нужно дождаться пока придут ко мне ещё два модуля уже в конце этой недели должны быть в пункте выдачи. Посмотрю уже всё это через терминал чтобы понять что и как и нужно будет обязательно за скринить. После чего готовить так называемое тех задание и точную схему того что я хочу получить на выходе. Дисплей кстати тоже заказал на 2004 потому как уже понял что 1602 достаточно тесный для вывода инфы с данного модуля. Да всё таки наверное попробую составить тех задание и попросить чтоб мне кто нибудь написал прошивку по всем моим запросам, но для начала нужно как следует всё рассмотреть через терминал. Чтобы увидеть какие функции как отрабатывают что выводит модуль когда начинает воспроизводить музыку.
Сам я как видно не потяну такую ношу с написанием данной прошивки. Однако я получил не мало опыта в программировании освоил работу с дисплеем и также работу UART. Надеюсь народ согласится написать код для ATMEGA16 для управления модулем.


