Помогите проверить не большой скетч
- Войдите на сайт для отправки комментариев
Ср, 08/07/2015 - 16:43
к какому пину подключить 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;
}
а что должно заработать? скорость считаться или дисплей не работает?
читаем, исправляем
Да скорость к какому пину датчик подключать и ставить делитель или ото пару ВАЗ 2109
3 пин
а почему 3 пин где это прописано
а почему 3 пин где это прописано
42
вот здесь
как бы это не звучало глупо цифра 1 это 3 пин)))
http://arduino.ru/Reference/AttachInterrupt
Спасибо огромное
может подскажите как пройденное расстояние считать (с момента старта)
берешь какую то еденицу времени, например 1секунда, и считаешь расстояние на это время зная скорость и приплюсовываешь к предыдущему расстоянию
Пожалуйста помоги я уже 3 день умножаю и делю
а в чем конкретно проблема? принцип я объяснил
да во всем ни когда не сталкивался с millis micros запутался окончательно
да все просто. создаешь еще одну переменную для времени например new_time. приравниваешь ей текущее время millis или micros, например оно сейчас 450 мс. и ставишь условие, если millis()-new_time>1000 то снова запоминаешь время и считаешь по формуле расстояние. и прибавляешь его к текущему. условие сработает если millis будет больше чем 1450. а чтобы белеберды не получилось при срабатывании условия по новой запоминаешь время и так далее по кругу
а потом можно усложнять
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; //обнуляем отрезок времени } }вот этот код похож или нетс ним разбирался ни чего не понял
да похож