Digispark игнорирует кнопку

Тема в разделе "Микроконтроллеры AVR", создана пользователем dmb, 24 сен 2020.

  1. b707

    b707 Гуру

    и еще - в порядке бреда - я б имя "button" заменил на что-то более уникальное. например "BUTTON_DMB"
    А то мало ли, вдруг "button" где-нибудь в недрах Ардуино ИДЕ уже используется.
    Старайтесь не выбирать для имен переменных и процедур подобныее названия - иногда возникают глюки, причины которых потом очень трудно найти
     
  2. dmb

    dmb Нерд

    На втором пине (если в скетче прописан второй пин для кнопки) буззер молчит - хоть с сопротивлением, хоть без. На первом (если прописан первый пин для кнопки) - перебирает все тона, хоть с сопротивлением, хоть без.
     
  3. b707

    b707 Гуру

    уже лучше, теперь попробуйте кнопку подключить к пину 2
     
  4. parovoZZ

    parovoZZ Гуру

    компилятор ругнется.

    именно такие глюки очень просто выводятся на чистую воду с помощью дебаггера.
     
  5. b707

    b707 Гуру

    если предупреждения не выключены
     
  6. dmb

    dmb Нерд

    Дело в том, что он не должен молчать - а должен при запуске, без нажатия кнопки - сразу непрерывно издавать первую частоту, а нажатие кнопки должно переключать на следующую частоту, следующее нажатие - на третью в списке - и так далее, "по кругу". То есть молчание - не есть хороший знак, а может указывать - что пин подгорел или еще что-то ...))
     
  7. parovoZZ

    parovoZZ Гуру

    Процессор в принципе ни кому ничего не должен. Он тупо отрабатывает код так, как он написан. Чтобы понимать, как он это делает, необходимо немного изучить процессор.
     
  8. dmb

    dmb Нерд

    Если буттон прописан к 1 ноге - то звук есть, правда, немного не так, как нужно, если буттон приписан ко второй ноге - то динамик молчит. Что это может значить? (сам динамик и в первом, и во втором случае прописан и подключен к нулевой ноге).
     
  9. akl

    akl Гуру

    пины 2 и 3 используются для юсб, может в этом дело?
    [​IMG]
     
  10. parovoZZ

    parovoZZ Гуру

    доброе утро, страна!
     
  11. parovoZZ

    parovoZZ Гуру

    Да всего-то надо выжечь V-USB из недр дуринки и всё заработает как и обычно. Но тогда как же прошивать? Программатор будет нужОн. К такому развороту событий ТС явно не готов))
     
  12. dmb

    dmb Нерд

    Сейчас еще раз попробовал - работает и с прописаным для кнопки вторым пином - но работает так же не правилно: то есть, динамик перебирает все указанные девять частот по кругу, с интервалом полсекунды, хотя должен без нажатия кнопки играть только первый тон (174) и не переходить к другим, пока не нажата кнопка. Под кнопку прописывал разные пины - но кнопку (для теста) даже не припаивал. Посоветовали тот пин, к которому приписана кнопка - хотя бы подтянуть к vcc сопротивлением, но результат остался тот же. Сам динамик все разы был подключен к нулевому пину. Буду пробовать переставлять и его на другие пины - может в этом дело.
     
  13. parovoZZ

    parovoZZ Гуру

    наугад программы для процессоров не пишут. Увы.
     
    b707 нравится это.
  14. b707

    b707 Гуру

    вы бы попытались понять, как это работает, вместо того чтоб пины методом тыка подбирать.
    У вас по коду все правильно, ищите какой-нить неочевидный косяк, может у вас на плате "сопля" в пайке и дорожку на GND замкнуло
     
  15. parovoZZ

    parovoZZ Гуру

    а лучше почитать книжку Евстифеева про МК AVR. Читается вся за пару вечеров.
     
    Igor68 нравится это.
  16. dmb

    dmb Нерд

    Если пин кнопки подтянут сопротивлением к +5 - то динамик молчит, нажатие кнопки включает его на полсекунды потом он опять замолкает, следующее нажатие заставляет воспроизводить следующий тон - потом опять замолкает. Почто то, что надо - но не то, ведь он должен НЕПРЕРЫВНО воспроизводить каждый тон, кнопка переключает на следующий, который воспроизводится тоже НЕПРЕРЫВНО. Так этот код работает на Ардуино нано и предполагалось, что на диджиспарк будет работать точно так же - ан нет.
    Если же пин кнопки подтянут сопротивлением к GND - то, как и ранее - перебирает все тона по порядку, с интервалом полсекунды, как будто кнопка постоянно зажата. Плата вроде целая, пробовал на 2 разных, результат тот же. Ума не приложу - что еще может быть причиной, предполагаю, что все-таки код для Attiny должен быть немного другой...
     
  17. parovoZZ

    parovoZZ Гуру

    почему как-будто?
     
  18. SergeiL

    SergeiL Оракул Модератор

    1) Ну а если в loop оставить только tone, if c { } закомментировать, и попробовать, будет постоянный звук?
    2) Вы от USB его отключаете, когда пробуете?
     
  19. dmb

    dmb Нерд

    Сделал вот так:
    Код (C++):
    void loop()
    {
      tone(buzzerPin, frequency[pos]);
    /*  if (!digitalRead(buttonPin)) */
       {  
        pos++;
        delay(500);
      if (pos == count) pos = 0;
      }
    }
    - опять перебирает все частоты самопроизвольно;

    Сделал так
    Код (C++):
    void loop()
    {
      tone(buzzerPin, frequency[pos]);
    /*  if (!digitalRead(buttonPin))  
       {  
        pos++;
        delay(500);
      if (pos == count) pos = 0;
      }*/

    }
    - вообще молчит и на кнопку не реагирует.

    Для проб подключаю по USB (третий и четвертый пин не задействую)
     
  20. Andy16

    Andy16 Гик

    Может, как-то так надо?
    Код (Text):
    void setup()
    {
      pinMode(Sound, OUTPUT);
      pinMode(button, INPUT_PULLUP);
      tone(Sound, frequency[pos]);
    }

    void loop()
    {
      if (!digitalRead(button))
      {
        pos++;
        delay(500);
        if (pos == count) pos = 0;
        tone(Sound, frequency[pos]);
      }
    }
     
    dmb нравится это.