Спасибо, буду пробовать через этот эмулятор. Вечером отпишусь.
Спасибо, буду пробовать через этот эмулятор. Вечером отпишусь.
Создали новую отдельную тему о приборке. Вечером дооформим. Предлагаю перенести обсуждение ТУДА
Думал именно о такой конфигурации, но на кьюте без кумела. ИМХО на порядок эффективней, чем крутить флеши... Пока не разобрался, как без иксов поднять OpenGL контекст. Говорят пятый кьют умеет, но не понятно дрова для AMD Z430 отдают OGLES2 контекст без иксов или нет. получу плату - буду разбираться.
Отрабатывал два варианта кода тахометра, обоим нужны усреднения параметром, так как в переменной Taho проскакивают завышенные значения
Как бы это реализовать? Да и вообще может я не оптимальные решения нашел самих кодов?
Вариант 1 (с прерыванием)
Вариант 2 (с прерыванием и таймером)Код:pinMode(TahometrPin, INPUT); // Контакт для тахометра !!!!!!!!!ПРЕРЫВАНИЕ 5 digitalWrite(TahometrPin, HIGH); //внутренняя подтяжка входа тахометра attachInterrupt(5, TahometrImpulse_on, FALLING); //RISING);// настройка прерывания и функции на него ... void TahometrImpulse_on() { Tahometr_impulse_count++; //увеличить счетчик импульсов if (Tahometr_impulse_count >=4) //2имп=1 оборот коленвала { Taho_ImpulseTime = micros()-Taho_time; //время прихода между импульсами Taho_time = micros(); //обнулить Taho=((Tahometr_impulse_count*60*1000000)/(2*Taho_ImpulseTime)); // перевод в об/мин Tahometr_impulse_count = 0; } }
Недостаток первого кода - при 0 об/мин в переменной Taho сидит последнее значение оборотов, а не 0.Код:#include <TimerThree.h> long Timer_Time=500000; //mcsec Timer3.initialize(Timer_Time);//(Timer_Time*1000); // initialize timer3, and set a 1/2 second period Timer3.pwm(2, 512); Timer3.pwm(3, 512); Timer3.pwm(5, 512); Timer3.attachInterrupt(Timer3_Timer); ... pinMode(TahometrPin, INPUT); // Контакт для тахометра !!!!!!!!!ПРЕРЫВАНИЕ 5 digitalWrite(TahometrPin, HIGH); //внутренняя подтяжка входа тахометра attachInterrupt(5, TahometrImpulse_on, FALLING); //RISING);// настройка прерывания и функции на него ... void TahometrImpulse_on() { Tahometr_impulse_count++; //увеличить счетчик импульсов } void Timer3_Timer() //обработка событий в таймере { Taho=(Tahometr_impulse_count*1000000*60)/(2*Timer_Time); // - 2 импульса на 1 оборот Tahometr_impulse_count = 0; }
Последний раз редактировалось kadushkin; 26.05.2013 в 00:30.
Рабочий код тахометра
Код://******************************************************************** unsigned long micros_th; volatile int tz; //счетчик обнуления volatile int th; //импульсы тахометра //******************************************************************** void setup(){ Serial.begin(115200); //инициализация ком порта attachInterrupt(1, tahometr, RISING); //прерывание тахометра по фронту импульса } //******************************************************************** void loop(){ Serial.print (th); tz = tz - 1; if (tz == 0){ th = 0; } delay(50); } //******************************************************************** void tahometr(){ //измеряем частоту на входе тахометра по прерыванию th=(900000.0/(micros() - micros_th)); micros_th = micros(); tz = 30; }
Последний раз редактировалось Venator; 28.05.2013 в 00:24.
super - штука
Что бы сделать адекватный тахометр без дребезга использовал этот код.
На хонде два импульса на оборот! единственно, что не понял, от куда хаотично появляется значение "9632" в виде единого скачка в процессе работы.
жду критику... я учусь сам.. и пока могу код писать коряво.ткните что ли)Код:void loop() { if (timer < millis()){ timer = millis()+100; if (M == 5){ m5 = rpm3; M = 0;} if (M == 4){ m4 = rpm3; M = 5;} if (M == 3){ m3 = rpm3; M = 4;} if (M == 2){ m2 = rpm3; M = 3;} if (M == 1){ m1 = rpm3; M = 2;} if (M == 0){ m0 = rpm3; M = 1;} if (m0 == m1 && m0 == m2 && m0 == m3 && m0 == m4 && m0 == m5){ rpm3 = 0;} if (rpm3 == 9632){} else{Serial.println(rpm3, DEC);}} void RPM (){ rpm2 = rpm; rpm = (1000000.0/(micros() - microsold))*60/2; microsold = micros(); if (rpm2 > rpm-200 && rpm2 < rpm+1000){ rpm3 = rpm;}}
Пояснте пожалуйста по поводу подключения габаритов, фар... там понятно, всё через "+". А двери по "-" же идут. как там быть ?
Эту тему просматривают: 6 (пользователей: 0 , гостей: 6)