Arduino Uno로 간단한 LED 컨트롤러를 구현하고 싶습니다. 잠자기 상태가되어 다른 버튼이 있습니다.Arduino LED control sleep
- 디지털 2 : ON을위한 버튼이 OFF
- 디지털 3 : 버튼의
기능은
모든 것이 작품을 좋아 일어나위한 버튼 만은를 절전 모드로 전환 할 때 LED도 꺼집니다. Arduino가 잠들었을 때 30 초가 지나면 조명을 켜고 싶습니다. 당신은 AVR의 파워 다운 절전 모드를 사용
#include <avr/sleep.h>
#define REDPIN 10
#define GREENPIN 11
#define BLUEPIN 9
#define delayTime 20 //za fading cas
unsigned long interval= 30000;
unsigned long previousMillis = 0;
const int ledPin = 12; // the pin that the LED is attached to
const int buttonPin1 = 2; //on off
bool vklop = false;
int bela = 10;
int barva;
int prejsnja_barva = 0;
int buttonPushCounter1 = 0; // counter for the number of button presses
int buttonState1 = 0; // current state of the button
int lastButtonState1 = 0; // previous state of the button
/////////////////////////////////////*SETUP*/////////////////////////////////////////
void setup()
{
pinMode(buttonPin1, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
pinMode(3,INPUT); //because of interrupts PIN digital 3
digitalWrite(3,HIGH);
}
/////////////////////////////////////*LOOP*/////////////////////////////////////////
void loop()
{
unsigned long currentMillis = millis();
if ((currentMillis-previousMillis) > interval) //15s timer
{
previousMillis = currentMillis;
Serial.println("SLEEP!"); // kaj delaj po preteku 5s
delay(50);
sleepSetup(); //sleep mode
}
else
{
buttonState1 = digitalRead(buttonPin1);
/////////////////////////////////////ON/OFF/////////////////////////////////////////
/////////////////////////////////////ON/OFF/////////////////////////////////////////
if (buttonState1 != lastButtonState1) // compare the buttonState to its previous state
{
if (buttonState1 == HIGH) // if the state has changed, increment the counter
{
buttonPushCounter1++; // if the current state is HIGH then the button went from off to on:
Serial.println("on");
Serial.print("number of BUTTON1 pushes: ");
Serial.println(buttonPushCounter1);
digitalWrite(ledPin, HIGH);
if(buttonPushCounter1 % 2 == 0)
{
setColor(bela, bela, bela);
vklop = true;
barva = 13;
}
else
{
setColor(0, 0, 0);
vklop = false;
}
}
else // if the current state is LOW then the button went from on to off:
{
Serial.println("off");
digitalWrite(ledPin, LOW);
}
delay(50); // Delay a little bit to avoid bouncing
}
lastButtonState1 = buttonState1; // save the current state as the last state, for next time through the loop
}
}
/////////////////////////////////functions/////////////////////////////////////////////
/////////////////////////////////functions/////////////////////////////////////////////
/////////////////////////////////functions/////////////////////////////////////////////
void setColor(int red, int green, int blue)
{
analogWrite(REDPIN, red);
analogWrite(GREENPIN, green);
analogWrite(BLUEPIN, blue);
}
void sleepSetup(void)
{
sleep_enable(); // Set sleep enable (SE) bit:
attachInterrupt(1, pinInterrupt, LOW); // Set pin 2 as interrupt and attach handler:
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // define our preferred sleep mode:
digitalWrite(13,LOW);
sleep_cpu();
Serial.println("Just woke up!"); //OD TU SE NADALJUJE PO PRITISKU TIPKE
digitalWrite(13,HIGH);
}
void pinInterrupt() //ISR
{
sleep_disable();
detachInterrupt(0);
}
어떤 수면? 코드에서 수면 참조가 표시되지 않습니다. 또한 사용하지 않은 변수와 누락 된 함수가 많이 있습니다. [Minimal, Complete, Verifiable example] (https://stackoverflow.com/help/mcve)을 만듭니다. –
귀하의 게시물을 보내 주셔서 감사합니다, 내 첫 번째입니다. 다음에 나는 더 나은 것을 만들 것이다. 나는 다른 기능들을 붙여 넣을 것이다. 모든 변수가 사용됩니다. 죄송합니다. 앞으로 더 나은 코드를 만들 계획입니다. 모든 코드를 붙여 넣을 수 없으므로 문자로 제한됩니다. –
모든 코드를 게시하지 않아도됩니다. 코드를 [mcve]로 축소해야합니다. 직면 한 문제에 속하지 않는 것을 제거하십시오. 당신은 수면이 모든 led를 끄는 것을 증명하기 위해 8 개의 버튼, 무수한 색 및 기타 등을 필요로하지 않습니다. 1 명은 또한 충분할 것입니다. 필요없는 모든 것을 삭제하십시오. 이것은 어쨌든 오류를 찾는 데 도움이 될 것입니다. – Piglet