Страница 4 из 4 ПерваяПервая 1234
Показано с 31 по 40 из 40
  1. #31
    Пользователь Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    57
    Вес репутации
    14

    По умолчанию Re: Фен паяльный

    Не хочет через порт работать, но разобрался как вкл/выкл. А как регулировать?

  2. #32
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,154
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    через какой порт?

  3. #33
    Пользователь Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    57
    Вес репутации
    14

    По умолчанию Re: Фен паяльный

    com порт
    Если в сериал мониторе послать заглавную русскую букву "Г" то лампочка будет светится минимальным свечением
    Если в сериал мониторе послать маленькую английскую букву "d" то лампочка будет светится на 50%
    Если в сериал мониторе пробел то лампочка будет светится почти на максимуме

  4. #34
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,154
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    А сериал для чего? У Вас экодером же будет регулироваться

  5. #35
    Пользователь Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    57
    Вес репутации
    14

    По умолчанию Re: Фен паяльный

    Совершенно верно - просто я хотел опробовать работоспособность кода из шапки, и разобраться что к чему.

  6. #36
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,154
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    Я могу накидать нужные функции, просто мне сейчас некогда править полностью код

  7. #37
    Пользователь Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    57
    Вес репутации
    14

    По умолчанию Re: Фен паяльный

    Буду благодарен за функции. Я попробую сам разжевать. Вроде что то получилось - чуть позже покажу - для проверки чего я наварокосил : )

    Красотища! Заработало как нужно, повырезал лишнее из кода (мне нужно на один диммер)

    PHP код:
    #include <CyberLib.h> //Библиотека от Cyber-Place.ru
    #include <Encoder.h>
    #define PIN_ENCODER_CLK 5
    #define PIN_ENCODER_DT 6
    #define PIN_ENCODER_SW 7
    Encoder myEnc(PIN_ENCODER_DTPIN_ENCODER_CLK);
    int motorPin 3;
    int motorSpeed 75;                   // Изначальная скорость двигателя
    int fanPower 155;                    // Изначальная мощность фена
    int accel 1;
    int i 0;
    long oldPosition 0;
    volatile uint8_t ticDimmer1;

    void setup()
    {
    TCCR2B TCCR2B 0b11111000 7;
    pinMode(motorPinOUTPUT);
    D4_Out;  //Настраиваем порты на выход
    D4_Low;  //установить на выходах низкий уровень сигнала
    D2_In//настраиваем порт на вход для отслеживания прохождения сигнала через ноль

    attachInterrupt(0detect_upLOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
    StartTimer1(halfcycle40); //время для одного разряда ШИМ
    StopTimer1(); //остановить таймер
    }
    //********************обработчик и прерываний******************** ***********
    void halfcycle() //прерывания таймера
    {
    tic++; //счетчик
    if(Dimmer1 tic D4_High//управляем выходом
    }

    void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
    {
    tic=0//обнулить счетчик
    ResumeTimer1(); //запустить таймер
    attachInterrupt(0detect_downHIGH); //перепрограммировать прерывание на другой обработчик
    }

    void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
    {
    StopTimer1(); //остановить таймер
    D4_Low//логический ноль на выходы
    tic=0//обнулить счетчик
    attachInterrupt(0detect_upLOW); //перепрограммировать прерывание на другой обработчик
    }
    //**************************************** *********************************
    void loop()
    {
      
    analogWrite(motorPinmotorSpeed);  // Устанавливаем первоначальную скорость
    //=== ручка энкодера/регулироака
      
    long newPosition myEnc.read() / accel;    
      if (
    newPosition oldPosition
      {      
        
    analogWrite(motorPinnewPosition);
        
    motorSpeed += 5;                  // Прибавляем скорость
        
    if ( motorSpeed 255 )
        
    motorSpeed 255;

        
    fanPower -= 5;                   // Прибавляем мощность фена
        
    if ( fanPower 0)
        
    fanPower 0;
      }
      else
      if (
    newPosition oldPosition)
      {
        
    analogWrite(motorPinnewPosition);        
        
    motorSpeed -= 5;                  // Убавляем скорость
        
    Serial.println("<<<");
        if ( 
    motorSpeed 75 )
        
    motorSpeed 75;

        
    fanPower += 5;                   // Убавляем мощность фена
        
    if ( fanPower 255)
        
    fanPower 255;
      } 
      if ( 
    newPosition != oldPosition)
      {
        
    = (1)%16;
        
    oldPosition newPosition;
        
    analogWritemotorPinmotorSpeed );
        
    Dimmer1fanPower;
      } 

    Последний раз редактировалось Kevin; 19.02.2018 в 02:02.

  8. #38
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,154
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    Я так понял что уже не требуется помощь?

  9. #39
    Пользователь Аватар для Kevin
    Регистрация
    02.02.2018
    Возраст
    47
    Сообщений
    57
    Вес репутации
    14

    По умолчанию Re: Фен паяльный

    На данном этапе нет, но будет вопрос позже.

  10. #40
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    48
    Сообщений
    13,154
    Вес репутации
    10

    По умолчанию Re: Фен паяльный

    Накидал скетч арудуины для управлениия диммером, при помощи энкодера. Сам не проверял
    Нужно проверить работоспособность. Выводы энкодера и диммера можно переназначить в шапке
    Код:
    #include <CyberLib.h> //Библиотека от Cyber-Place.ru
    
    // Выводы ЭНКОДЕРА
    #define CLK 3  // Clock Подключаем к INT1, нельзя переназначать
    #define DT 4  // второй вывод энкодера
    #define SW 5  // switch кнопка энкодера
    
    
    #define ZD 2  // zero detection детектор ноля
    #define GT 6  // Gate Triac управление симистором
    #define Min 0 // минимальное значение диммера для устранения мерцания
    #define Max 255 //максимальное значение диммера для устранения мерцания
    
    
    volatile uint8_t tic, dimmer=0;
    boolean DT_last; // последнее состояние энкодера
    
    
    
    
    void setup()  
    {
      pinMode(CLK,INPUT_PULLUP); // Clock Подключаем к INT1, нельзя переназначать
      pinMode(DT, INPUT_PULLUP); // второй вывод энкодера
      pinMode(SW, INPUT_PULLUP); // кнопка энкодера
      pinMode(ZD, INPUT);     // детектор нуля
      pinMode(GT, OUTPUT);    // управление симистором
      digitalWrite(GT, 0);    // отключить симмистор
    
    
      attachInterrupt(0, detect_up, LOW);  // настроить срабатывание прерывания int0 на низкий уровень
      attachInterrupt(1, encoderTick, CHANGE); // прерывания от Энкодера
      
      StartTimer1(halfcycle, 40);        // время для одного разряда ШИМ в мкс
      StopTimer1();                      //остановить таймер
      
      DT_last = digitalRead(CLK);         // считываем положение CLK
      Serial.begin(115200);           // для отладки
    }
    
    
    void loop()
    {
      Serial.println(dimmer); 
      delay(100);         
    }
    //********************обработчики прерываний*******************************
    void halfcycle()  //прерывания таймера
    { 
      tic++;  //счетчик  
      if( dimmer < tic ) digitalWrite(GT, HIGH); //управляем выходом на симистор
    }
    
    
    void  detect_up()  // обработка внешнего прерывания. Сработает по переднему фронту
    {  
     tic=0;             //обнулить счетчик
     ResumeTimer1();   //запустить таймер
     attachInterrupt(0, detect_down, HIGH);  //перепрограммировать прерывание на другой обработчик
    }  
    
    
    void  detect_down()  // обработка внешнего прерывания. Сработает по заднему фронту
    {   
     StopTimer1();                      //остановить таймер
     digitalWrite(GT, LOW);             //логический ноль на выход
     tic=0;       //обнулить счетчик
     attachInterrupt(0, detect_up, LOW); //перепрограммировать прерывание на другой обработчик
    } 
    
    
    void encoderTick()     // Обратка прерываний от Энкодера
    {
      uint8_t DT_now = digitalRead(CLK);  // считываем текущее положение CLK
      
      if (DT_now != DT_last)              // если предыдущее и текущее положение CLK не равны, значит был поворот 
      {                     
        if (digitalRead(DT) != DT_now)    // если DT не равен CLK, значит вращение по часовой стрелке
        {                             
          if( dimmer < Max ) dimmer++;    // прибавить яркость
        } else {                          // если DT равен CLK, значит вращение против часовой
                 if( dimmer > Min ) dimmer--;  // убавить яркость           }
                }
      }         
      DT_last = DT_now;                   // сохранить положение CLK для следующей проверки
    }
    Последний раз редактировалось Chip; 20.02.2018 в 21:13.

Страница 4 из 4 ПерваяПервая 1234

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

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

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

Ваши права

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