Задание 1.2.
Задание для самостоятельного решения.
1 Модернизируйте код так, чтобы при однократном нажатии на кнопку светодиод менял свое состояние с включенного на выключенный и обратно.
#define BUTTON_PIN 2
#define LED_PIN 9
bool flagP = false;
bool btnState = false;
bool ButtonON = false;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(LED_PIN, ButtonON);
// читаем инвертированное значение для удобства
btnState = !digitalRead(BUTTON_PIN);
Serial.println(btnState);
if (btnState && !flagP) { // обработчик нажатия
flagP = true;
ButtonON = ! ButtonON;
}
if (!btnState && flagP) { // обработчик отпускания
flagP = false;
}
}
Задание 1.3.
Задание для самостоятельного решения.
Напишите программу, в которой мы бы управляли частотой моргания светодиода. По умолчанию он бы горел 1 секунду, а затем гас на секунду. По нажатию кнопок мы должны управлять частотой моргания светодиода с шагом 50 мс.
#define PLUS_BUTTON_PIN 2
#define MINUS_BUTTON_PIN 3
#define LED_PIN 9
int brightness = 100;
void setup() {
pinMode(PLUS_BUTTON_PIN, INPUT_PULLUP);
pinMode(MINUS_BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
bool flagP = false;
bool flagM = false;
void loop() {
brightness = constrain(brightness, 0, 255);
analogWrite(LED_PIN, brightness);
Serial.println(brightness);
// читаем инвертированное значение для удобства
bool btnStatePlus = !digitalRead(PLUS_BUTTON_PIN);
bool btnStateMinus = !digitalRead(MINUS_BUTTON_PIN);
if (btnStatePlus && !flagP) { // обработчик нажатия +
flagP = true;
brightness += 10;
}
if (!btnStatePlus && flagP) { // обработчик отпускания +
flagP = false;
}
if (btnStateMinus && !flagM) { // обработчик нажатия -
flagM = true;
brightness -= 10;
}
if (!btnStateMinus && flagM) { // обработчик отпускания -
flagM = false;
}
}
Do'stlaringiz bilan baham: |