@TheBigBear

Как максимально просто реализовать запуск программы на компьютере по нажатию механической кнопки?

Здравствуйте!
Необходимо реализовать следующую задачу
При нажатии кнопки (или с помощью реле сигнализации) необходимо на компьютере под Windows запустить батник на исполнение. Как максимально просто (недорого) можно такое реализовать? Или в какую сторону копать?
Сейчас сделал так: Нашел древнюю IP камеру в DI входом к которому прицепил кнопку. При замыкании DI камера отсылает письмо. На компе есть правило что если приходит письмо с определенного ящика - запустить батник
Но есть недостатки:
Долгий таймаут.
Несработка при отсутствии интернета или сбое почтового сервера
И да, технически кнопка и компьютер находятся рядом
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
@lonelymyp
Живу
есть педальки https://aliexpress.ru/item/4000030684962.html можно оттуда отковырять если по дизайну не подходит
прикидывается клавиатурой и можно назначить комбинацию станадартным способом типа Ctrl+alt+кнопка, на запуск твоей программы.
вроде раньше большие красные кнопки продавались, но так с ходу не нашёл

Ещё есть миниклавиатуры на 4 кнопки)) https://aliexpress.ru/item/1005003197937476.html
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
hint000
@hint000
у админа три руки
https://www.google.com/search?q=big+button+usb&tbm=isch

А ещё можно взять клавиатуру с доп.кнопками, подпаять проводки к контактам, например, кнопки e-mail, присоединить большую кнопку и в настройках Windows назначить желаемую программу вместо почтового клиента. И никакого программирования. :)
CiCYi.jpg
Ответ написан
gbg
@gbg Куратор тега Электроника
Любые ответы на любые вопросы
Компорт или конвертер USB-UART, соединить через реле CTS c землей.

При срабатывании реле, состояние CTS изменится. Считать можно следующим кодом на C++

DWORD dwModemStatus; 
BOOL fCTS = 0; 

if (!SetCommMask(hSerialIn, EV_CTS)) 
{ 
    DWORD err = GetLastError(); 
    printf("\nHandle creation error code: %x\n", err); 
} 

DWORD dwCommEvent; 

while(1) 
{ 
    if (!WaitCommEvent(hSerialIn, &dwCommEvent, NULL)) // An error occurred waiting for the event. 
        printf(""); 
    else 
    { 
        if (!GetCommModemStatus(hSerialIn, &dwModemStatus)) // Error in GetCommModemStatus; 
            return; 
        fCTS = MS_CTS_ON & dwModemStatus; 

        if(fCTS) 
            printf("%x ", fCTS); 
    }  
}


Скопировано отсюда
Ответ написан
Организационно это решается так - на ПК должен быть драйвер, который управляет каким-либо устройством, или в данном случае смотрит состояние устройства и выполняет то, что ему задано алгоритмом. Но вполне можно для низких скоростей обойтись любой прикладной программой, и слушать любой низкоскоростной порт - COM, LPT. Например, как подсказали, слушать состояние какого-то сигнала на COM порту, и делать действия нужные. Кроме кнопки, нужно по-хорошему сделать устройство сопряжения между кнопкой собственно и ПК. Например, к ПК будет COM порт смотреть или LPT, а устройство будет внутри по нажатию кнопки переключать триггер, а возвращать его состояние либо по таймауту (допустим, 0,3...0,5с, да хоть 10 секунд), либо по сигналу с ПК (драйвер или программа на ПК посмотрела что состояние сигнала изменилось, сделала что нужно, и послала на другой вывод свой сигнал).
spoiler
В древние времена (в начале 2000х) делал на коленках через LPT порт и программку на QBASIC небольшую управление через датчик освещённости (да обычный фоторезистор), свет в комнате включился - выполняет одни действия, выключился - другие. Ничего сложного особо. На выход тоже делал через LPT управление громкостью звука на через самодельный цифровой регулятор громкости, подключенный к LPT опять же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы