Напряжение на аналоговом входе (холостое)

Добрый день, спасибо вам за отклики я сегодня займусь подтяжкой, нарисовал схему как сейчас все подключено и как нужно сделать подтяжку к земле (можете посмотреть верно ли?).

Изменил код ( у нас коленвал в течении одного цикла совершает 2 оборота поэтому магнит проходи мимо датчика 2 раза, следовательно обороты х2, нам нужно чтобы в выводе были обороты \2).
Возникли 2 новых вопроса, мы хотим сделать “прибор” переносным, т.е чтобы не устанавливать стационарно, проехал, снял логи, настроился снова проехал снял логи проверил, и так с несколькими картами. А так как датчик холла придется крепить кастомно, у нас есть особенности с маховиками и магнитами, то проще наверное сделать как то по другому.

Поэтому возникли следующие вопросы

  1. Больше уже по схемотехнике, возможно ли реализовать снятие импульса с провода зажигания а не с датчика холла, как я понимаю нужен датчик чтобы ловить всплеск, далее конвертация получается в цифровой сигнал и передача на пин в ардуино. По принципу как сделано на автомобильных стробоскопах прищепка на высоковольтный провод, так же на некоторых универсальных лодочных тахометрах реализован провод который обматывается вокруг провода ВВ и с него идет считывание оборотов.

  2. У нас в выводе AFR в вольтах, а хотелось бы получить его в единицах, где 0В - 10 AFR, 5В - 20 AFR. т.е нужно преобразование на выводе в порт и запись на карту чтобы допустим при 1В-12 2В-14 2.5В-15 2.75В-15.5 единиц AFR. На всякий случай укажу из тех.документации на контроллер данные: Linear Output: 0[v]@0.68[Lambda] linear to 5[v]@1.36[Lambda], 10[AFR] linear to 20[AFR] equivalent for gasoline. Не могу сообразить как сделать это?

#include <SPI.h>
#include <SD.h>

unsigned long lastflash;
int RPM;
int analogValue;  // Переменная для хранения значения с аналогового пина

File dataFile;

void setup() {
  Serial.begin(9600);  // Открыть порт

  // Инициализация SD карты
  if (!SD.begin(10)) {  // Номер пина CS может быть другим, проверьте подключение
    Serial.println("Ошибка инициализации SD карты!");
    return;
  }
  
  // Создание или открытие файла для записи данных
  dataFile = SD.open("data.txt", FILE_WRITE);
  if (dataFile) {
    dataFile.println("RPM,AFR");
    dataFile.close();
  } else {
    Serial.println("Ошибка открытия файла для записи!");
  }

  attachInterrupt(0, sens, RISING); // Подключить прерывание на 2 пин при повышении сигнала
  
}

void sens() {
  unsigned long currentTime = micros();
  if (lastflash != 0) {  // Убедиться, что lastflash уже установлен
    RPM = 60 / ((float)(currentTime - lastflash) / 1000000);  // Расчет
  }
  lastflash = currentTime;  // Запомнить время последнего оборота
}

void loop() {
  if ((micros() - lastflash) > 1000000) { // Если сигнала нет больше секунды
    RPM = 0;  // Считаем что RPM 0
  }

  // Чтение значения с аналогового пина A0
  analogValue = analogRead(A0);
  
  // Преобразование значения в напряжение (0-5В)
  float AFR = analogValue * (5.0 / 1023.0);

  // Деление RPM на 2
  int halfRPM = RPM / 2;

  // Вывод значений в порт
  Serial.print("RPM: ");
  Serial.print(halfRPM);
  Serial.print(" AFR: ");
  Serial.println(AFR, 2);  // Округляем до 2 знаков после запятой

  // Открытие файла для записи данных
  dataFile = SD.open("data.txt", FILE_WRITE);  
  if (dataFile) {
    dataFile.print(halfRPM);
    dataFile.print(",");
    dataFile.println(AFR, 2);  // Запись значения AFR с двумя знаками после запятой
    dataFile.close();
  } else {
    Serial.println("Ошибка открытия файла для записи!");
  }

  delay(500);  // Задержка для стабильности
}

map(сигнал,0,1023,10,20);

если нужны десятые, то 100 - 200, а потом переводить во флоат (делить на 10)

я использовал так:

float calculateAFR(float voltage) {
  return 2 * voltage + 10;
 float AFR = calculateAFR(voltage);

Допускается ли такое?