attiny85 digispark, не выходит из сна

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

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

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

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

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

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

#include <avr/sleep.h>
#include <avr/power.h>

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

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() {
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));
}
}

}
}

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
toren18
Offline
Зарегистрирован: 11.04.2017
[code]
#include <avr/sleep.h>
#include <avr/power.h>

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


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() {
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));
}
}

}
}
[/code]

 

T.Rook
Offline
Зарегистрирован: 05.03.2016

а из Power_Down и INT0 разве не уровнем надо выходить?

 

 

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

Может быть и так. Мне данный скетч написали. Я сам крайне поверхостно представляю как это все работает. Не затруднит вас помочь и подправить то, что не так написано?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

toren18 пишет:

Мне данный скетч написали. Я сам крайне поверхостно представляю как это все работает. Не затруднит вас помочь и подправить то, что не так написано?

К сожалению, затруднит. Обратитесь к автору этого кода. Или в раздел "Ищу исполнителя". В этом разделе помогают тем, кто сам делает, а готовые коды пишут там.