Несколько вариантов работы светодиодной шкалы:
слева-направо и наоборот
Одиночное передвижение или в возрастающем порядке.
С кнопочкой пока не срослось все, но доделаю.
Главное преимущество данной работы - использование функций. На первых этапах работы не каждый начнет работу с ними, но они значительно упрощают код программы.
Так как каждая функция выдает в результат мигание, а не какое-либо значение, то функции задаются через 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);
};
}
слева-направо и наоборот
Одиночное передвижение или в возрастающем порядке.
С кнопочкой пока не срослось все, но доделаю.
Главное преимущество данной работы - использование функций. На первых этапах работы не каждый начнет работу с ними, но они значительно упрощают код программы.
Так как каждая функция выдает в результат мигание, а не какое-либо значение, то функции задаются через 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);
};
}
Комментариев нет:
Отправить комментарий