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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #9
    Продвинутый
    Регистрация
    28.11.2010
    Возраст
    61
    Сообщений
    241
    Вес репутации
    231

    По умолчанию Re: PPM энкодер на ...дуино

    Сегодня ночью появилось время и я продолжил.

    PHP код:
    #include <TimerOne.h>
    #include <TinyGPS.h>
    #include <EEPROM.h>
    #include <Servo.h>

    volatile uint16_t timerCount;
    #define BTNPIN 2 //Входной сигнал PPM
    int ppmImpuls[9]; // Массив импульсов для паузы и 8 каналов
    int chImpuls[9] = {1000100100100100100100100100}; // Массив средних значений для паузы и 8 каналов
    int chanel // Номер канала
    int minImpuls 45 // Минимальный импульс (450 us)
    int maxImpuls 155// Максимальный импульс (1550 us)
    int minPausa 500// Минимальная пауза (5000 us)
    int maxPausa 1300// Максимальная пауза (13000 us)
    Servo servo1;
    Servo servo2;

    void setup()    
    {      
      
    servo1.attach(37);
      
    servo2.attach(36);
      
    servo1.writeMicroseconds(1500); // устанавливает привод в среднее положение
      
    servo2.writeMicroseconds(1500); // устанавливает привод в среднее положение
      
    Serial.begin(115200);
      
    pinMode (BTNPININPUT);
      
    Timer1.initialize(10);                  
      
    Timer1.attachInterrupt(callback);
      
    attachInterrupt(0impDownRISING);
    }    

    void loop()    
    {      
      for (
    int i=0<= 8i++)
        {
          
    chImpuls[i] = (chImpuls[i] + ppmImpuls[i]) / // усреднение 3 импульсов
          //Serial.print(i); Serial.print("="); 
          //Serial.print(chImpuls[i]); Serial.print(" ");
        
    }     
          
    Serial.println("");
          
    //delay (200);
          
    servo1.writeMicroseconds(chImpuls[1]*10); 
          
    servo2.writeMicroseconds(chImpuls[2]*10); 
    }  

    void callback() { timerCount++; } //--------- Счетчик------------

    void impUp() //---------- Функция обработки положительного импульса   
    {
      
    detachInterrupt(0);
      
    timerCount=0;
      
    attachInterrupt(0impDownRISING);    
    }    

    void impDown() // Функция обработки отрицательного импульса

      
    int ppm timerCount;
      
    detachInterrupt(0);
      if( 
    ppm minPausa ) { chanel=; } else { chanel ++ ; }
      
    ppmImpuls[chanel] = ppm ;
      
    attachInterrupt(0impUpFALLING);   

    Файл-сафе теперь нужно реализовывать.
    Что можно сделать с контролем над сигналом, шум подвешивает порт. Также перестают сервы следить за положением стиков. Резет при вкл. передатчике, все работает, но до выключения передатчика.
    Последний раз редактировалось Mastar; 24.11.2011 в 10:03.
    Мои проекты - Катер для рыбалки

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

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

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

Ваши права

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