bool flag_imp = false;
unsigned long old_millis;
unsigned long count; // счетчик
void setup() {
pinMode(5, OUTPUT);
// Устанавливаем прерывание
// Функция myEventListener вызовется тогда, когда
// на 2 пине (прерываниие 0 связано с пином 2)
// изменится сигнал c LOW на HIGH
attachInterrupt(0, myEventListener, RISING); // ловим LOW-HIGH
old_millis = millis();
}
void loop() {
if (flag_imp) {
count++;
delayMicroseconds(50);
flag_imp = false;
}
if (millis() - old_millis >= 1000) {
// считаем импульсы
if (count > 1100 && count <= 1500) {
// тут что-то делаем
digitalWrite(5, LOW);
}
if (count > 1500 && count < 2400) {
// тут что-то делаем
digitalWrite(5, HIGH);
}
if (count > 2400 && count < 6500) {
// тут что-то делаем
digitalWrite(5, HIGH);
}
count = 0;
old_millis = millis();
}
}
void myEventListener() {
flag_imp = true;
}
вот так
Виктор? Жив?
Всё еще не понимаю, но: а что будет если счётчик не досчитает до 1000 или пересчитает за 6500? Может стоит почитать про if-else и про изначальные настройки пина!?
Дак мне можно как то оставить только от 1100-1500 а потом if else
Нужно чтоб до 1100небыло минуса на пине от 1600 и больше небыло минуса~~,как~~ то так
При таком раскладе минус не появляется в диапазоне от1100 до 1600 на 5 пине,вообще ничего не появляется)
у тебя импульс всего 12 милливольт, надо его поднять до диапазона логики (усилить) в 35-40 раз
и код можно поправить так:
bool flag_imp = false;
unsigned long old_millis;
unsigned long count; // счетчик
void setup() {
pinMode(5, OUTPUT);
// Устанавливаем прерывание
// Функция myEventListener вызовется тогда, когда
// на 2 пине (прерываниие 0 связано с пином 2)
// изменится сигнал c LOW на HIGH
attachInterrupt(0, myEventListener, RISING); // ловим LOW-HIGH
old_millis = millis();
}
void loop() {
if (flag_imp) {
count++;
delayMicroseconds(10); // задержка на дребезг по переднему фронту
flag_imp = false;
}
if (millis() - old_millis >= 1000) {
// считаем импульсы
if (count > 1100 && count <= 1500) {
// тут что-то делаем
digitalWrite(5, LOW);
} else {
digitalWrite(5, HIGH);
}
count = 0;
old_millis = millis();
}
}
void myEventListener() {
flag_imp = true;
}
Как поднять его до диапазона логики?
существует 99 способов, а профессор говорит, что 100
LM358 к примеру, два каскада первый с усилением раз в 30 остальное добрать вторым, за ним поставить LM393, это аппаратно,
компаратор есть и в атмега 358, тогда освободить пины 5 и 6 придётся, перенести выход на 7 пин или 13 там уже светодиод есть
Схем в инет масса, всё стандартное
может поможете в атмега 358 организовать ? что нужно сделать если без lm358
а обязательно диапазон подымать .он же видит как диапазоны меняются
да, очень желательно
фронты хорошие, дребезга нет, но я бы оставил задержку в 10, а лучше увеличил её до 15 микросекунд
LM358, надо отсечь минусовой импульс, для этого выставить на инвертирующем входе напряжение порядка 100 милливольт
это с помошью LM358 нужно сделать?есть схема как это сделать я сьезжу куплю LM358
в интернете 100 схем, мне за тебя полезть и сюда перетащить, по резисторам подскажу какие нужны, есть? и конденсаторы тоже
Это действительно управление коробкой в машине? Импульсами 12 мВ? Вы ничего не перепутали?















