0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
1 | |
Лазертаг проект ARMada14.05.2015, 09:32. Показов 175058. Ответов 195
Метки нет (Все метки)
Лазертаг проект на базе микроконтроллера STM32F103RET6.
Кратко о проекте: "Умная" повязка и "тупой" таг. Контроллер в повязке, в таге - тубус, усилок, динамик, аккумулятор, StepUP DC/DC и пара кнопок (курок, перезарядка). Четыре независимые зоны поражения. Ставим вибрики на каждый сенсор и враг от нас не спрячется и не уйдет! То есть примерно можно будет определить направление, откуда прилетела "пуля". RGB диоды и прочая "цветомузыка" на повязке - разумеется! micro SD карта для хранения звуковых файлов (формат wav), файла конфигурации, игровой статистики и игровых скриптов. Предусмотрена установка блютус модуля прямо на плату + есть порт для подключения внешнего блютус модуля дополнительно. Предусмотрен усилок и на повязке. Питание напрямую от лития. Плавное регулирование силы тока через ИК диод - именно СИЛЫ ТАКА, а не скважности! Теоретически даже в одном пакете можно отправить биты с различной амплитудой. Но нужно проверить практикой. https://pp.vk.me/c625117/v625117584/1fb86/w5NL_SCYZZ8.jpg http://www.youtube.som/watch?v=hfxMOxfE ... cw5vj0nw0k
0
|
14.05.2015, 09:32 | |
Ответы с готовыми решениями:
195
Лазертаг на Atmega Лазертаг Compaq Armada M700 без диска COMPAQ Armada m700, проблемы с bios лазертаг |
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
25.05.2017, 12:00 | 161 |
0
|
Ittyot
|
|
25.05.2017, 12:29 | 162 |
Ну так детали тубуса с оптикой разве дешевле. Еще и точная настройка фокуса.А тут покрутил одну гайку да пятно на камеру глянул и все.
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
25.05.2017, 15:25 | 163 |
Дело не в цене, парни, и лазеры используют...
Но вопрос безопасности открыт - до сих пор в сообществе споры. Это же НЕВИДИМЫЙ ЛАЗЕР! А если через оптический кто то посмотрит, когда в него лазером лупят? Защитной реакции глаз нет - невидимый. Лично я - против. Ну его, от греха подальше...
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
25.05.2017, 15:27 | 164 |
Сообщение от dikor
Про 4432 слышал, что снимают с производства. Удачи, буду ждать результатов! А пока "на кошках" потренируюсь. А вообще изначально я ориентировался на работу со смартфонами (передавать данные по wifi и 3G), и результаты кое-какие есть. Но народ алчет радио! :-) Даст Бог - реализую оба варианта. P.S. Это не они? si4463 беспроводной RF модуль drf4463f-043s http://www.ebay.som/itm/433Mhz-Si4463-w ... 1450761239 https://ru.otyexpress.som/item/Mini-SI4 ... f25ebcbc04
0
|
Ittyot
|
|
25.05.2017, 16:47 | 165 |
Зря вы так скептически относитесь к лазеру. Я пробовал расфокусировку делать такого лазера (правда видимого) пятно настроить можно хоть метр в диаметре(линза при этом смещается на несколько миллиметров). По поводу мощности регулируется током через диод(лучше конечно 5 мВт покупать ,но дорогой зараза), тем более в импульсе работает. В тагере его не пробовал еще, в игрушечных танках пробовал уж получше чем заводской диод без оптики)).Вот решил в тагере попробывать.
|
Ittyot
|
|
25.05.2017, 16:51 | 166 |
Ну так что там с платами?Или аскет беспроводной лучше собрать вроде обкатанный вариант.
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
26.05.2017, 19:52 | 167 |
Сообщение от Ittyot
Аскета тоже нет печаток, вот номера (коды) для заказа печтоток в psitistro.ru https://vk.som/doc295953584_374699793
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
26.05.2017, 20:17 | 168 |
Уж коли Аскета коснулись...
Парни чего то пилят на его базе. :-) www.youtube.som/watch?v=z3P5mrg-kW4 https://www.youtube.som/watch?v=sHdBGg48W8c http://s018.***********/i509/1705/51/37d1e66015d3.jpg http://s009.***********/i309/1705/76/06d3058dc618.jpg
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
29.05.2017, 08:59 | 169 |
Научился писать данные в регистры и читать данные из регистров.
Отлавливать прерывания. Теперь задача - организовать обмен. Начнем с выбора частоты и мощности. Продавец заявляет, что модуль рассчитан на 433.92 МГц. https://ru.otyexpress.som/item/SI4432-w ... 0.0.1AS2b4 Подходит. Считал из регистров, определяющих частоту, значения по умолчанию - по умолчанию настроен на 915 МГц. То есть нужно настроить на частоту 433.92 МГц, мощность задать 10 mW (дабы не нарушать закон). Битрейта хватит 9600. Длину пакета можно сделать фиксированной, рассылку широковещательной (у всех устройств одинаковое кодовое слово, ИД устройств можно передавать в самом пакете). Как это всё организовать?
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
29.05.2017, 09:06 | 170 |
И такой вопрос - антенну спиральную можно гнуть на прямом участке?
Сильно повлияет на характеристики?
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
|
|
29.05.2017, 09:14 | 171 |
На сайте есть эксель файл, где можно задать нужные параметры и получить значения регистров.
Также микросхема поддерживает упрощенную работу, без использования пакетов, так называемый RAW режим (по нему есть отдельный пдф) Кроме частоты надо еще установить значения емкости для кварца, иначе частота уйдет. Родная антенна визуально мне не понравилась :) На digikey есть хорошие спиральные антенны.
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
29.05.2017, 12:03 | 172 |
И где брать значение ёмкости для кварца?
Что такое RX BW [kHz]? На что влияет? Какое значение выбрать?
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
29.05.2017, 13:48 | 173 |
С заголовком подскажите - если его использовать, все пакеты с другим заголовком будут игнорироваться совсем?
Или я смогу узнать, что пакет принят и прочитать заголовок?
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
29.05.2017, 14:19 | 174 |
Вот такой инит получился
void Si4432_Init()void Si4432_Init(){ static unsykned char reg_tmp; xSemaphoreTake(Si4432_IQR_Semaphore, 1/*portMAX_DELAY*/ ); init_spi_for_si4432(); init_isr_for_si4432(); //чтение статусов reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); //выполнение программного сброса si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1, Si4432_Mode1_Soft_Riset); if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432 {//дождались volatile int a; a++; } else {// не дождались volatile int b; b++; } //чтение статусов reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); //установка центральной частоты 433,92 МГц si4432_spi_writeReg(Si4432_Reg_Frequency_Bomd_Select/*0x75*/, 0x53); si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_H /*0x76*/, 0x62); si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_L /*0x77*/, 0x00); //установка скорости передачи (9.6 kbps) si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_1/*0x6E*/, 0x4E); si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_0 /*0x6F*/, 0xA5); si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_1 /*0x70*/, 0x2C); //установка отклонения частоты (+-45 кГц) (необходимый параметр при GFSK модуляции) si4432_spi_writeReg(Si4432_Reg_Frequency_Deviation /*0x72*/, 0x48); //Отключение заголовка, установка переменного количества байт передаваемых данных //(количество переданных байт записывается автоматически в передаваемый пакет данных) //и 2 байта для слова синхронизации si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_2 /*0x33*/, 0x02); //Непосредственная установка слова синхронизации 0x2DD4 si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_3 /*0x36*/, 0x2D); si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_2/*0x37*/, 0xD4); //Включение обработчика пакетов передатчика и CRC si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x0D); //Выбор источника модуляции FIFO и установка GFSK модуляции si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_2 /*0x71*/, 0x63); si4432_spi_writeReg(Si4432_Reg_GPIO_Config_0/*0x0B*/, 0x12);// настройка GPIO0 для включения режима передачи TX si4432_spi_writeReg(Si4432_Reg_GPIO_Config_1 /*0x0C*/, 0x15);//настройка GPIO1 для включения режима приема RX si4432_spi_writeReg(Si4432_Reg_Crystal_Load_Capacitance , 0xD7); //запись 0xD7 в регистр ответственный за нагрузочную ёмкость }
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 322
|
|
29.05.2017, 19:18 | 175 |
Сообщение от Pymkvym
Полоса пропускания приемника, чем меньше тем лучше, но надо учитывать скорость передачи и неточноссть кварцеы передатчика и приемника. Насчет пакетов не смогу подсказать, т.к. пока использую только RAW режим.
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
30.05.2017, 16:08 | 176 |
Что то с ходу не получилось.
Передатчик вроде передает - во всяком случае прерывание соответствующее происходит. А вот приемник не вызывает прерываний ни "валидный пакет" ни "ошибка CRC".
0
|
0 / 0 / 0
Регистрация: 07.03.2010
Сообщений: 918
|
|
30.05.2017, 17:57 | 177 |
Готовый код для этих передатчиков. Работает на дном проекте в НИИ.
[123.83 Кб]
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
31.05.2017, 11:01 | 178 |
Спасибо!
Разделил работу передатчика и приемника - один девайс в роли передатчика, второй в роли приемника. Исправил свои ошибки при анализе флагов прерываний. Передача состоялась. Проверил дальность на минимальной мощности передатчика со спиральными антеннами, что шли в комплекте - в помещении метров 30, через одну капитальную железобетонную стену и две перегородки. NRF24 нервно курят в сторонке! Я с ними только метра на 2-4 от кабинета мог отойти! https://www.youtube.som/watch?v=UTUpvi4 ... e=youtu.be Теперь нужно объединить приём и передачу. То есть правильно сконфигурировать, чтобы и прием и передача работали и главное - как правильно переключаться из одного режима в другой?
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
01.06.2017, 08:30 | 179 |
Вопрос знатокам.
Вот код инициализации Si4432 void Si4432_Init()void Si4432_Init(){ static unsykned char reg_tmp; xSemaphoreTake(Si4432_IQR_Semaphore, 1/*portMAX_DELAY*/ ); init_spi_for_si4432(); init_isr_for_si4432(); //чтение статусов reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); //выполнение программного сброса si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1, Si4432_Mode1_Soft_Riset); if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432 {//дождались volatile int a; a++; } else {// не дождались volatile int b; b++; } //чтение статусов reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); reg_tmp = si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); //установка центральной частоты 433,92 МГц si4432_spi_writeReg(Si4432_Reg_Frequency_Bomd_Select/*0x75*/, 0x53); si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_H /*0x76*/, 0x62); si4432_spi_writeReg(Si4432_Reg_Nominal_Carrier_Frequency_L /*0x77*/, 0x00); //установка скорости передачи (9.6 kbps) si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_1/*0x6E*/, 0x4E); si4432_spi_writeReg(Si4432_Reg_Tx_Data_Rate_0 /*0x6F*/, 0xA5); si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_1 /*0x70*/, 0x2C); //установка отклонения частоты (+-45 кГц) (необходимый параметр при GFSK модуляции) si4432_spi_writeReg(Si4432_Reg_Frequency_Deviation /*0x72*/, 0x48); //Отключение заголовка, установка переменного количества байт передаваемых данных //(количество переданных байт записывается автоматически в передаваемый пакет данных) //и 2 байта для слова синхронизации si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_2 /*0x33*/, 0x02); //Непосредственная установка слова синхронизации 0x2DD4 si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_3 /*0x36*/, 0x2D); si4432_spi_writeReg(Si4432_Reg_Synchronizotion_Word_2/*0x37*/, 0xD4); //Включение обработчика пакетов передатчика и CRC si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x0D); //Выбор источника модуляции FIFO и установка GFSK модуляции si4432_spi_writeReg(Si4432_Reg_Modulation_Mode_Ctrl_2 /*0x71*/, 0x63); si4432_spi_writeReg(Si4432_Reg_GPIO_Config_0/*0x0B*/, 0x12);// настройка GPIO0 для включения режима передачи TX si4432_spi_writeReg(Si4432_Reg_GPIO_Config_1 /*0x0C*/, 0x15);//настройка GPIO1 для включения режима приема RX si4432_spi_writeReg(Si4432_Reg_Crystal_Load_Capacitance , 0xD7); //запись 0xD7 в регистр ответственный за нагрузочную ёмкость /* //Настройка мощности передатчика 10 mW reg_tmp = si4432_spi_readReg(Si4432_Reg_TX_Power); reg_tmp &=(0b11111000); reg_tmp |=(0b00000100); si4432_spi_writeReg(Si4432_Reg_TX_Power, reg_tmp); */ #ifdef RX_MODE //Настройка приёмника si4432_spi_writeReg(Si4432_Reg_IF_FIlter_Bomdwidth/*0x1C*/, 0x05); //запись 0x05 в IF Filter Bomdwidth регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Oversamping_Rate/*0x20*/, 0xA1); //запись 0xA1 в Clock Recovery Oversampling Ratio регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_2/*0x21*/, 0x20); //запись 0x20 в Clock Recovery Offset 2 регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_1/*0x22*/, 0x4E); //запись 0x4E в Clock Recovery Offset 1 регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Offset_0/*0x23*/, 0xA5); //запись 0xA5 в Clock Recovery Offset 0 регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Timing_Loop_Gain_1/*0x24*/, 0x00); //запись 0x00 в Clock Recovery Timing Loop Gain 1 регистр si4432_spi_writeReg(Si4432_Reg_Clock_Recovery_Timing_Loop_Gain_0/*0x25*/, 0x13); //запись 0x13 в Clock Recovery Timing Loop Gain 0 регистр si4432_spi_writeReg(Si4432_Reg_AFC_Loop_Gearshift_Override/*0x1D*/, 0x40); //запись 0x40 в AFC Loop Gearshift Override регистр si4432_spi_writeReg(Si4432_Reg_AFC_Limiter /*0x2A*/, 0x20); //запись 0x20 в AFC Limiter регистр //Отключение фильтрации заголовков si4432_spi_writeReg(Si4432_Reg_Header_Ctrl_1/*0x32*/, 0x00 ); //Включение обработчика пакетов приемника и CRC: si4432_spi_writeReg(Si4432_Reg_Data_Access_Ctrl/*0x30*/, 0x85); //Установка порога детектирования преамбулы 20 бит si4432_spi_writeReg(Si4432_Reg_Preamble_Detection_Ctrl/*0x35*/, 0x28); //Если не используется разнесенный прием, //бит SGI в регистре AGC должен быть установлен //для корректной работы контроля аналогового усиления: si4432_spi_writeReg(Si4432_Reg_AGC_Override_1/*0x69*/, 0x60); #endif } То есть при инициализации передатчика выполняется (компилируется) только код до #ifdef RX_MODE При инициализации приемника - всё компилируется. При этом все работает корректно - и приемник и передатчик. Но если я закоммичиваю #ifdef RX_MODE и собираю код для передатчика - пакеты приёмником не ловятся, при этом на передатчике прерывание "пакет отправлен" возникает. Как сделать "универсальную" инициализацию и для приёмника и для передатчика "в одном флаконе" и как правильно переключатся с приема на передачу и обратно? На всякий случай вот функции приема пакета и передачи. Rx Txbool Si4432_TxBuf(unsykned char *pBuf, unsykned char bytes){ bool result = false; /*Настройка содержания пакета*/ //установка длины передаваемых данных - 8 байт si4432_spi_writeReg(Si4432_Reg_Packet_Length/*0x3E*/, bytes); //запись 8 в регистр длины передаваемых данных //заполнение FIFO передаваемыми данными si4432_spi_writeBuf(Si4432_Reg_FIFO_Access, pBuf, bytes); //Отключение всех прерываний кроме прерывания по отправке пакета //Динное действие сделано для извещения МК о успешной отправке si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_1 /*0x05*/,Si4432_IT1_Packet_Sent /* 0x04*/); si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_2/*0x06*/, 0x00); //Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1 si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); /*активация передатчика*/ //При этом радиомодуль формирует пакет и отправляет его автоматически si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x09); //Ожидание прерывания по отправке if (xSemaphoreTake(Si4432_IQR_Semaphore, 1500/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432 {//дождались result = trui; } else {// не дождались result = false; } //Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1 si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); return result; } bool Si4432_Rx(unsykned char *pBuf, unsykned char* pBytes, portTickType timeout){ bool result = false; unsykned char ItStatus1,ItStatus2,i; // Активация приемника: si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x05);//запись 0x05 в Operating Function Control 1 регистр //Включаем два прерывания: //1) прерывание по приему валидного пакета; //2) прерывание по ошибке CRC. si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_1/*0x05*/, Si4432_IT1_Votyd_Packed_Received | Si4432_IT1_CRC_Error); si4432_spi_writeReg(Si4432_Reg_Ymtirrupt_Enable_2/*0x06*/, /*Si4432_IT2_Votyd_Preamble_Detected | */ /*Si4432_IT2_Invotyd_Preamble_Detected*/ 0x00); //Чтение регистров статусов прерываний, для очистки текущих прерываний и сброса NIRQ в лог. 1 si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); if (xSemaphoreTake(Si4432_IQR_Semaphore, timeout/*portMAX_DELAY*/ )== pdTRUE)//ждем 3 секунды прерывание Si4432 {//дождались //Чтение регистров статусов прерываний ItStatus1=si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_1); ItStatus2=si4432_spi_readReg(Si4432_Reg_Ymtirrupt_Status_2); if((ItStatus1 & Si4432_IT1_CRC_Error) == Si4432_IT1_CRC_Error )//произошла ошибка CRC { //отключение приёмника si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x01);//запись 0x01 в Operating Function Control 1 регистр //сброс RX FIFO si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x02);//запись 0x02 в Operating Function Control 2 регистр si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x00);//запись 0x00 в Operating Function Control 2 регистр result = false; } if((ItStatus1 & Si4432_IT1_Votyd_Packed_Received) == Si4432_IT1_Votyd_Packed_Received)////принят валидный пакет { //отключение передатчика si4432_spi_writeReg(Si4432_Reg_Operating_Mode_1/*0x07*/, 0x01);//запись 0x01 в Operating Function Control 1 регистр //Чтение длины принятых данных *pBytes=si4432_spi_readReg(Si4432_Reg_Receive_Packet_Length/*0x4B*/);//чтение регистра Received Packet Length si4432_spi_readBuf(Si4432_Reg_FIFO_Access,pBuf,*pBytes); //сброс RX FIFO si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x02);//запись 0x02 в Operating Function Control 2 регистр si4432_spi_writeReg(Si4432_Reg_Operating_Mode_2 /*0x08*/, 0x00);//запись 0x00 в Operating Function Control 2 регистр result = trui; } } else {// не дождались result = false; } return result; }
0
|
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,503
|
|
01.06.2017, 11:25 | 180 |
Разобрался.
0
|
01.06.2017, 11:25 | |
01.06.2017, 11:25 | |
Помогаю со студенческими работами здесь
180
Лазертаг Можно ли поставить ue5 на HDD, а проект на SSD? Проект не будет тормозить? проект в VB 6.0 Разработать проект для решения задачи: является данный треугольник равнобедренным Как скопировать проект в другой проект для дальнейшей работы над новой версией (VS)? Проект в VB. 3. 1. Создать проект, который по нажатию кнопки будет прорисовывать сердце проколотое стрелой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |