Библиотека kakmyc_btn.h

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Приветствую всех!

Пользуюсь уже где-то год примерно данной библиотекой. В основном использовал одинарный клик и долгое удержание (долгое удержание самая востребованная для меня).

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

Хочу выразить пользователю данного форума под ником kakmyc ОГРОМНОЕ человеческое спасибо за его библиотеку!!! Выручила и не раз. Спасибо от чистого сердца! Здоровья и благополучия!!!

ЗЫ: Всем кто хочет высказаться какой я "ламер и не смог написать свою библиотеку" хочу сказать - Какого фига Вы компилятор используете? Пишите сразу в машинных кодах.. ))

Dumper
Offline
Зарегистрирован: 21.09.2020

Где взять?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Прошу прощения, ссылка вот: https://github.com/kakmyc-github/kakmyc_btn

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Польщён.
Писалось с упором на простоту пользования и минимальные требования.
Корректировалось с помощью местных умельцев (4 байта вроде выкружили на экземпляр).
Пользуйтесь на здоровье

Green
Offline
Зарегистрирован: 01.10.2015

А если ещё ^T научиться использовать, цены бы не было). Боюсь даже предположить что там с проводами.)

NikShel
Offline
Зарегистрирован: 21.01.2018

подписался

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

ЗЫ: Всем кто хочет высказаться какой я "ламер и не смог написать свою библиотеку" хочу сказать - Какого фига Вы компилятор используете? Пишите сразу в машинных кодах.. ))

ничего не имею против Кактуса, он себя давно показал грамотным программистом.

А вот ваш, BOOM, агрессивный пафос против самостоятельного написания кода - больше подходит для форума гайвера. Это там считается благом обложить новичков библиотеками на каждый чих, вместо того чтоб позволить участникам самим набивать шишки в попытках разобраться в сути простейших конструкций языка. И еще там не принято критиковать эти "удобные и эффективные" библиотеки , даже если все знают. что в них куча ляпов.

У нас же, как мне кажется, традиции иные. Мы любим решать проблемы сами. И бронзовых авторитетов тут нет. Код любого "зубра" форума, даже Дедсимена, Дракулы или Евгения - будет разобран и, если того заслуживает, обосран :) без всякого снисхождения. И мне эта особенность очень нравится. :)

Вовращаясь к теме ветки - я не сомневаюсь. что Кактус может написать хорошую библиотеку - но остаюсь при мнении. что библиотеку кнопок каждый новичок должен написать сам.

ЗЫ в код не заглядывал

Kakmyc
Offline
Зарегистрирован: 15.01.2018

b707 пишет:

Вовращаясь к теме ветки - я не сомневаюсь. что Кактус может написать хорошую библиотеку - но остаюсь при мнении. что библиотеку кнопок каждый новичок должен написать сам.

ЗЫ в код не заглядывал

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

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Вот, кстати, возник вопрос: на Arduino Nano 328P хочется задействовать пины A6 и A7 под кнопки (на сколько знаю они чисто аналоговые и чисто на вход (INPUT)). Как в этом случае использовать библиотеку? Точнее - что в ней нужно поменять?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

А вот ваш, BOOM, агрессивный пафос против самостоятельного написания кода....

У нас же, как мне кажется, традиции иные. Мы любим решать проблемы сами. И бронзовых авторитетов тут нет.

Ну это, как говорится, кому что - кому "шашечки", а кому "ехать". Какой смысл изобретать велосипед в очередной раз? Я лучше потрачу это время на написание действительно нужного мне кода.

И никого в "бронзовые авторитеты" я не выделял, а просто поблагодарил по человечески.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ничего не менял, просто отформатировал для лучшей читабельности.

kakmyc_btn.cpp

#include "Arduino.h"
#include "kakmyc_btn.h"
#define _bounce_time 50
#define _long_press 1500
#define _wait_multiclick 300

//функции класса Btn(обработчик кнопок)
byte kakmyc_btn :: read () { 
  uint16_t _millis = millis ();
  !_state ? button = digitalRead ( _pin ) : button = !digitalRead ( _pin );     // в зависимости от того, что в конструкторе настраиваем кнопку
	if ( !button ) { 															// если кнопка отпущена, выдаем результат 0
		num = 0;
	}
	if ( button && !pressFlag ) { 												// если кнопка нажата и флаг опущен
		pressTime = _millis - start_press;										// считаем время нажатия кнопки
		if ( pressTime >= _long_press ) {										// если длительность нажатия больше 1,5 сек
			pressFlag = 1;														// поднимаем флаг
			num = 255;															// значение кнопки long
			pressTime = 0;														// сбрасываем длительность нажатия
		}		
	}
	if ( !button ) {															// если кнопка отпущена
 		start_press = _millis;													// сбрасываем время нажатия
		pressFlag = 0;															// опускаем флаг
	}

	if ( !button && !pressFlag ) {												// если кнопка и флаг отпущены
		if ( pressTime > _bounce_time && pressTime < _long_press ) {			// а время нажатия больше 50мс, но меньше 1,5сек
			press_one++;														// увеличиваем счетчик количества нажатий
 			if ( press_one > _val ) {
			 	press_one=_val;													// ограничиваем значение счетчика
			 }
 			pressTime = 0;														// сбрасываем длительность нажатия
 		double_press = _millis;													// запускаем таймер ожидания следующего нажатия
    	}
	}
	if ( press_one ) {															// если было короткое нажатие
		if ( _millis - double_press >= _wait_multiclick ) {						// ждем 0,3сек
			pressTime = 0;														// сбрасываем длительность нажатия
			num=press_one;														// значение кнопки приравниваем к количеству нажатий
			press_one = 0;														// сбрасываем количество нажатий
  		}
	}
	_num = num;																	// для одиночного вывода результата, используем временную переменную
	num = 0;																	// обнуляем основную переменную значения кнопки
	return _num;																// возвращаем значение кнопки
}
/*
   функция конструктора класса
   в конструкторе указываем:
     номер пина
     тип сигнала (лог0/лог1)
     максимальное количество отслеживаемых кликов
*/

kakmyc_btn :: kakmyc_btn ( byte pin, byte state, byte val ) {
	_pin = pin;																	// передаем внутренней переменной номер пина
    //!state ? _state = 2 : _state=0;											// в зависимости от выбранного типа сигнала меняем значение переменной
	_state = state;
	_val = val;																	// передаем внутренней переменной количество кликов
 	pinMode ( pin, _state );													// конфигурируем пин согласно типа сигнала
}

kakmyc_btn.h

/* 

myBtn_constructor.h by kakmyc 2019©
Library for processing signal from button 
Types of signal: once/double/multiple/long 

*/


#ifndef kakmyc_btn_h
#define kakmyc_btn_h
#include <Arduino.h>

class kakmyc_btn {                                      // создадим класс кнопок
    public:                                             // общие функции и переменные
        kakmyc_btn ( byte pin, byte state, byte val);   // конструктор класса
        byte read ( );                                  // функция обработчика нажатий
    private:                                            // личные переменные и функции класса
        byte _pin, _state, _val;                        // локальные переменные обьекта номер пина / тип сигнала / количество кликов
        uint16_t _millis;
        uint16_t start_press;                           // переменная времени нажатия кнопки
        uint16_t pressTime;                             // переменная длительности нажатия кнопки
        uint16_t double_press;                          // переменная времени между нажатиями
        boolean pressFlag;                              // переменная флага нажатия
        byte press_one;                                 // переменная количества нажатий
        byte num, _num, button;                         // переменные состояния / временного состояния / нажатия кнопки
};

#endif

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Код выше представлен, начну предполагать что нужно изменить для работы еще и с аналоговыми входами, если кроме меня никому это не интересно (вот когда можно и "изобретать", так как готового не имеется)..

Конструктор. Если честно просто не знаю - можно ли его перегрузить? Если можно, то однозначно его нужно перегрузить, чтобы правильно организовалась работа в основном методе.

Основной метод класса (read () ). Нужно каким-то образом переопределить (по моему мнению) только вот эту строку:

 !_state ? button = digitalRead ( _pin ) : button = !digitalRead ( _pin ); 

Сейчас не дома. Постараюсь чуть позже свои мысли в код превратить, если доберусь опять до ПК (а вот проверять, скорее всего, завтра смогу или послезавтра).

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

Конструктор. Если честно просто не знаю - можно ли его перегрузить? Если можно, то однозначно его нужно перегрузить, чтобы правильно организовалась работа в основном методе.

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

Цитата:
Основной метод класса (read () ). Нужно каким-то образом переопределить (по моему мнению) только вот эту строку:

для этого достаточно добавить обычный if, что-то типа такого в псевдокоде

если (пин == А6 или пин == А7) прочитать сигнал как аналоговый

иначе - вставить дефолтную строчку Кактуса

 !_state ? button = digitalRead ( _pin ) : button = !digitalRead ( _pin ); 

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Оно у меня есть готовое и проверенное.
Осталось вспомнить где

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Нашел, на счёт версии не уверен.

Но с шилдом 1602keyshield работало.

Написано до советов местных гуру, поэтому памяти кушает больше.

Нужно изменить тип данных переменных времени на uint16_t для экономии памяти

 

boolean BTN[5];
byte leftBtnState,rightBtnState,upBtnState,downBtnState,selectBtnState;


class analog_btn{
public:
    analog_btn(byte btn_num,byte multiclick);   
    byte read();
private:
 byte _state,_val;
 uint32_t start_press;
 uint32_t pressTime;
 uint32_t double_press;
 boolean pressFlag;
 byte press_one;
 byte num,_num,btn_num; 
};
    

byte analog_btn::read(){
    _state=BTN[btn_num];
	if(!_state){num=0;}
	if(_state&&!pressFlag)
	{pressTime=millis()-start_press;
		if(pressTime>=1500){
			pressFlag=1;
num=255;
pressTime=0;
		}		}
	if(!_state){
 start_press=millis();
pressFlag=0;
}

	if(!_state&&!pressFlag){
		if(pressTime>50&&pressTime<1500)
		{press_one++;
 if(press_one>_val)press_one=_val;
 pressTime=0;
 double_press=millis();
    }}
if(press_one){
if(millis()-double_press>=300){
pressTime=0;
num=press_one;
press_one=0;
  }}
_num=num;
num=0;
	return _num;
}

analog_btn::analog_btn(byte btn_num,byte multiclick)
{
btn_num=btn_num;
_val=multiclick;
    }

analog_btn LEFT_btn(0,2);
analog_btn RIGHT_btn(1,2);
 analog_btn UP_btn(2,2);   
       analog_btn DOWN_btn(3,2);
analog_btn SELECT_btn(4,2);
void check_btns(){
    for(int i=0;i<5;i++)BTN[i]=0;
    int btn=analogRead(0);
    if(btn<60){BTN[0]=1;}
    else if(btn<200){BTN[1]=1;}
    else if(btn<400){BTN[2]=1;}
    else if(btn<600){BTN[3]=1;}
    else if(btn<800){BTN[4]=1;}
}

void setup(){
        Serial.begin(9600) ;   
        }
            
void loop(){
check_btns();
leftBtnState=LEFT_btn.read();
rightBtnState=RIGHT_btn.read();
upBtnState=UP_btn.read();
downBtnState=DOWN_btn.read();
selectBtnState=SELECT_btn.read();    
    if(leftBtnState)Serial.println(leftBtnState);
        }

 

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:
Оно у меня есть готовое и проверенное. Осталось вспомнить где

это ты выложил класс для подключения  набора аналоговых кнопок

насколько я понял вопрос, BOOM хочет совсем другое - использовать А6 А7 просто как цифровые

Хотя в принципе да, если мы используем аналоговые входы - неразумно подключать туда всего по одной кнопке, лучше подключить несколько и освободить цифровые пины. (это я пишу для BOOM, если что)

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ну никто же не мешает вписать туда А6 и А7.

Или подключить к этим пинам 5-10кнопок.

 

А так да, невнимательно видимо прочитал, что надо.

Голова другим занята.

Столкнулся с теми же проблемами , что и ДедаСёма.

Как класс отсутствуют в продаже операционники двухканальные к157уд2. А у меня в станке на приводе их аж две штуки, одна точно дохлая, по второй не уверен.

Сижу вот мастырю аналог из lm358.

Кусок текстолита с разводкой под dip14 , а на нем lm'ка распаяна под нужные выводы.

Чем мы хуже китайцев то :-)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ну почему же ТОЛЬКО? Это даже очень хорошее решения для "увеличения количества кнопок"))

Конструктор перегружать действительно бессмысленно. Достаточно добавить один параметр конструктору и еще один элемент в класс типа bool для определения типа подключенного пина (аналог или цифра). Тогда и определять что за пин не нужно будет. Даже и не знаю, по памяти скорее всего мой вариант будет кушать больше варианта b707 ?..

Я периодически забегаю к ПК (обои клеим блин во второй комнате у детей :), пока бабка моя с внуками у нас дома). Уже что-то разбили, надеюсь сильно что вазу )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kakmyc пишет:

Столкнулся с теми же проблемами , что и ДедаСёма.

Как класс отсутствуют в продаже операционники двухканальные к157уд2. А у меня в станке на приводе их аж две штуки, одна точно дохлая, по второй не уверен.

Сижу вот мастырю аналог из lm358.

Лучшая замена ей - NE5532, LM358 по скорости нарастания не проходит, низкочастотная она

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Имхо, использование "аналоговых кнопок" зло по своей сути. Я лучше какую нить mcp23017 засуну или регистр сдвиговый чем их.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

DetSimen пишет:

Лучшая замена ей - NE5532, LM358 по скорости нарастания не проходит, низкочастотная она

Да мне тиристором рулить 100Гц частота.
Вполне сгодится

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Да, на 100Гц вполне сгодится, только фронты растянет. но, если тиристору пофиг, то можно

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Блин, я думал я один такой

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

Конструктор перегружать действительно бессмысленно. Достаточно добавить один параметр конструктору и еще один элемент в класс типа bool для определения типа подключенного пина (аналог или цифра).

зачем это все? какие-то параметры в конструктор. лишние переменные в класс...

у вас же есть номер пина, по нему делаете один единственный if

 

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Да

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

Блин, я думал я один такой

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Привод ЭПУ-2-1. Там один симистор скоростью управляет, но сразу обеими полуволнами. Работает в паре с мостом выпрямительным. Один ОУ отвечает за генерацию пилы и нульорган, а второй за обратную связь по току и задание. Обратная связь вроде отрабатывает, а вот нуль орган помер.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну, это ты еще Вегу МП-122с не чинил.  Вот где ведро счастья-то. :)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Alexey_Rem пишет:

Блин, я думал я один такой

Не понятно только в чем?))

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Как буду дома, гляну УД, но у меня 140е точно есть (какие именно не помню, они в другом корпусе) если что напишу в эту тему. 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

140ых у меня на работе "полведра", только они по распиновке не подходят.

Кстати, поздравьте идиота.
В очередной раз забыл изображение отзеркалить при печати рисунка.
Заметил как обычно, после травления.
Час времени улетел в никуда.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ЛУТ? Я давно фоторезистом пользуюсь, чуть сложнее процесс, но качество и 100% результат этот минус перекрывают. Плату примерно за час готовлю (включая чернение шаблона гелевой ручкой), и это у меня старое хлорное железо. Заказал персульфат, пробовал года два назад, по незнанию раствор вылил после первого травления (а зря). 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Уточнить по аналоговым входам еще хочу, поправьте если не правильно понял.

1. Я правлю только сам метод (read () ), в конструктор не лезу (мне тут только, если возможно, разъясните - INPUT или INPUT_PULLUP на аналоговый вход не влияет что в конструкторе используется, так?)

2. Для правильной работы аналоговых входов нужно на самой схеме подтянуть пин к +5В через резистор (например, 10кОм) и коммутация должна происходить на GND, так?

И так, сам не проверял. Я использую всегда кнопки с коммутацией на GND, в библиотеке (как я понимаю) с цифровыми пинами можно и на +5В организовывать коммутацию, верно?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Я использую самый доступный и самый агрессивный раствор. Перекись+лимонная кислота+соль.
15минут и готово. Все реактивы в наличии(аптечка+кухня) в крайнем случае в 5минутной доступности(магазин+аптека).

Если кнопка аналоговая там все зависит от схемы подключения и метода опроса.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

А печатку то ЛУТ делаешь?

Не понял, что такое "аналоговая кнопка"....

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

2. Для правильной работы аналоговых входов нужно на самой схеме подтянуть пин к +5В через резистор (например, 10кОм) и коммутация должна происходить на GND, так?

поскольку подтягивать вы будете сами - можете и наоборот - подтянуть к GND , замыкать на +5в. Не забудьте только библиотеке об этом сообщить - у Кактуса в конструкторе есть отдельный параметр для настройки

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

В конструкторе речь идёт изначально о цифровых входах, не о аналоговых, я по Вашему вопросы задаю от того что читать не умею или все же в прочтённом чтобы разобраться? Перестаньте уже себя вести так высокомерно в разделе «песочница». Я никогда не претендовал на какие-либо «награды форума arduino.ru» (и мне они ни к чему), есть вопрос - можно ответить на него, можно направить на правильный ответ, можно просто промолчать, а вы просто ср#те в сообщениях (простите за мой «французский»). Ни от кого более на этом форуме, чем от вас (b707) я не видел столько подобного по сути флуда. (

nik182
Offline
Зарегистрирован: 04.05.2015

Извините, но чисто аналоговые входы А6 А7 есть только у 328-го в квадратном корпусе - наны например. Надо ли про них так много думать? В свете развития в сторону esp stm и прочее? 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

То есть в dip корпусе у 328й нет пинов (аналогов ардуино а6 и а7)?

b707
Offline
Зарегистрирован: 26.05.2017

BOOM пишет:

В конструкторе речь идёт изначально о цифровых входах, не о аналоговых, я по Вашему вопросы задаю от того что читать не умею или все же в прочтённом чтобы разобраться? Перестаньте уже себя вести так высокомерно в разделе «песочница». Я никогда не претендовал на какие-либо «награды форума arduino.ru» (и мне они ни к чему), есть вопрос - можно ответить на него, можно направить на правильный ответ, можно просто промолчать, а вы просто ср#те в сообщениях (простите за мой «французский»). Ни от кого более на этом форуме, чем от вас (b707) я не видел столько подобного по сути флуда. (

простите, с чего вдруг такой взрыв негодования? Где я вам что неправильно написал? Смотрите внимательно код Кактуса - в его библиотеке можно настроить работу с кнопками как с подтяжкой к +5в и замыканием на GND, так и наоборот. За это отвечает параметр state в конструкторе.

а какие используются входы - цифровые или аналоговые - в данном случае значения не имеет.

 

PS во репутация что делает... уж и отвечаешь совсем без глума - а все равно во всех грехах обвинят :) BOOM, читайте внимательнее код, я вообще не имею привычки намеренно путать собеседника, даже когда глумлюсь над ним. А в данном случае я даже не глумился.

 

nik182
Offline
Зарегистрирован: 04.05.2015

Открой распиновку УНЫ и : Ты всё поймёшь, ты всё увидишь сам (С) Ах, водевиль, водевиль...

b707
Offline
Зарегистрирован: 26.05.2017

ну что, BOOM, может извинишься?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

ну что, BOOM, может извинишься?

 А за што, сопсно?  Чел просто поблагодарил за удачную биб-ку.  Я думаю, не надо всех в агрессивной манере принуждать писать биб-ки самому, кому-то это дано, а кто-то еще на пути к вершинам. 

b707
Offline
Зарегистрирован: 26.05.2017

Деда, причем тут мое принуждение к написанию библиотек? :) 

Мы с ним уже после этого вполне конструктивно обсуждали добавление к коду  пинов А6 и А7. Я ему все обьясняю честно, без сарказма или глума - в ответ получаю выпад #36 - абсолютно немотивированный и необоснованный

Впрочем, я не обидчивый...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

с людями надо помягше. :) 

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

с людями надо помягше. :) 

и поменьше...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Да.  

Нам вот с котом на них вапще пофиг. :) 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

ну что, BOOM, может извинишься?

b707 пишет:

Впрочем, я не обидчивый...

Да я тоже не обидчивый.

Ты пойми, тут далеко не ВУЗ (или школа, или шарага, а форум (да, со своими странными правилами, но форум)), взрослый мужик ведь и должен уже "мух от котлет отделять".

Благодарен за предоставленный "материал" всем участникам. nik182 благодарен за "свежий взгляд", так как до А6 и А7 на нано никогда дело не доходило ранее и даже не обращал внимание на то, что они отсутствуют в 328P DIP корпусе. Просто делал на нано макет, потом HEX заливал в Atmega328P в DIP и радовался поделке.)) Просто зрение уже не то, чтобы smd паять так легко. Но могу, и даже буду пробовать! Не стар - пока не умер!

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Глянул что у меня есть из "раритета", вот такое:

Транзисторы: ГТ 806В, П605, П701А, микросхемы разные140'е и 553'е, К514ИД2, КМ551УД2А, К155ТВ1 (унч 553 много). А вот 157УД2 не нашел ((( Может и есть где, но в гараже в завалах - пока найду уже все починишь ))

ЗЫ1: вот такоей раритет еще есть:

ЗЫ2: Если кому надо - пишите.

 

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Уже готовы замены 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Красиво. Я в былые времена к122ун1 из кт315 делал. Давно это было, и далеко не так изящно)))