You are on page 1of 6

Виконав: Мазуренко Микита

Група: КН-920Є
Практична робота 8

ДОСЛІДЖЕННЯ ОРГАНІЗАЦІЇ ЧАСОВИХ ФУНКЦІЙ КЕРУВАННЯ


НА МІКРОПРОЦЕСОРІ ATMEGA328

Мета роботи: Одержання практичних навичок зчитування з кнопок керуючих


сигналів, усунення брязкоту контактів та організації декількох одночасних часових
функцій керування з використанням мікропроцесора ATMega328 на платі Arduino
UNO R3.

Індивідуальне завдання (Варіант 6)

Забезпечити почергове блимання світлодіодів, підключених до заданих портів


при кожному натисканні на управляючі кнопки, які підключені до заданих портів.

Варіант Світлодіод 1 Світлодіод 2


N порту N порту Час N порту N порту Час
Управ- підключення включення/ управляючої підключення включення/
ляючої світлодіода виключення кнопки світлодіода виключення
кнопки світлодіоду, світлодіоду,
с с

5 6 7 0.7/1.8 8 9 1.3/2.1
Програма і спрощена блок-схема алгоритму організації процесу
почергового включення/виключення світлодіодів, підключених до заданих
портів при кожному натисканні на управляючі кнопки, підключені до заданих
портів та також блок-схема алгоритму організації процесу захисту від
брязкання контактів(debounce())

Рисунок 1 – блок-схема алгоритму організації процесу


Код програми:
const int LED_PIN_1 = 7;
const int LED_PIN_2 = 9;
const int BUTTON_PIN_1 = 6;
const int BUTTON_PIN_2 = 8;
const int FIRST_TIME_1 = 700;
const int FIRST_TIME_2 = 1800;
const int SECOND_TIME_1 = 1300;
const int SECOND_TIME_2 = 2100;

class Flasher {
int ledPin;
int button;
bool lastButton;
bool currentButton;
long OnTime;
long OffTime;
bool isOnTime;
int ledState;
unsigned long previousMillis;

public:
Flasher(int pin, int buttonPin, long on, long off) {
ledPin = pin;
button = buttonPin;
pinMode(ledPin, OUTPUT);
pinMode(button, INPUT);
OnTime = on;
OffTime = off;
isOnTime = false;
lastButton = false;
currentButton = false;
ledState = LOW;
previousMillis = 0;
}

void Switch() {
currentButton = debounce();
if(lastButton == LOW && currentButton == HIGH)
isOnTime = !isOnTime;
lastButton = currentButton;
}

bool debounce() {
currentButton = digitalRead(button);
if(lastButton != currentButton) {
delay(5);
currentButton = digitalRead(button);
}
return currentButton;
}

void Update() {
unsigned long currentMillis = millis();
if ((ledState == HIGH) && (currentMillis - previousMillis >= (isOnTime ?
OnTime : OffTime))) {
ledState = LOW;
previousMillis = currentMillis;
digitalWrite(ledPin, ledState);
}
else if ((ledState == LOW) && (currentMillis - previousMillis >= (isOnTime
? OnTime : OffTime))) {
ledState = HIGH;
previousMillis = currentMillis;
digitalWrite(ledPin, ledState);
}
}
};

Flasher led1(LED_PIN_1, BUTTON_PIN_1, FIRST_TIME_1, FIRST_TIME_2);


Flasher led2(LED_PIN_2, BUTTON_PIN_2, SECOND_TIME_1, SECOND_TIME_2);

void setup() {
}

void switchLed() {
digitalWrite(LED_PIN_1, digitalRead(BUTTON_PIN_1) == HIGH);
}

void loop() {
led1.Update();
led2.Update();
led1.Switch();
led2.Switch();
//switchLed();
}

Працюючі моделі схем згідно індивідуального завдання у середовищі


Tinkercad із гіперпосилками на розроблені моделі( рис. 2)
Посилання на Tinkercad

Рисунок 2 – модель схеми у середовищі Tinkercad


Працюючі моделі схем згідно індивідуального завдання у середовищі
PROTEUS( рис. 3)

Рисунок 3 – модель схеми у середовищі PROTEUS

Результати виконання (рис 4, 5)

Рисунок 4 – Результати виконання в TinkerCad


Рисунок 5 – Результати виконання в PROTEUS

Висновок: Одержали практичних навичок зчитування з кнопок керуючих


сигналів, усунення брязкоту контактів та організації декількох одночасних часових
функцій керування з використанням мікропроцесора ATMega328 на платі Arduino
UNO R3.

You might also like