www.open-tager.ru
http://www.open-tager.ru/forum/

LTArmada
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=3776
Страница 108 из 109

Автор:  Pingvin [ 20 апр 2018, 07:29 ]
Заголовок сообщения:  Re: LTArmada

Протокол обмена по блютус между "мостом" и софтиной простой до безобразия.
Протокол текстовый.
r0AFF21D4......F0\r
i0AFF21D4......F0\r
r - значит данный получены/нужно отправить по радиоканалу
i - по ИК каналу
0AFF21D4......F0 - данные в шестнадцатеричном виде.

\r - это служебный символ возврата каретки - "Enter" на клавиатуре.

Пока полностью работает обмен только по радиоканалу.
За ИК просто ещё не брался, ничего там сложного нет.
Единственное - количество передаваемых бит может быть не кратно 8, то есть нужно будет указать - сколько бит передать нужно.

Автор:  Pingvin [ 04 май 2018, 09:15 ]
Заголовок сообщения:  Re: LTArmada

"Матрешка" теперь универсальная - и с "Аскетом" может работать, и с "АРМадой" без смены прошивки.
https://www.youtube.com/watch?time_cont ... RLN4_1Ghfw

Автор:  Pingvin [ 19 май 2018, 07:47 ]
Заголовок сообщения:  Re: LTArmada

Немного "ужал" плату. Теперь АРМада помещается в рукоять Носорога.

Вложения:
ARMadaAndRHINO800x600.JPG
ARMadaAndRHINO800x600.JPG [ 130.7 KiB | Просмотров: 15515 ]

Автор:  Pingvin [ 22 май 2018, 08:34 ]
Заголовок сообщения:  Re: LTArmada

Почти готово.

Вложения:
IMG_8087_800x600.JPG
IMG_8087_800x600.JPG [ 134.15 KiB | Просмотров: 15487 ]
IMG_8088_800x600.JPG
IMG_8088_800x600.JPG [ 167.27 KiB | Просмотров: 15487 ]
IMG_8089_800x600.JPG
IMG_8089_800x600.JPG [ 135.38 KiB | Просмотров: 15487 ]

Автор:  Pingvin [ 22 май 2018, 12:53 ]
Заголовок сообщения:  Re: LTArmada

Rhino case and ARMada inside.

https://www.youtube.com/watch?v=-BoHT1J3Mvs

Чем не "народный" корпус?
При партии от 50 штук цена 800 р.
Скинулись кому надо и ...

Автор:  Pingvin [ 07 авг 2018, 18:01 ]
Заголовок сообщения:  Re: LTArmada

Грызу плюсы понемногу - какая няшка! :)

Например, описываем класс - пин
Код:

#ifndef _PIN_H
#define _PIN_H
#include <stdint.h>

        constexpr static uint8_t PORTA = 0;
   constexpr static uint8_t PORTB = 1;
   constexpr static uint8_t PORTC = 2;
   constexpr static uint8_t PORTD = 3;
   constexpr static uint8_t notAPort = 0xFF;


        constexpr static uint8_t PIN0 = 0;
   constexpr static uint8_t PIN1 = 1;
   constexpr static uint8_t PIN2 = 2;
   constexpr static uint8_t PIN3 = 3;
        constexpr static uint8_t PIN4 = 4;
   constexpr static uint8_t PIN5 = 5;
   constexpr static uint8_t PIN6 = 6;
   constexpr static uint8_t PIN7 = 7;



   constexpr static uint8_t notAPin = 0xFF;




class Pin{

public:
Pin(uint8_t port, uint8_t pin);

void switchToOutput();
void set();
void reset();

private:
uint8_t m_port;
uint8_t m_pin;

protected:




};





Код:


Pin::Pin(uint8_t port, uint8_t pin){
m_port=port;
m_pin=pin;

// Enable GPIO Peripheral clock
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA << (port), ENABLE);


}



void Pin::switchToOutput(){
GPIO_InitTypeDef GPIO_InitStructure;

  // Configure pin in output push/pull mode
  GPIO_InitStructure.GPIO_Pin = (1 << m_pin);//BLINK_PIN_MASK(BLINK_PIN_NUMBER);
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))), &GPIO_InitStructure);

}


void Pin::set(){
GPIO_SetBits(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))),
        (1 << m_pin));
}

void Pin::reset(){
GPIO_ResetBits(((GPIO_TypeDef *)(GPIOA_BASE + (GPIOB_BASE-GPIOA_BASE)*(m_port))),
        (1 << m_pin));

}





Теперь можем делать так
Pin myPin(PORTB,PIN1);
myPin.switchToOutput();
myPin.set();
myPin.reset();


А теперь - новый класс Led наследник Pin

Код:

class Led: public Pin{

public:
Led(uint8_t port, uint8_t pin): Pin(port,pin){switchToOutput();};
void on(){set();};
void off(){reset();};

};



Теперь так можно

Led myLed(PORTB,PIN1);
myLed.on();
myLed.off();

Смешные, конечно, "открытия" для монстров вроде Alexies. :-)

Автор:  Pacifist [ 08 авг 2018, 00:33 ]
Заголовок сообщения:  Re: LTArmada

Боюсь даже представить какой восторг у Вас вызовет перегрузка операторов :)
Одумайтесь, одумайтесь, товарищ Pingvin, прежде чем, понимаете, увидеть С++ без санкции соответствующих органов!
Так и в Ардуинство недолго скатиться...

Автор:  Pingvin [ 08 авг 2018, 05:58 ]
Заголовок сообщения:  Re: LTArmada

Будет и переопределение операторов, будут и виртуальные функции.
Виртуальные буду использовать для работы с экранчиками.
Они же у меня двух типов, так чтобы в основном коде каждый раз не уточнять (при помощи #ifdef), функцию из какого драйвера вызвать - буду использовать виртуальные функции.
В основном коде будет только что то типа
COLOR_LCD *LCD = new COLOR_LCD();//если цветной
или
BLACK_LCD *LCD = new BLACK_LCD();//если черно-белый
приводим указатель на экранчик к указателю на базовый класс
пусть базовый класс называется LCD_BASE
тогда
LCD_BASE* Screen = LCD;
и далее просто используем виртуальные функции базового класса, во время выполнения автоматически будут вызываться нужные функции - или для черно-белого экрана, или для цветного.

Screen->print(0,0,"Hello!");
Screen->clear();

и т.д.
И наконец то избавлюсь от этих жутких #ifdef-ов.
Надеюсь - ничего не напутал (ещё буду уточнять).


Ардуинство - тот же самый C++, только все "кишки" (описания классов, шаблоны) спрятаны во всевозможные библиотеки.
С Ардуиной проблема в том, что пользователю ничего в "кишочках" поправить не дают.
У нас же все будет доступно (если захотим). ;)

Код должен быть удобочитаем и самодокументированный.
Так что ничего плохого в Ардуино-style коде я не вижу. :)
И я понимаю, что это был сарказм. :)

Автор:  Pingvin [ 08 авг 2018, 16:23 ]
Заголовок сообщения:  Re: LTArmada

Немного доработал класс Pin.
Теперь можно включать внешние прерывания.
Например
Код:
Pin BtStatePin(PORTC,PIN7);
BtStatePin.enableExti(true);
BtStatePin.setCallback(testCallback);

активирует внешние прерывания на ножке и при наступлении таковых вызовет функцию testCallback()
Функцию можно переназначить на любую другую (типа void f(void)) - то есть без возвращаемого значения и аргументов.
Или отключить
BtStatePin.setCallback(0);
Функция будет работать в контексте прерывания.

Автор:  DiBor [ 24 сен 2018, 00:22 ]
Заголовок сообщения:  Re: LTArmada

Кстати такой модуль еще никто не юзал? Заявленая дальность 10км. https://ru.aliexpress.com/item/Ra-01-Lo ... 53009619b7
Изображение

Страница 108 из 109 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/