Показано с 1 по 10 из 1174

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Разработчик VENATOR Аватар для Venator
    Регистрация
    27.01.2013
    Сообщений
    90
    Вес репутации
    285

    По умолчанию Re: Панель приборов.

    Рабочий код тахометра
    Код:
    //********************************************************************
    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.

  2. #2
    Новичок Аватар для Unlim
    Регистрация
    01.04.2010
    Возраст
    34
    Сообщений
    18
    Вес репутации
    182

    По умолчанию Re: Панель приборов.

    Что бы сделать адекватный тахометр без дребезга использовал этот код.
    На хонде два импульса на оборот! единственно, что не понял, от куда хаотично появляется значение "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;}}
    жду критику... я учусь сам.. и пока могу код писать коряво.ткните что ли)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 4 (пользователей: 0 , гостей: 4)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •