• Как сделать маштабирование относительно центра экрана?

    SladkayaDoza
    @SladkayaDoza Автор вопроса
    Обучаюсь программированию
    придумал способ как завести маштабирование на процентах, на фото визуально показано
    662586ae0b978909391186.jpeg
    Код визуализация прекрасно работает, весь код написан для проекта FlipTheCat (https://github.com/SladkayaDoza/FlipTheCat) и полностью доступен для повторения, это устройство на подобии FlipperZero но пока только для работы с радиосигналами.
    Измененный код:
    void viewer(String j) { // Ряжанка с яблоком, Злагода
      bool displayUpdate = 1;
      float cof = 100; // Коэффициент масштабирования
      int centerX = 64; // Координата X центра экрана
      float flyx = 1; // Смещение по X
      JsonDocument rawSignal1;
      readJsonFromFile(objectDoc[j]["RawData"].as<const char*>(), rawSignal1);
      int size = rawSignal1["RAW"].as<JsonArray>().size();
      JsonArray arr = rawSignal1["RAW"].as<JsonArray>();
    
      uint32_t allTime = 0;  // Подсчет всего времени сигнала
      for (int i = 0; i < size; i++) {
        allTime += abs(arr[i].as<int>());
      }
    
      while (1) {
        static uint8_t pointer = 0;
        tk();
        if (displayUpdate != 0) {
          displayUpdate = 0;
          oled.clear();
          oled.home();
          drawSignal(cof, rawSignal1["RAW"].as<JsonArray>(), size, flyx, centerX, allTime);  // Отрисовка сигнала
          oled.update();
        }
    
        // Управление масштабированием
        if (up.click() or up.step()) {
          cof = constrain(cof -= cof/10, 0, 100);
          displayUpdate = 1;
        }
        if (down.click() or down.step()) {
          cof = constrain(cof += cof/10, 0, 100);
          displayUpdate = 1;
        }
    
        // Управление перемещением по X
        if (left.click() or left.step()) {
          flyx = constrain(flyx -= cof/20, 0, 100);
          displayUpdate = 1;
        }
        if (right.click() or right.step()) {
          flyx = constrain(flyx += cof/20, 0, 100);
          displayUpdate = 1;
        }
    
        // Кнопка "Назад"
        if (back.click()) return;
      }
    }
    
    void drawSignal(float cof, JsonArray arr, int size, float flyx, int centerX, uint32_t allTime) {
    
      uint32_t percent = allTime * (cof/100);  // Определение зоны для отображения
      uint32_t sdvig = (allTime - percent) * (flyx/100);  // Перемещение зоны в доступной области
      uint8_t y = 16;  // Установка высокого уровня по умолчанию
      int curx = 0;
    
      // Вывод параметров отладки
      oled.setCursor(0, 0);
      oled.print(allTime);  // Длительность всего сигнала
      oled.print("  ");
      oled.print(percent);  // длительность помещаемая на екране
      oled.print("  ");
      oled.print(sdvig);  // Пропущеное время до отрисовки
      
      // отрисовка сигнала
      for (int i = 0; i < size; i++) {
        y = 48;  // Параметр уровня сигнала низкий
        if (arr[i] > 0) y = 16;  // Изменяем параметр сигнала если он высокий
    
        if (curx + abs(arr[i].as<int>()) > sdvig && curx < sdvig + percent) {
          oled.fastLineH(y, map(curx - sdvig, 0, percent, 0, 127), map(curx + abs(arr[i].as<int>()) - sdvig, 0, percent, 0, 127));  // рисование горизонтальной линии (отображение уровня сигнала (y = 16 -> высокий, y = 48 -> низкий))
          oled.fastLineV(map(curx + abs(arr[i].as<int>()) - sdvig, 0, percent, 0, 127), 16, 48);  // Удобное для глаз отделение высокого сигнала от низкого
        }
        curx += abs(arr[i].as<int>());  // Добавляем растояние уже пройденного сигнала
      }
    }
    Ответ написан
    Комментировать
  • Можно ли по websocket соединению отправлять запрос через определенный интервал?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Если вы собираетесь писать чат, то желательно все производить через сервер.
    Пример смотрите ниже:
    users = []
    
    async def send(ws, message):
        await ws.send(json.dumps(message))
    
    async def handler(websocket, _):
        #Вызывается при присоединении пользователя
        user = websocket
        users.append(user)
    
        # Ожидает сообщения от клиента
        try:
            async for message in websocket:
                # Возврат сообщения
                await send(user, {"type": "pong"})
        except:
            pass
    
    if __name__ == '__main__':
        print("Sent!")
        if config.SSL_KEY:
            ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
            ssl_context.load_cert_chain(config.SSL_CHAIN, config.SSL_KEY)
            start_server = websockets.serve(handler, config.IP, config.PORT, ssl=ssl_context)
        else:
            start_server = websockets.serve(handler, config.IP, config.PORT)
        asndf = asyncio.get_event_loop()
        asndf.run_until_complete(start_server)
        asyncio.get_event_loop().run_forever()

    Это не создает дополнительной нагрузки на сервер
    Ответ написан
  • Как убрать пробел в строке print в Питон?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    name = input("Как вас зовут? ")
    print(f'Привет, {name}!')
    Ответ написан
    Комментировать
  • Вирус Wrui, поможет ли переустановка Windows?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Удалите все подозрительные файлы(желательно через консоль восстановления системы) программу, которая заражена, если возможно - загрузитесь с безопасного режима и почистите все основательно, так же поищите информацию о декодировании, ещё, попробуйте такие антивирусы как: Malwerbytes или Eset nod32. Желаю Удачи!
    И всегда помните: Переустановка Windows - Не единственный способ решить проблему!
    Ответ написан
  • Виндовс на флешке?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Не советую использовать старые, или медленные флешки, для Windows To Go, Сам пробовал, установка заняла 9 часов, а запустить Windows с флешки даже не удалось, скорее всего можно, но я прождал 12 часов и так и не дождался..
    Ответ написан
  • Как сделать так, чтобы бот телеграм не прекращал работу после ошибки?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Используй - try:
    Это - попытка выполнить код, если при попытке будет ошибка это - не остановит весь код, а просто пропустит, но при ошибке можно выполнить другой код, через except:
    Или-же вывести Ошибку в консоль - except Exception as a: print(a)
    Ответ написан
    Комментировать
  • Как задать цвет Embed командой, чтобы он принимал в hex?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Вы можете зменить Hex на Dex

    k = color.replace('#','')
    col = int(k , 16)


    И тогда уже использовать его

    emb = discord.Embed(description = text, color=col)
    Ответ написан
    Комментировать
  • Как создать сеть по wi-fi?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    если вы имеете ввиду именно создать сеть, то в Windows имеется функция: "Мобильный хот-спот"
    606948886bb64659574526.jpeg
    Ответ написан
    Комментировать
  • Программа для вырезания кусков из видео?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Любая программа для этого подходит, даже в стандартном приложении "Кино и ТВ" в Windows есть такая функция,
    есть очень быстрая программа XMedia Recode, но она не для всех понятная. Movavi Video Editor проще всего использовать ее (но она платная). Онлайн конвертеры к примеру: online video cutter, существует очень большое количество различных программ))
    Ответ написан
  • Где можно создать gif анимацию набора текста?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    зачастую, все подобные Gif анимации создаются в фоторедакторах покадрово, а потом конвертируются))
    Ответ написан
    Комментировать
  • Проблема с cogs, переделал код и не могу понять в чём проблема?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    если я не ошибаюсь проблема из-за отступов а именно после @commands.command(aliases = ["pin"]) не нужно делать отступ.
    пример кода:
    @commands.command(aliases = ["pin"])
    @commands.cooldown(1, 60, commands.BucketType.user)
    async def ping(self, ctx):
      await ctx.channel.purge(limit = 1)
      emb = discord.Embed (title = 'Пинг: {0} ms'.format(client.latency * 1000), colour = discord.Color.gold())
      await ctx.send(embed = emb,delete_after=30)
    Ответ написан
  • Discord.py как сделать бота что бы я мог отправлять сообщения в определённый канал?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Хей, отправлять сообщение в определённый канал, это-же просто))
    и конечно-же нужно читать документацию))
    пример кода:
    @Client.event
    async def on_ready():
        while True:
            try:
                channel = await Client.fetch_channel(input("id Канала: "))
                await channel.send(content=input("Ваше сообщение: ")
            except Exception:
                print("Не хватает прав")
    Ответ написан
    Комментировать
  • Discord.py личные сообщения по id?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Не правильно написан код, читайте документацию discord.py
    Ссылка: https://discordpy.readthedocs.io/en/latest/api.html

    код который сможет функционировать:
    async def test(ctx, *, user_id: int):
        user = await Client.fetch_user(user_id=user_id)
        await user.send('test')
    Ответ написан
    Комментировать
  • Можно ли перевести растр в вектор?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    можно сделать все вручную, с использованием Adobe Illustrator
    Ответ написан
    2 комментария
  • Как сделать несколько Bot.event on_message?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    нужно теснить всё в один "on_message"
    Ответ написан
    Комментировать
  • Как сделать команду help?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    @Client.command()
    async def help(ctx):
        emb1 = discord.Embed(title="Информация о командах", color=random.randint(1, 16777216))
        emb1.add_field(name = f"`{PREFIX}help` : ", value="Вызовет это меню", inline=False)
        message = await ctx.send(embed = emb1)


    Если вам нужно выводить текст просто сообщением то:

    @Client.command()
    async def help(ctx):
        await ctx.send(f"ваш текст")  #перенос строки осуществляется добавлением: \n без кнопки Enter!
    Ответ написан
    2 комментария
  • Как получить информацию о пользователе discord py?

    SladkayaDoza
    @SladkayaDoza
    Обучаюсь программированию
    Вы можете использовать данный код:

    @Client.command()
    async def info(ctx,member:discord.Member = None, guild: discord.Guild = None):
        await ctx.message.delete()
        if member == None:
            emb = discord.Embed(title="Информация о пользователе", color=ctx.message.author.color)
            emb.add_field(name="Имя:", value=ctx.message.author.display_name,inline=False)
            emb.add_field(name="Айди пользователя:", value=ctx.message.author.id,inline=False)
            t = ctx.message.author.status
            if t == discord.Status.online:
                d = " В сети"
    
            t = ctx.message.author.status
            if t == discord.Status.offline:
                d = "⚪ Не в сети"
    
            t = ctx.message.author.status
            if t == discord.Status.idle:
                d = " Не активен"
    
            t = ctx.message.author.status
            if t == discord.Status.dnd:
                d = " Не беспокоить"
    
            emb.add_field(name="Активность:", value=d,inline=False)
            emb.add_field(name="Статус:", value=ctx.message.author.activity,inline=False)
            emb.add_field(name="Роль на сервере:", value=f"{ctx.message.author.top_role.mention}",inline=False)
            emb.add_field(name="Акаунт был создан:", value=ctx.message.author.created_at.strftime("%a, %#d %B %Y, %I:%M %p UTC"),inline=False)
            emb.set_thumbnail(url=ctx.message.author.avatar_url)
            await ctx.send(embed = emb)
        else:
            emb = discord.Embed(title="Информация о пользователе", color=member.color)
            emb.add_field(name="Имя:", value=member.display_name,inline=False)
            emb.add_field(name="Айди пользователя:", value=member.id,inline=False)
            t = member.status
            if t == discord.Status.online:
                d = " В сети"
    
            t = member.status
            if t == discord.Status.offline:
                d = "⚪ Не в сети"
    
            t = member.status
            if t == discord.Status.idle:
                d = " Не активен"
    
            t = member.status
            if t == discord.Status.dnd:
                d = " Не беспокоить"
            emb.add_field(name="Активность:", value=d,inline=False)
            emb.add_field(name="Статус:", value=member.activity,inline=False)
            emb.add_field(name="Роль на сервере:", value=f"{member.top_role.mention}",inline=False)
            emb.add_field(name="Акаунт был создан:", value=member.created_at.strftime("%a, %#d %B %Y, %I:%M %p UTC"),inline=False)
            await ctx.send(embed = emb)


    Он отображает все параметры о пользователе, которые вам нужно!
    Ответ написан
    5 комментариев