Это не управлекние коробкой это датчик задней скорости и нейтрали на мкпп.мне нейтраль нужно поймать
Все равно. Такой низкий уровень сигнала - это нонсенс для автоэлектрики. Проверьте еще раз, может вы большую часть импульса потеряли?
Вы как импульсы на вход ардуины подаете - через делитель? Может номиналы резисторов перепутали?
просто провод от датчика на пин ардуино кидаю и все.меряю так же
Слушайте, а вы прочитали ту ссылку, что я вам дал в самом начале?
Если да, какого фига вы продолжаете слать скринщоты вместо нормальных сообщений?
Что я должен разглядеть на этой картинке?
ну я же могу вам показать это буквами))простите уж
я тоже думаю, что можете. Почему не показываете?
int pin = A2;
unsigned long duration;
void setup() {
Serial.begin (9600);
pinMode(pin, INPUT);
}
void loop() {
duration = pulsein(pin, HIGH);
Serial.print(duration);
delay (1000);
}
вот так стояло и показывало на нейтралли 1200 на задней 6800 на любой другой скорости 4600
Если у вас этот сигнал считывался функцией pulsein() - это никак не может быть 12мВ
Вывод - вам не нужен никакой усилитель.
я наверное меряю осцелографом неправильно я его первый раз в руки взял))а как мне тогда подать минус на любой пин,когда диапазон частот 1100-1600??
Хорошо бы все-таки разобраться с осцилом и померить импульс. Потому как в машине уровень напряжения 12в и логично, если и импульс датчика тоже. А подав 12в на пин Ардуины, вы сожгете плату. Если не на первый раз, то на третий или на 20-й - но гарантировано.
На датчике 5 вольт,мультик види 5 в на задней 3 в на любой другой а 1в на нейтралке,обычным плановым выходом эти вольты не меряются они пляшут и показывают не правильно,вот цифровым получилось стабильных цифр добиться через пульсен
У вас сигнал импульсный, его нет смысла измерять мультиметром, вы ничего не увидите. Нужен осциллограф.
Косвенно из того что что вы на разных режимах видите до 5в - можно сделать вывод что амплитуда там больше (наверно как раз 12в) - и, значит, подключать этот сигнал напрямую к пину категорически нельзя.
Может у вас пин уже выгорел, поэтому код и не работает теперь.
Ну у меня не одна аодуино,электроника в машине вся 5в у меня,а код должен работать? Без всяких усилений?
вот так попробуйте
volatile bool flag_imp = false;
unsigned long old_millis;
unsigned long count; // счетчик
void setup() {
pinMode(5, OUTPUT);
Serial.begin(115200);
// Устанавливаем прерывание
// Функция 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) {
// считаем импульсы
Serial.println(count);
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;
}
Подключите датчик и покажите, что будет печатать в мониторе
Но мой совет - начать с осциллографа и еще раз посмотреть форму, частоту и амплитуду сигнала
на осциллографе у него 5 милливольт на клетку, насколько я вижу именно 12 милливольт импульс, если ТС включил на щупе делитель на 10, то это 120 милливольт, фото щупа в студию
Я мерил не правильно,сейчас все сделаю ,покажу осцелограф
хотя я лучше так бы сделал
unsigned long old_millis;
volatile unsigned long CC = 0; // счетчик
void setup() {
pinMode(5, OUTPUT);
Serial.begin(115200);
// Устанавливаем прерывание
// Функция myEventListener вызовется тогда, когда
// на 2 пине (прерываниие 0 связано с пином 2)
// изменится сигнал c LOW на HIGH
attachInterrupt(0, myEventListener, RISING); // ловим LOW-HIGH
old_millis = millis();
}
void loop() {
if (millis() - old_millis >= 1000) {
// считаем импульсы
noInterrupts();
unsigned long count = CC;
CC =0;
interrupts();
Serial.println(count);
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() {
CC++;
}










