Уважаемые форумчане! Приветствую вас. Я новичок в ардуино. Изучая вики и реализуя примеры, собрал пару семи сегментных индикаторов и запустил скетч с выводом времени после включения ардуины. Жаль пока разбирать схему и хотел опробовать еще пару интересных скетчей. Например, подсоединил кнопку к 8 пину. Помогите со скетчем. Логика простая нажатие на кнопку прибавляет единицу и выводит на индикаторы. Мне пока сложно с кодом нужно наглядно, что бы разбираться. P.S. Уважаемая Амперка сделайте больше примеров с использованием деталей которые у вас приобретают. Вот пока что имею
PHP: /* Не используйте этот код! Он не реагирует на нажатия кнопки. HIGH == 1, buttonPin == 8 1 !== 8 Следовательно условие "if" в loop`е никогда не будет выполнено, независимо от состояния кнопки. */ int clock_pin = 2; // тактовая частота int reset_pin = 3; // сброс счетчика int buttonPin = 8; // кнопка int i = 1; // цифра, которую выводим на индикатор void setup(){ pinMode(clock_pin, OUTPUT); pinMode(reset_pin, OUTPUT); pinMode (buttonPin, INPUT); shownumber(i); // выводим 1 } void shownumber(int num){ digitalWrite(reset_pin, HIGH); digitalWrite(reset_pin, LOW); while(num--){ digitalWrite(clock_pin, HIGH); digitalWrite(clock_pin, LOW); } } void loop(){ if (buttonPin == HIGH) // если кнопка нажата { i++; // увеличиваем счётчик на 1 shownumber(i); // выводим на индикатор delay(500); // ждём 500 мс } }
Спасибо, за быстрый ответ. Но не щелкает, выводит единицу и не прибаляет. Добавил строчки для отслеживания через терминал.
Нужно добавить еще reset перед циклом, т.к. начинает с "2". Можно прокоментировать эти строки Код (Text): void shownumber(int num){ reset(); while(num--){ digitalWrite(clock_pin, HIGH); digitalWrite(clock_pin, LOW); } } void reset(){ digitalWrite(reset_pin, HIGH); digitalWrite(reset_pin, LOW); } Индикатор пропускает значения, в терминале все хорошо ((
PHP: int CLOCK_PIN = 1; // тактовая частота int RESET_PIN = 2; // сброс счетчика int buttonPin = 8; // кнопка int i = 1; // цифра, которую выводим на индикатор void setup(){ pinMode(CLOCK_PIN, OUTPUT); // CLOCK_PIN как выход pinMode(RESET_PIN, OUTPUT); // RESET_PIN как выход pinMode (buttonPin, INPUT); // buttonPin как вход // обнуляем индикатор digitalWrite(RESET_PIN, HIGH); digitalWrite(RESET_PIN, LOW); showNumber(i); // выводим единицу Serial.begin(9600); //поднимаем соединение Serial.print(i); // пишем в терминал единицу } void showNumber(int n) // показываем цифру { // Первым делом обнуляем текущее значение digitalWrite(RESET_PIN, HIGH); digitalWrite(RESET_PIN, LOW); // Далее быстро "прокликиваем" счётчик до нужного // значения while (n--) { digitalWrite(CLOCK_PIN, HIGH); digitalWrite(CLOCK_PIN, LOW); } } void loop(){ int knopkaState=digitalRead(buttonPin); // получаем состояние кнопки if (knopkaState==HIGH) // если нажата, то { i++; // увеличиваем счётчик на 1 showNumber(i); // выводим на индикатор Serial.print(i); // пишем в терминал delay(500); // ждём 500 мс } }
Я бы порекомендовал посмотреть всё, что есть тут http://wiki.amperka.ru/ Когда решил попробовать индикатор с микросхемой предлогаемой Амперкой, не стал даже Ардуино подключать. Правильно оформленная кнопка с конденсатором и резисторм прекрасно переключает цифирки одну за одной. Это я к тому, что на вход Ардуины, тоже кнопку не просто подключают... Ещё одно наблюдение, схеме нужен ресет, микросхемы этой технологии сохраняют своё состояние, без источника питания, довольно долго, больше суток не пробовал, но сутки держат.
Видео уроки все посмотрел и проработал те, на которые хватало компонентов. Так я кнопку правильно подключил и подтянул к земле. Это как раз узнал из видео уроков. В терминал пишет очень четко! Но вот с индикаторами пока не очень! Отлавливать глюк пока не хватает знаний. Спасибо еще раз. Уже сижу, мучаю LCD (20x4). )))