Цитата:
Сообщение от AVK74
Два три дня повтыкать в мануалы ...Несложно...
|
Ну да, ну да. Ну да ладно.
PHP код:
#include <avr/wdt.h>
int pwr_off_delay = 40;
int pwr_cnt=0;
int acc_delay = 5;
boolean led_trigger = false;
boolean online = false;
void _led_off()
{
PORTC &= B11011111;
}
void _led_on()
{
PORTC |= B00100000;
}
void _blink(int val, long sp)
{
for (int i=0; i<val; i++)
{
_led_on();
delay(sp);
_led_off();
delay(sp);
}
}
void _pwr_on()
{
if (online) return;
PORTD |= B00000100;
online = true;
delay(1000);
wdt_reset();
delay(1000);
_pwr_btn();
_led_on();
}
void _pwr_off()
{
PORTD &= B11111011;
_led_off();
}
void _pwr_btn()
{
PORTB |= B00001000;
delay(500);
PORTB &= B11110111;
}
void _pwr()
{
pwr_cnt++;
led_trigger != led_trigger;
if (led_trigger) _led_on(); else _led_off();
if (pwr_cnt>=pwr_off_delay)
{
_pwr_off();
online = false;
}
}
void setup() {
DDRC |= B00100000;
DDRB |= B00001000;
DDRD |= B00000100;
PORTC |= B00000000;
_blink(3, 500);
_blink(3, 100);
delay(1500);
wdt_enable(WDTO_2S);
}
boolean _chk_acc_off()
{
if (!(PINC & (1 << PC2)))
{
for (int i=0; i<acc_delay; i++)
{
delay(1000);
wdt_reset();
}
if (!(PINC & (1 << PC2)))
{
return true;
}
else return false;
}
else return false;
}
boolean _chk_acc()
{
if (PINC & (1 << PC2))
{
for (int i=0; i<acc_delay; i++)
{
delay(1000);
wdt_reset();
}
if (PINC & (1 << PC2))
{
return true;
}
else return false;
}
else return false;
}
void loop()
{
wdt_reset();
if (!online)
{
if (_chk_acc())
{
_pwr_on();
}
}
else
{
if (_chk_acc_off())
{
_pwr_btn();
for (int i=0; i<pwr_off_delay; i++)
{
delay(1000);
wdt_reset();
led_trigger = !led_trigger;
if (led_trigger) _led_on(); else _led_off();
}
_pwr_off();
online = false;
}
}
}
Код собирался Arduino IDE 022