Работа с буззером-пищалкой
- Войдите на сайт для отправки комментариев
Ср, 16/12/2015 - 18:34
Доброго дня суток форумчане!
Прикупил я вчера Adruino uno и вот уже несколько часов не могу сделать так что-бы буззер начинал пищать по достижению значения "9" .Пищит он у меня весь цикл секундомера. Подскажите где я ошибаюсь. Буду чертовски счастлив и благодарен . :-)
#define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 #define BUZZER 13 byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); pinMode(BUZZER, OUTPUT); } void loop() { int number = (millis() / 100) % 10; int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); if (digitalRead(SEGMENT_COUNT) == 0b01111111); {digitalWrite(BUZZER, LOW); int frequency = 0; tone(BUZZER, frequency, 20); digitalWrite(BUZZER, LOW); } } }
Точка с запятой в 23-й строке - лишняя.
И спасибо за оригинальное название темы.
Переименовал.
Извиняюсь за название .
Точка с запятой не лишняя , все работает , но не так как мне бы хотелось.
Что значит не лишняя, по правилам языка её там не должно быть.
Общеизвестный факт: программа работает так, как ее написал программист, но совсем не так, как хотел написать.
Вопрос не о синтаксисе . Можно ближе к телу?
Вот еб так еб, как же не в синтаксисе. Твой буззер должен бузить при выполнении условия из 23ей строки ты её похерил точказапятой, посему он бузит постоянно.
Спасибо , исправил . Не помогло.
Теперь все выглядит вот так.
Загадок много.
И вопросы есть.
Я так понимаю, что циклы в строке 12 и 21 должны гонять по одним и тем же позициям?
В строке 24 Вы всегда читаете пин 7. А для того, чтобы он был равен 0, его надо туда записать. И записываться туда он может только в 23 строке. При i = 5, но! enableSegment в строке 22 при i = 5 не будет равен 0.
Надо исправить.
Да , цикл от 12 до 21 перебирает цифры на восьмисегментом индикаторе от 0 до 9 .
Я не совсем понимаю что вы имеете в виду . Задачка моя включить буззер на некоторое время при значении 9 на индикаторе . А буззер пищит весь цикл перебора цифр .
Skvidward, что вы не понимаете? У вас в 24 строке полная чушь -> if (digitalRead(7)==127) так понятнее?
Понял что чушь .Подскажите пожалуйста как считать значение индикатора по другому?
Огромное спасибо ! Я и не думал что так просто . Не мог понять почему он у меня в начале кода схавал байтовые значения а в конце нет . :-)