#include <Arduino.h>
volatile uint32_t sensor1Count = 0;
volatile uint32_t sensor2Count = 0;
volatile unsigned long previousTime = 0;
volatile unsigned long currentTime = 0;
volatile bool updateFlag = false;
void setup() {
pinMode(PA0, INPUT); // Кнопка 1
pinMode(PA1, INPUT); // Кнопка 2
pinMode(PA2, INPUT); // Кнопка 3
pinMode(PA3, INPUT); // Кнопка 4
pinMode(4, INPUT); // Датчик 1
attachInterrupt(digitalPinToInterrupt(4), sensor1ISR, RISING);
pinMode(5, INPUT); // Датчик 2
attachInterrupt(digitalPinToInterrupt(5), sensor2ISR, RISING);
//Timer1.initialize(500); // 1 миллисекунда
//Timer1.attachInterrupt(timerISR);
pinMode(3, OUTPUT); // Светодиод
Serial.begin(9600); // Инициализация последовательного порта
}
void loop() {
currentTime = millis();
if(currentTime - previousTime >= 60) {
previousTime = currentTime;
// Опрос кнопок каждые 60 миллисекунд
handleButtons();
}
if(updateFlag) {
digitalWrite(3, !digitalRead(3)); // Мигание светодиода
updateFlag = false;
}
printSensorCounts(); // Вывод количества импульсов в последовательный порт
currentTime = millis();
if(currentTime - previousTime >= 500) {
previousTime = currentTime;
updateFlag = true; // Флаг обновления состояния для светодиода
}
}
void sensor1ISR() {
sensor1Count++;
}
void sensor2ISR() {
sensor2Count++;
}
void handleButtons() {
int buttonState;
buttonState = digitalRead(PA0);
switch (buttonState) {
case HIGH:
Serial.println("Button 1 is pressed");
break;
default:
break;
}
buttonState = digitalRead(PA1);
switch (buttonState) {
case HIGH:
Serial.println("Button 2 is pressed");
break;
default:
break;
}
buttonState = digitalRead(PA2);
switch (buttonState) {
case HIGH:
Serial.println("Button 3 is pressed");
break;
default:
break;
}
buttonState = digitalRead(PA3);
switch (buttonState) {
case HIGH:
Serial.println("Button 4 is pressed");
break;
default:
break;
}
}
void printSensorCounts() {
Serial.print("Sensor 1 count: ");
Serial.print(sensor1Count);
Serial.print("\tSensor 2 count: ");
Serial.println(sensor2Count);
}
Loading
st-nucleo-l031k6
st-nucleo-l031k6