Автоматическое нажатие F1 через определенное время при запуске сервера.
Иногда случаются ситуации когда необходимо нажимать кнопку F1 , причин может быть много, НО не идти же каждый раз к серверу(компьютеру), а если он в другом городе? — поэтому это устройство призвано автоматизировать процесс.
В данном варианте реализовано только нажатие F1, но при желании можно дополнить алгоритм любыми комбинациями. Исходник написан на CodeVisionAVR с использованием встроенной библиотеки USB Atmega32U4. В качестве макета была использована плата Leonardo Pro micro. Дополнительной возможностью повесил четыре кнопки, на которые назначены операторы в си, но при желании можно запрограммировать другие словосочетания.
Джампер JP1 переключает задержку нажатия F1 — 30 секунд или 60.
#include <mega32u4.h> #include <delay.h> // USB Device functions #include <usb_device.h> // USB Human Interface Device functions #include <usb_hid.h> // USB initialization #include "usb_init.h" #define KEY_EN PINF.6 #define KEY_BK PINF.7 #define KEY_CP PINF.4 #define KEY_PS PINF.5 #define JP_TM PIND.1 unsigned int tik=0; unsigned int tim=0; void pr() { if(tik<tim) { tik++; if(tik==tim-1) { usb_keyboard_keypress(KS_F1,0); PORTB.0=1; PORTD.5=1; } } delay_ms(100); if(KEY_CP==0) { delay_ms(100); while(!KEY_CP){;}; usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_F,0); } if(KEY_PS==0) { delay_ms(100); while(!KEY_PS){;}; usb_keyboard_keypress(KS_V,0); usb_keyboard_keypress(KS_O,0); usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_D,0); } if(KEY_BK==0) { delay_ms(100); while(!KEY_BK){;}; usb_keyboard_keypress(KS_W,0); usb_keyboard_keypress(KS_H,0); usb_keyboard_keypress(KS_I,0); usb_keyboard_keypress(KS_L,0); usb_keyboard_keypress(KS_E,0); } if(KEY_EN==0) { delay_ms(100); while(!KEY_EN){;}; usb_keyboard_keypress(KS_F,0); usb_keyboard_keypress(KS_O,0); usb_keyboard_keypress(KS_R,0); } } void main(void) { // Crystal Oscillator division factor: 1 #pragma optsize- CLKPR=(1<<CLKPCE); CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0); #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif // Input/Output Ports initialization // Port B initialization DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (1<<DDB0); PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Port C initialization // Function: Bit7=In Bit6=In DDRC=(0<<DDC7) | (0<<DDC6); PORTC=(0<<PORTC7) | (0<<PORTC6); // Port D initialization DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0); PORTD=(0<<PORTD7) | (0<<PORTD6) | (1<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (1<<PORTD1) | (0<<PORTD0); // Port E initialization // Function: Bit6=In Bit2=In DDRE=(0<<DDE6) | (0<<DDE2); PORTE=(0<<PORTE6) | (0<<PORTE2); // Port F initialization DDRF=(0<<DDF7) | (0<<DDF6) | (0<<DDF5) | (0<<DDF4) | (0<<DDF1) | (0<<DDF0); PORTF=(1<<PORTF7) | (1<<PORTF6) | (1<<PORTF5) | (1<<PORTF4) | (0<<PORTF1) | (0<<PORTF0); // USB Controller initialization in device mode // Note: This function also initializes the PLL usb_init_device(&usb_config); // Global enable interrupts #asm("sei") // Wait for the USB device to be enumerated by the host while (!usb_enumerated); // Wait 1.5 seconds for the operating system to // load any drivers needed by the USB device delay_ms(1500); if(JP_TM==0) { tim = 600; //60 }else{ tim = 300; } //30 while (1) { pr(); } }
Удачных экспериментов!!!