Как сделать вкл\выкл с одной кнопки на mega2560

Bna2009
Offline
Зарегистрирован: 10.09.2014

Как сделать включение  выключение устройства с одной кнопки на mega2560,

при выключении устройство переходило в спящий режим ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Выключатель поставить? Можно просто из розетки выдергивать шнурок.

Впечатление, в школе каникулы начались.

vvadim
Offline
Зарегистрирован: 23.05.2012

А шо за устройство - чайник, кофеварка, пылесос?

Bna2009
Offline
Зарегистрирован: 10.09.2014

устройство портативное mega2560 + RC522 для работы с картами

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

мега2560 для одной кнопки...... Хотя, может она сама себя включать/выключать должна?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Bna2009 пишет:

устройство портативное mega2560 + RC522 для работы с картами


Собираетесь в толпе читать чужие карточки?

std
Offline
Зарегистрирован: 05.01.2012

Собираетесь в толпе читать чужие карточки?

Знал бы Puhlyaviy, что nRF24L01, серва и обыкновенный кирпич вполне могут заменить СВД :)

По теме:

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

volatile boolean onflag=false,              // going on state
                 onflagdone=false;          // on state
int              seconds=0;
unsigned long    last_on=millis();

void waking(void){
  onflag=true;
}

void sleeping(void){
  onflag=false;                             // reset variables
  onflagdone=false;
  seconds=0;
  digitalWrite(5,LOW);                      // power LED
  delay(100);                               // do not remove
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);      // sleep routines
  sleep_enable();
  sleep_mode();
  sleep_disable(); 
}

void setup(){
  pinMode(5,OUTPUT);       // outs
  pinMode(2,INPUT_PULLUP); // on
  attachInterrupt(0,waking,LOW);
  sleeping();                               // sleep by default
}

void loop(){
  if(onflag){
    if(millis()-last_on>=1000){             // on-state counter
      seconds++;
      last_on=millis();
    }
    if(!onflagdone){                              // on
      delay(2000);
      if(digitalRead(2)==LOW) onflagdone=true;
      else sleeping();
    }else{
      digitalWrite(5,HIGH);                       // power LED

      // MAIN CODE HERE

      if(digitalRead(2)==LOW && seconds>=5){      // off
        digitalWrite(5,LOW);
        sleeping();
      }
    }
  }
}

D2 - вход, кнопка Power. Замыкать на землю.

D5 - выход, цепляем к нему светодиод и он будет показывать "включено". Этот код от моего плоского фонарика с SMD светиками на меге8.

Одновременно с самой Arduino нужно отключать и модуль. Камни следующие: RC522 - активная нагрузка, то есть нагрузка из которой выходят сигналы высокого уровня (плюсы). Поэтому отключать эту нагрузку необходимо, отрезая от питания плюс, то есть p-FET или PNP транзистором. Такой транзюк включается низким уровнем, т. е. digitalRead(5,LOW) - это будет включить. Если попытаться отключать модуль как обычный светодиод, по минусу NPN или n-FET транзистором, то ток может утекать через выходы Arduino. Что кстати чревато для них.

Bna2009
Offline
Зарегистрирован: 10.09.2014

Спасибо большое!