14 марта 2014 г.

Светодиодная шкала

Несколько вариантов работы светодиодной шкалы:
слева-направо и наоборот
Одиночное передвижение или в возрастающем порядке.
С кнопочкой пока не срослось все, но доделаю.

Главное преимущество данной работы - использование функций. На первых этапах работы не каждый начнет работу с ними, но они значительно упрощают код программы.

Так как каждая функция выдает в результат мигание, а не какое-либо значение, то функции задаются через void func, в противном случае задавалось бы через тип переменных, например, int func

#define FIRST_LED_PIN  2
#define LAST_LED_PIN   13
int pin;
int num;



void setup()
{
    for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
    pinMode(pin, OUTPUT);
}

void loop()
{
  num = num+1;
  switch(num) {
    case 1 : away1( FIRST_LED_PIN, LAST_LED_PIN, 1000); break;
    case 2 : away2( FIRST_LED_PIN, LAST_LED_PIN, 1000); break;
    case 3 : away3 ( FIRST_LED_PIN, LAST_LED_PIN, 1000); break;
    case 4 : away4( FIRST_LED_PIN, LAST_LED_PIN, 1000); break;
    default: non( FIRST_LED_PIN, LAST_LED_PIN ); break;
  }
}

void non( int minimal, int maximal ) {
  for (pin = minimal; pin <= maximal; ++pin) {
    digitalWrite(pin, LOW);
  };
};
// непрерывная дорожка, потом исчезает справа-налево
void away1(int minimal, int maximal, int long_time)
{
  for (pin = minimal; pin <= maximal; ++pin) {
    digitalWrite(pin, HIGH);
    delay(long_time);
  };
  for (pin = minimal; pin <= maximal; ++pin) {
    digitalWrite(pin, LOW);
  };
}

// непрерывная дорожка, потом исчезает слева-направо
void away2(int minimal, int maximal, int long_time)
{
  for (pin = maximal; pin > minimal; —pin) {
    digitalWrite(pin, HIGH);
    delay(long_time);
  };
  for (pin = maximal; pin <= minimal; —pin) {
    digitalWrite(pin, LOW);
  };
}

// по одному сегменту справа-налево
void away3(int minimal, int maximal, int long_time)
{
  for (pin = minimal; pin <= maximal; ++pin) {
    digitalWrite(pin, HIGH);
    delay(long_time);
    digitalWrite(pin, LOW);
  };
}

// по одному сегменту cлева-направо
void away4(int minimal, int maximal, int long_time)
{
  for (pin = maximal; pin > minimal; —pin) {
    digitalWrite(pin, HIGH);
    delay(long_time);
    digitalWrite(pin, LOW);
  };
}

Комментариев нет:

Отправить комментарий