Помогите проверить не большой скетч

Murat
Offline
Зарегистрирован: 15.08.2014
 
к какому пину подключить Arduino и как чтобы оно заработало
 
 
 
#include <OLED_I2C.h>
OLED  myOLED(SDA, SCL, 8);
//extern uint8_t SmallFont[];
//extern uint8_t TinyFont[];
extern uint8_t BigNumbers[];
//extern uint8_t MegaNumbers[];
extern uint8_t RusFont[];
//********************************************************************
unsigned long micros_sp;
volatile int sz; //счетчик обнуления
volatile int sp; //скорость
//********************************************************************
void setup(){
myOLED.begin();  
Serial.begin(115200); //инициализация ком порта
attachInterrupt(1, speedometr, RISING); //прерывание спидометра по фронту импульса
 
 
 
tone (7,100);
}
//********************************************************************
 void loop(){
 Serial.print (sp);
 
 
 myOLED.setFont(RusFont);
 myOLED.print("CGBLJVTNH",CENTER, 0);//cjb;lvt
 //myOLED.setFont(TinyFont);
 myOLED.setFont(BigNumbers);
 myOLED.printNumI(sp, CENTER, 19);
 myOLED.update();
 myOLED.clrScr();
   sz = sz - 1;
   if (sz == 0){
   sp = 0;
  }
   delay(50);
  }
//********************************************************************
void speedometr(){ //измеряем частоту на входе спидометра по прерыванию
sp=(600000.0/(micros() - micros_sp));
micros_sp= micros();
sz = 30;
 
 
}
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а что должно заработать? скорость считаться или дисплей не работает?

Гриша
Offline
Зарегистрирован: 27.04.2014
Murat
Offline
Зарегистрирован: 15.08.2014

Да скорость  к какому пину датчик подключать и ставить делитель или ото пару ВАЗ 2109

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

3 пин

Murat
Offline
Зарегистрирован: 15.08.2014

а почему 3 пин где это прописано

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Murat пишет:

а почему 3 пин где это прописано

 


42

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

вот здесь

attachInterrupt(1, speedometr, RISING); //прерывание спидометра по фронту импульса

как бы это не звучало глупо цифра 1 это 3 пин)))

http://arduino.ru/Reference/AttachInterrupt

Murat
Offline
Зарегистрирован: 15.08.2014

Спасибо огромное

 

Murat
Offline
Зарегистрирован: 15.08.2014

может подскажите как пройденное расстояние считать (с момента старта)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

берешь какую то еденицу времени, например 1секунда, и считаешь расстояние на это время зная скорость и приплюсовываешь к предыдущему расстоянию

Murat
Offline
Зарегистрирован: 15.08.2014

Пожалуйста помоги я уже 3 день умножаю и делю 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а в чем конкретно проблема? принцип я объяснил

Murat
Offline
Зарегистрирован: 15.08.2014

да во всем ни когда не сталкивался с millis micros запутался окончательно

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да все просто. создаешь еще одну переменную для времени например new_time. приравниваешь ей текущее время millis или micros, например оно сейчас 450 мс. и ставишь условие, если millis()-new_time>1000 то снова запоминаешь время и считаешь по формуле расстояние. и прибавляешь его к текущему. условие сработает если millis будет больше чем 1450. а чтобы белеберды не получилось при срабатывании условия по новой запоминаешь время и так далее по кругу

а потом можно усложнять

Murat
Offline
Зарегистрирован: 15.08.2014
unsigned long cur_ms = 0; //переменная для отслеживания натикавших миллисекунд с момента пуска МК 
unsigned long prev_ms = 0; //переменная для вычисления отрезков времени 
int ms = 0; //сам отрезок времени 
unsigned long m; //одометр, значение, по-идее, считывается из EEPROM при включении и потом туда же записывается при выключении МК 
unsigned long m_temp = 0; //переменная для вычисления пройденного пути за отрезок времени 
int speed = 0; //переменная для хранения скорости 

void setup() { 
pinMode(20, INPUT); 
digitalWrite(20, HIGH); 
attachInterrupt(3, odom, RISING); 
} 
void odom() { 
    m++; 
} 
void loop() { 
    cur_ms = millis(); //сколько прошло мс с момента включения 
    ms = cur_ms - prev_ms; //сколько прошло мс с последнего срабатывания расчета 
    if (ms > 500) { 
        prev_ms = cur_ms; //ставим метку когда было срабатывание 
        speed = (m - m_temp) * 3600 / ms; //вычисляем скорость км в час по кол-ву пройденных метров за отрезок времени ms 
        m_temp = m; //ставим метку когда было вычисление 
        ms=0; //обнуляем отрезок времени 
    } 
} 

вот этот код похож или нетс ним разбирался ни чего не понял

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да похож