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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11
    Местный
    Регистрация
    04.08.2009
    Возраст
    44
    Сообщений
    184
    Вес репутации
    233

    По умолчанию Re: Парктронник

    И так первую проблему решил

    Принимаются советы по улучшению/оптимизации скетча

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

    #define LEDPIN 13        // Вывод светодиода
    #define BTNPIN 2 

    volatile uint16_t startImpuls;
    volatile uint16_t lengthImpuls;
    volatile uint16_t timerCount=0;

    //byte buffPos = 0;

    byte packet[2];
    byte posInPacket=0;

    byte startBYTE 15;

    void setup()
    {  
    /*
        LOW — вызов прерывания всякий раз, когда на порту низкий уровень напряжения;
        CHANGE – прерывание вызывается при изменении значения на входе;
        RISING – вызов прерывания при изменении уровня напряжения с низкого (LOW) на высокое(HIGH)
        FALLING – вызов прерывания при изменении уровня напряжения с высокого (HIGH) на низкое (LOW)
      */
      
    startImpuls=0;
      
    lengthImpuls=0;
      
      
    pinMode(BTNPININPUT);  
      
      
    Serial.begin(115200);
      
      
    Timer1.initialize(20);
      
    Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt

      
    attachInterrupt(0fireUpRISING);
    }
    void callback() {  timerCount++; }

    void loop()
    {
      if (
    lengthImpuls 0)
      {
        
    uint16_t temp=0;
        
    uint16_t li lengthImpuls;
        
    lengthImpuls=0;
        
        
    //--------------------------//
        // получена приамбула "1 1 1 1"
        
    if (li >50 && li <60)
        {
           
    posInPacket =0;
        }
        
    // Расчитываю позицию массиве
        
    temp posInPacket 8;
        
    uint16_t bitPos posInPacket;
        
    // Разворачиваю позицию для метода bitSet(x,n)
        
    bitPos bitPos;
        if (
    bitPos >= 8)
        {
          
    bitPos =  posInPacket - (8*temp);
        }
       
        
    // Получен "0"
        
    if (li >&& li <6)
        {
          
    posInPacket ++;
        }

         
    // Получен "1"
        
    else if (li >10 && li <15)
        {
          
    bitSet(packet[temp],bitPos);
          
    posInPacket ++;
        }
        
    //digitalWrite(13,LOW);
        // Отправить пакет "большему брату"
        
    if (posInPacket 15)
        {
          
    detachInterrupt(0);
         
         
    // Если есть препятствие тогда посылаем пакет
         
    if ((packet[0] & 8) == 0)
            
    Serial.write(packet,2);
          
          
    // сбрасываю буффер
          
    packet[0] = 0;
          
    packet[1] = 0;
          
          
    posInPacket 0;
          
          
    attachInterrupt(0fireUpRISING);
        }
        
        
    //--------------------------//
      
    }
     }

    // Функция обработки прерывания на подъем
    void fireUp()
    {

      
    detachInterrupt(0);
      
    startImpuls timerCount;
      
    attachInterrupt(0fireDownFALLING);
    }

    // Функция обработки прерывания на подъем
    void fireDown()
    {
      
    detachInterrupt(0);
      
    lengthImpuls timerCount startImpuls;
      
    startImpuls=0;
      
    timerCount=0;
      
    attachInterrupt(0fireUpRISING);

    Последний раз редактировалось oops1; 20.02.2011 в 01:07.

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

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

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

Метки этой темы

Ваши права

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