Учу пробую и застопорился с вопросом
- Войдите на сайт для отправки комментариев
Ср, 07/09/2016 - 14:48
Добрый день учась и только в самом начале нахожусь. и вот пробую свое сделать и гдето накасячил.
хочу сделать последовательное переключение светодиодов а неполучается переключается на 1 и сразу назад
вот код. что сделано не так ? (Ардино уно)
#define FIRST_LED_PIN 2
#define LAST_LED_PIN 11
#define button_x 12
#define button_y 13
void setup()
{
for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin)
pinMode(pin, OUTPUT);
pinMode(button_x, INPUT);
pinMode(button_y, INPUT);
}
void loop()
{
int x, y;
if (digitalRead(button_y) == HIGH)
{
x += 1;
}
if (digitalRead(button_x) == HIGH)
{
x -= 1;
}
y = constrain(x, 0, 9);
int pin = FIRST_LED_PIN + y;
digitalWrite(pin, HIGH);
delay(10);
digitalWrite(pin, LOW);
}
даже если вдруг "++pin" и имеет какой-то смысл, то цикл for() организован не правильно.
переменная "х" - сбрасывается каждый цикл loop()
ок так и происходит сбрасывает x на 0
как делают чтоб несбрасывало или изначально подход неверный.
А цикл for() чтоб не прописывать кучу раз теже строки этот кусок рабочий проверял в разных вариантах, играюсь с начальными уроками.
хочу сделать последовательное переключение светодиодов а неполучается переключается на 1 и сразу назад
Тут правильно, но читать тяжело. Вместо
Напишите
for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin) { pinMode(pin, OUTPUT); }Раз значение x Вы используете в следующих вызовах loop(), то укажите это компилятору
...
Можно и так, но правильней x сделать локальной статической.
А переменная y Вам вообще не нужна, как я вижу. Можно ведь так:
#define FIRST_LED_PIN 4 #define LAST_LED_PIN 13 #define button_x 2 #define button_y 3 int x; void setup() { for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; ++pin) { pinMode(pin, OUTPUT); digitalWrite(pin, LOW); } pinMode(button_x, INPUT); pinMode(button_y, INPUT); } void loop() { if (digitalRead(button_y) == HIGH) x++; if (digitalRead(button_x) == HIGH) x--; int pin = FIRST_LED_PIN + constrain(x, 0, 9); digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); }ММ....дя красиво и мусора нет, Практика!. Спасибо за помощь буду дальше учится.
Зачем строка 14 ? Разве при инициализации выхода ему не устанавливается нулевое значение.
Зачем строка 14 ? Разве при инициализации выхода ему не устанавливается нулевое значение.
Паранойя в программировании, не осуждается, а приветствуется )
Если серьезно, то когда один и тот же код таскается из одного проекта другой, причем для разных архитектур, привыкаешь в коде явно указывать, что же тебе надо.
Я, например, могу написать:
Что, вроде бы совершенно излишне для подавляющего большинства реализаций С, так как они область статических переменных всегда инициализируют нулями. Но зато явно видно, что я хотел.
Паранойя в программировании, не осуждается, а приветствуется )
тогда уж так:
#define FIRST_LED_PIN 4 #define LAST_LED_PIN 13 #define BUTTON_X_PIN 2 #define BUTTON_Y_PIN 3 void setup(){ for (int pin = FIRST_LED_PIN; pin <= LAST_LED_PIN; pin++) { pinMode(pin, OUTPUT); digitalWrite(pin, LOW); } pinMode(BUTTON_X_PIN, INPUT); pinMode(BUTTON_Y_PIN, INPUT); } void loop(){ static int pin = FIRST_LED_PIN; if (digitalRead(BUTTON_Y_PIN) == HIGH){ pin++; } if (digitalRead(BUTTON_X_PIN) == HIGH) { pin--; } pin = constrain(pin, FIRST_LED_PIN, LAST_LED_PIN); digitalWrite(pin, HIGH); delay(10); digitalWrite(pin, LOW); }Паранойя в программировании, не осуждается, а приветствуется )
Если серьезно, то когда один и тот же код таскается из одного проекта другой, причем для разных архитектур, привыкаешь в коде явно указывать, что же тебе надо.
Хмм, пожалуй соглашусь.