Кто нибудь поможет подправить код? attiny85 digispark, не выходит из сна

toren18
Offline
Зарегистрирован: 11.04.2017

Всем доброго дня! Подскажите пожалуйста что не так сделал.

Имеется диод и две кнопки + и -.

+ включает диод и увеличивет яркость, - уменьшает.

При зажатии + и - диод выключается, плата уходит в сон. После этого больше ничего не срабатывает.

Собственно вот сам скетч:

toren18
Offline
Зарегистрирован: 11.04.2017
#include <avr/sleep.h>
#include <avr/power.h>

#define pinlaser 0
#define keyplus 2 // обязательно 2 для включения
#define keyminus 3

//int sleepstatus =0;

int value=0;
void wakeupnow() {
sleep_disable();

}

void sleepnow() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode();
sleep_disable();
wakeupnow();

}


void setup() {
// put your setup code here, to run once:
pinMode (pinlaser,OUTPUT);
digitalWrite(pinlaser,LOW);

pinMode (keyplus,INPUT);
digitalWrite(keyplus,HIGH);

pinMode (keyminus,INPUT);
digitalWrite(keyminus,HIGH);


attachInterrupt(0, wakeupnow, FALLING);

analogWrite(pinlaser,0);
sleepnow();
}

void loop() {

if (!digitalRead(keyplus) and digitalRead(keyminus)){ // plus
delay (50);
if (!digitalRead(keyplus) and digitalRead(keyminus)){
if (value<250)
value+=25;
analogWrite(pinlaser,value);
while(!digitalRead(keyplus) and digitalRead(keyminus));
}
if (!digitalRead(keyplus) and !digitalRead(keyminus))
delay (50);
if (!digitalRead(keyplus) and !digitalRead(keyminus)){
analogWrite(pinlaser,0);
sleepnow();
while (!digitalRead(keyplus) and !digitalRead(keyminus));
}
}


if (digitalRead(keyplus) and !digitalRead(keyminus)){ // minus
delay (50);
if (digitalRead(keyplus) and !digitalRead(keyminus)){
if (value>0)
value-=25;
analogWrite(pinlaser,value);
while(digitalRead(keyplus) and !digitalRead(keyminus));
}

if (!digitalRead(keyplus) and !digitalRead(keyminus)){
delay (50);
if (!digitalRead(keyplus) and !digitalRead(keyminus)){
analogWrite(pinlaser,0);
sleepnow();
while (!digitalRead(keyplus) and !digitalRead(keyminus));
}
}

}
}

 

Panzerfunker
Offline
Зарегистрирован: 28.10.2016

а что программа делать должна?

toren18
Offline
Зарегистрирован: 11.04.2017

Управление нагрузкой (диодом в моем случае).

Имеется диод и две кнопки + и -.

+ включает диод и увеличивет яркость, - уменьшает.

При зажатии + и - диод выключается, плата уходит в сон. После этого больше ничего не срабатывает.

Проблема в том что она из сна не выходит после выключения (зажатия + и -)

Green
Offline
Зарегистрирован: 01.10.2015

Исправьте

attachInterrupt(0, wakeupnow, FALLING);

Просыпаться может только по низкому уровню.
 

toren18
Offline
Зарегистрирован: 11.04.2017

Green пишет:

Исправьте

attachInterrupt(0, wakeupnow, FALLING);

Просыпаться может только по низкому уровню.
 

Поставил LOW вместо FALLING, при нажатии на + вообще включаться перестала. Или я что то не так поставил?

Green
Offline
Зарегистрирован: 01.10.2015
toren18
Offline
Зарегистрирован: 11.04.2017

Green пишет:

htpicc@gmail.com

написал на почту