Перейти к содержанию

Loser7

Members
  • Постов

    2
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Коломна

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    микроконтроллеры

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения Loser7

Новичок

Новичок (1/14)

  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. В первом приближении: /* Encoder Library - NoInterrupts Example * http://www.pjrc.com/teensy/td_libs_Encoder.html * * This example code is in the public domain. */ // If you define ENCODER_DO_NOT_USE_INTERRUPTS *before* including // Encoder, the library will never use interrupts. This is mainly // useful to reduce the size of the library when you are using it // with pins that do not support interrupts. Without interrupts, // your program must call the read() function rapidly, or risk // missing changes in position. #define ENCODER_DO_NOT_USE_INTERRUPTS #include <Encoder.h> // Beware of Serial.print() speed. Without interrupts, if you // transmit too much data with Serial.print() it can slow your // reading from Encoder. Arduino 1.0 has improved transmit code. // Using the fastest baud rate also helps. Teensy has USB packet // buffering. But all boards can experience problems if you print // too much and fill up buffers. // Change these two numbers to the pins connected to your encoder. // With ENCODER_DO_NOT_USE_INTERRUPTS, no interrupts are ever // used, even if the pin has interrupt capability #define MAX_COLOR_VALUE 255 #define RED_PIN 9 // Пин красного цвета #define GREEN_PIN 10 // Пин зеленого цвета #define BLUE_PIN 11 // Пин синего цвета #define BUTT_PIN 4 // Пин кнопки энкодера: кнопка подключается между этим пином и GND #define SENS 0 // Чуствительность энкодера: больше число - меньше чуствительность #define iter 10 // Шаг изменения яркости на клик энкодера int8_t stage = 0, bMode = 0; int16_t red = MAX_COLOR_VALUE, green = 0, blue = 0; Encoder myEnc( 5, 6 ); // Пины энкодера void setup() { Serial.begin(115200); pinMode( BUTT_PIN, INPUT_PULLUP ); } long position = 0; int butPrev = 1; void loop() { long newPos = myEnc.read(); if ( abs( newPos - position ) > SENS ) { if ( newPos > position ) stepUp(); else stepDown(); position = newPos; setLED(); } /////////////////////////////// Кнопка int but = digitalRead( BUTT_PIN ); if ( but != butPrev ) { if ( but == 0 ) { Serial.println( "Button pressed" ); if ( bMode == 0 ) { red = green = blue = MAX_COLOR_VALUE; setLED(); bMode = 1; } else { red = green = blue = 0; setLED(); bMode = 0; } } butPrev = but; } } void status() { Serial.print( "Stage: " ); Serial.print( stage ); Serial.print( " R: " ); Serial.print( red ); Serial.print( " G: " ); Serial.print( green ); Serial.print( " B: " ); Serial.println( blue ); } void setLED() { status(); analogWrite( RED_PIN, red ); analogWrite( GREEN_PIN, green ); analogWrite( BLUE_PIN, blue ); } void stepUp() { switch( stage ) { case 0: red = MAX_COLOR_VALUE; blue = 0; green = min( green + iter, MAX_COLOR_VALUE ); if ( green >= MAX_COLOR_VALUE ) stage++; break; case 1: green = MAX_COLOR_VALUE; blue = 0; red = max( red - iter, 0 ); if ( red == 0 ) stage++; break; case 2: green = MAX_COLOR_VALUE; red = 0; blue = min( blue + iter, MAX_COLOR_VALUE ); if ( blue >= MAX_COLOR_VALUE ) stage++; break; case 3: blue = MAX_COLOR_VALUE; red = 0; green = max( green - iter, 0 ); if ( green == 0 ) stage++; break; case 4: blue = MAX_COLOR_VALUE; green = 0; red = min( red + iter, MAX_COLOR_VALUE ); if ( red >= MAX_COLOR_VALUE ) stage++; break; case 5: red = MAX_COLOR_VALUE; green = 0; blue = max( blue - iter, 0 ); if ( blue == 0 ) stage = 0; break; } } void stepDown() { switch( stage ) { case 0: red = MAX_COLOR_VALUE; blue = 0; green = max( green - iter, 0 ); if ( green == 0 ) stage = 5; break; case 1: green = MAX_COLOR_VALUE; blue = 0; red = min( red + iter, MAX_COLOR_VALUE ); if ( red >= MAX_COLOR_VALUE ) stage--; break; case 2: green = MAX_COLOR_VALUE; red = 0; blue = max( blue - iter, 0 ); if ( blue == 0 ) stage--; break; case 3: blue = MAX_COLOR_VALUE; red = 0; green = min( green + iter, MAX_COLOR_VALUE ); if ( green >= MAX_COLOR_VALUE ) stage--; break; case 4: blue = MAX_COLOR_VALUE; green = 0; red = max( red - iter, 0 ); if ( red == 0 ) stage--; break; case 5: red = MAX_COLOR_VALUE; green = 0; blue = min( blue + iter, MAX_COLOR_VALUE ); if ( blue >= MAX_COLOR_VALUE ) stage--; break; } }
  2. Для энкодера, насколько я помню, есть какая-то библиотека для ардуино.
×
×
  • Создать...