#define IN1 2
#define IN2 3
#define OUT_Leftturn A0
#define OUT_Rightturn A1
#define OUT_Stopsignal A3
bool St_IN1;
bool St_IN2;
bool lastState1 = LOW; // Хранение предыдущего состояния
unsigned long startTime1 = 0; // Время начала импульса
unsigned long endTime1 = 0; // Время окончания импульса
bool lastState2 = LOW; // Хранение предыдущего состояния
unsigned long startTime2 = 0; // Время начала импульса
unsigned long endTime2 = 0; // Время окончания импульса
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Инициализация Serial для вывода результатов
pinMode(LED_BUILTIN, OUTPUT);
pinMode(IN1, INPUT);
pinMode(IN2, INPUT);
pinMode(OUT_Leftturn, OUTPUT);
pinMode(OUT_Rightturn, OUTPUT);
pinMode(OUT_Stopsignal, OUTPUT);
digitalWrite(OUT_Leftturn, LOW);
digitalWrite(OUT_Rightturn, LOW);
digitalWrite(OUT_Stopsignal, LOW);
}
void loop() {
// put your main code here, to run repeatedly:
// digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
// delay(1000); // wait for a second
// digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
// delay(1000); // wait for a second
St_IN1 = digitalRead(IN1);
St_IN2 = digitalRead(IN2);
//bool currentState = digitalRead(pin); // Считывание текущего состояния сигнала
//Обнаружение начала импульса (LOW -> HIGH)
if (St_IN1 == HIGH && St_IN2 == LOW && lastState1 == LOW) {
startTime1 = millis(); // Фиксация времени начала импульса
}
// Обнаружение окончания импульса (HIGH -> LOW)
if (St_IN1 == LOW && St_IN2 == LOW && lastState1 == HIGH) {
endTime1 = millis(); // Фиксация времени окончания импульса
unsigned long duration1 = endTime1 - startTime1; // Вычисление длительности
Serial.print("Длительность импульса: ");
Serial.print(duration1);
Serial.println(" мс");
}
lastState1 = St_IN1; // Обновление предыдущего состояния
// Обнаружение начала импульса (LOW -> HIGH)
if (St_IN2 == HIGH && St_IN1 == LOW && lastState2 == LOW) {
startTime2 = millis(); // Фиксация времени начала импульса
}
// Обнаружение окончания импульса (HIGH -> LOW)
if (St_IN2 == LOW && St_IN1 == LOW && lastState2 == HIGH) {
endTime2 = millis(); // Фиксация времени окончания импульса
unsigned long duration2 = endTime2 - startTime2; // Вычисление длительности
Serial.print("Длительность импульса: ");
Serial.print(duration2);
Serial.println(" мс");
}
lastState2 = St_IN2; // Обновление предыдущего состояния
digitalWrite(OUT_Leftturn, St_IN1);
digitalWrite(OUT_Rightturn, St_IN2);
}
// const int buttonPin = 2; // Пин кнопки
// const int ledPin = 13; // Пин светодиода
// int buttonState = LOW; // Текущее состояние кнопки
// int lastButtonState = LOW; // Предыдущее состояние кнопки
// unsigned long lastDebounceTime = 0; // Время последнего изменения состояния
// unsigned long debounceDelay = 50; // Задержка для антидребезга (в миллисекундах)
// void setup() {
// pinMode(buttonPin, INPUT);
// pinMode(ledPin, OUTPUT);
// digitalWrite(ledPin, LOW);
// }
// void loop() {
// int reading = digitalRead(buttonPin); // Считать текущее состояние кнопки
// // Если состояние кнопки изменилось
// if (reading != lastButtonState) {
// lastDebounceTime = millis(); // Сохранить время изменения
// }
// // Если прошло достаточно времени, чтобы убрать дребезг
// if ((millis() - lastDebounceTime) > debounceDelay) {
// // Если состояние изменилось
// if (reading != buttonState) {
// buttonState = reading;
// // Если кнопка нажата
// if (buttonState == HIGH) {
// digitalWrite(ledPin, !digitalRead(ledPin)); // Переключить состояние светодиода
// }
// }
// }
// // Сохранить текущее состояние для сравнения в следующем цикле
// lastButtonState = reading;
// }