Arduino в авто

muin
Offline
Зарегистрирован: 29.09.2017

Ребят все привет. Видел программу, работающую через обд на андройд. Которая имитирует звук разных машин, считывая обороты через обд. 

Хочу ради интереса попробовать реализовать это на ардуино. Машина таойта спринтер ae100. Машинка старенькую специально взял, где не имеется обд разъем. первое начинание это взял сигнальный провод который идет на приборку тахометра. Имеется ардуино pro micro. Подключил дисплей чтоб видеть что получилось. Сделал с помощью прирывая считывание сигнала. Подключил. Может что напутал с формулой, или попробовать использовать attachInterrupt() FALLING. Потому что обороты показывал в 2 раза больше примерно. А иногда даже минусовые показатели. И когда я подключаю этот провод к ардуино, то приборка перестает работать. Поможет ли если я поставлю диод, чтоб от ардуины ничего по этому проводу в обратку не шло на приборную панель?

И собственно сам скейтч. 

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>


#define OLED_MOSI   2
#define OLED_CLK   3
#define OLED_DC    9
#define OLED_CS    12
#define OLED_RESET 8
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

int i = 0; //счетчик анимации
unsigned long lastflash;
int RPM;


void setup() {
  attachInterrupt(2,sens,RISING); //подключить прерывание на 2 пин при повышении сигнала
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC); // инициализация и очистка дисплея
  display.clearDisplay(); // Чистый дисплей
  display.cp437(true); //Включаем потдержку русского языка
  delay(200);

}

void loop() {
if ((micros()-lastflash)>1000000){ //если сигнала нет больше секунды
    RPM=0; //считаем что RPM 0
}
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(10,0);
  display.clearDisplay();
  display.println("RPM");
  display.setCursor(10,30);
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.println(RPM);
  display.display();
  delay(250);
}


void sens() {

  RPM=60/((float)(micros()-lastflash)/1000000);  //расчет
  lastflash=micros();  //запомнить время последнего оборота
}

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Вот как! А вы все так не умеете! ;)

Я хотел было прокомментировать, но решил не портить произведение. Тут прекрасно все, от первого "Ребят", до закрывающей скобки.

Ну, разве что для колорита, поменять на "Ребьзя". ;)

sadman41
Offline
Зарегистрирован: 19.10.2016

Не все, только пингвины и поросяты

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

sadman41 пишет:

Не все, только пингвины и поросяты

Вы таки шото имеете против пингвинообразных и парнокопытных? Вы, стессняюсь спросить, расист?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

пингворосят  не знает даже гугл.

hyperion
Offline
Зарегистрирован: 23.12.2015

пропустил инициализацию пина

pinmode (2, input);

прерывание сменить на change наверное

переменные в ISR должны быть обьявлены как volatile

это как минимум что не так в программе :)

muin
Offline
Зарегистрирован: 29.09.2017

Спасибо, попробую

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Вы таки шото имеете против пингвинообразных и парнокопытных? Вы, стессняюсь спросить, расист?

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