Первый проект на arduino

Тема в разделе "Глядите, что я сделал", создана пользователем BronzeCrab, 4 окт 2013.

  1. lerik2703

    lerik2703 Гик

     
  2. Megakoteyka

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

    Источник
     
  3. BronzeCrab

    BronzeCrab Нерд

    О, благодарю, с экраном более-менее понятно. Скажите, а как правильно подключить пищалку? Я так понимаю, что одну ногу к земле, а другую на, например, 9 вход ардуины, между входом и ногой пищалки поставить резистор на 200 Ом?
     
  4. Megakoteyka

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

    Ну почему никто не пользуется поиском? :(
    Вот так.
     
  5. BronzeCrab

    BronzeCrab Нерд

    Очень хочется поделиться своим нубским happy birthday)) По-моему приятно звучит:

    #include <Tone.h>
    Tone tone1;
    void setup()
    {
    tone1.begin(9);
    }
    void loop()
    {
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_E4,1000);
    delay(1000);
    tone1.play(NOTE_D4,1000);
    delay(1000);
    tone1.play(NOTE_G4,1000);
    delay(1000);
    tone1.play(NOTE_FS4,1000);
    delay(1000);
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_E4,1000);
    delay(1000);
    tone1.play(NOTE_D4,1000);
    delay(1000);
    tone1.play(NOTE_A4,1000);
    delay(1000);
    tone1.play(NOTE_G4,1000);
    delay(1000);
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_D4,500);
    delay(500);
    tone1.play(NOTE_D5,1000);
    delay(1000);
    tone1.play(NOTE_B4,1000);
    delay(1000);
    tone1.play(NOTE_G4,500);
    delay(500);
    tone1.play(NOTE_G4,500);
    delay(500);
    tone1.play(NOTE_FS4,1000);
    delay(1000);
    tone1.play(NOTE_E4,1000);
    delay(1000);
    tone1.play(NOTE_C5,500);
    delay(500);
    tone1.play(NOTE_C5,500);
    delay(500);
    tone1.play(NOTE_B4,1000);
    delay(1000);
    tone1.play(NOTE_G4,1000);
    delay(1000);
    tone1.play(NOTE_A4,1000);
    delay(1000);
    tone1.play(NOTE_G4,1000);
    delay(1000);
    }
     
  6. Megakoteyka

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

    Следующий шаг - сделать то же самое, радикально сократив код: храните в массиве ноту, частоту звука и задержку, а проигрывайте, используя цикл ;)
    Сэкономите память и код будет выразительнее.
     
    BronzeCrab нравится это.
  7. BronzeCrab

    BronzeCrab Нерд

    Попытался:

    #include <Tone.h>

    Tone tone1;

    int notes[] = {NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4,
    NOTE_G4, NOTE_FS4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_D4,
    NOTE_A4, NOTE_G4, NOTE_D4, NOTE_D4, NOTE_D5, NOTE_B4,
    NOTE_G4, NOTE_G4, NOTE_FS4, NOTE_E4, NOTE_C5, NOTE_C5,
    NOTE_B4, NOTE_G4, NOTE_A4, NOTE_G4};
    int delay1 = 500;
    int delay2 = 1000;
    int i = 0;
    int numberOfNotes = 25;

    void setup()
    {
    tone1.begin(9);
    }
    void loop()
    {
    for (i = 0; i <= numberOfNotes; i++) {
    if (notes[ i ] == NOTE_D4 && i != 3 && i != 9)
    {

    tone1.play(notes
    [ i ],delay1);
    delay(delay1);
    }

    else if (notes
    [ i ] == NOTE_G4 && i != 4 && i != 11 && i != 23)
    {

    tone1.play(notes
    [ i ],delay1);
    delay(delay1);
    }

    else if (notes
    [ i ] == NOTE_C5)
    {

    tone1.play(notes
    [ i ],delay1);
    delay(delay1);
    }
    else
    {

    tone1.play(notes
    [ i ],delay2);
    delay(delay2);
    }
    }

    }
     
    Последнее редактирование: 19 окт 2013
  8. Megakoteyka

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

    Можно проще:
    Код (Text):
    int music[] = {
        NOTE_D4, 500,
        NOTE_D4, 500,
        NOTE_E4, 1000,
        ...
    };

    int numberOfNotes = 25;

    for(int i = 0; i < numberOfNotes; i++)
    {
        // music[2 * i + 0] - нечетные элементы массива с шагом 2
        // music[2 * i + 1] - четные элементы массива с шагом 2
        tone1.play(music[2 * i + 0], music[2 * i + 1]);
        delay(music[2 * i + 1]);
    }
    С одной стороны, массив стал в 2 раза длиннее, а с другой - мы избавились от условий и упростили код, сделав его короче и понятнее.
     
    Последнее редактирование: 17 окт 2013
  9. slyy

    slyy Официальный нерд

    Возьмите многожильный кабель (лапшу). только, надо учесть, что для дисплея еще потенциометр нужен. А навесу его не очень удобно держать.
     
  10. BronzeCrab

    BronzeCrab Нерд

    Спасибо! Здорово!
    Почему необходим потенциометр?
    Еще у меня вопрос к знатокам: как заставить все мое хозяйство (ардуино + пищалка + экран + батарейка) заработать от такого тумблера : http://amperka.ru/product/toggle-switch? Что-то мне подсказывает, что я зря его купил, а нужна мне обычная кнопка.
     
    Последнее редактирование: 18 окт 2013
  11. Megakoteyka

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

    Если нет необходимости регулировать яркость подсветки - не нужен.
    Заставить заработать - это подать питание или заставить исполнить команду?
     
  12. BronzeCrab

    BronzeCrab Нерд

    Ну, это все вместе наверно. Чтобы при нажатии кнопки все включалось: экран показывал, пищалка пищала, после следующего нажатия выключалось. Нужно разрезать проводки, идущие от батарейки и залепить их на кнопку?
     
  13. Megakoteyka

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

    Тогда и выключатель вполне сойдет, какие сомнения?
     
  14. BronzeCrab

    BronzeCrab Нерд

    Хм, да, значит я разрезаю красный провод от батарейки, наматываю его на тумблер, а черный оставляю целым?))
     
  15. Megakoteyka

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

    Типа того :)
     
  16. BronzeCrab

    BronzeCrab Нерд

    Поздравлялка почти сделана. Но остался вопрос: можно ли как-то сделать так, чтобы пищалка начинала работать одновременно с выводом текста на экран? Или можно только последовательно (как у меня сейчас - сначала весь текст, потом мелодия)?
     
  17. geher

    geher Гуру

    Нужно разбить вывод текста на небольшие фрагменты и вставить в цикл, разбив delay на части.
    Что-то вроде такого:
    было:
    Код (Text):
    delay(music[2 * i + 1]);
    стало:
    Код (Text):
    delay(music[2 * i + 1]/2);
    mytextout(i);
    delay(music[2 * i + 1]/2);
    mytextout нужно реализовать самому в виде функции, реализующей очередной фрагмент процесса вывода текста под номером, передаваемым в параметре.
    Если пойти дальше, то можно откорректировать время задержек до и после вызова функции вывода текста, чтобы учесть длительность фрагмента процесса вывода текста (или автоматически корректировать задержку после, измеряя время выполнения функции mytextout);
    Можно поделить delay не на две части. а на несколько, чтобы добиться большей плавности вывода текста.
     
  18. Максим B

    Максим B Гуру

    Фото проекта будут???
     
  19. BronzeCrab

    BronzeCrab Нерд

    Очень всем большое спасибо, кто помогал, особенно благодарю товарищей: geher, Megakoteyka, lerik2703! Вы просто спасли меня.
    Получилось все, что планировал (ну почти). Надо сказать, что провода http://www.chipdip.ru/product/mgtf-0.05/ я просто не смог использовать, потому что очень неудобно снимать с них изоляцию (сразу рвутся из-за маленького диаметра или может у меня руки такие). Хотя может быть со стриппером, а не с бокорезами было бы по-другому. http://www.chipdip.ru/product/frc-15-31/ хотел применить, но как его подключить к гнездам ардуино не допер. В результате обошелся проводами папа-мама http://amperka.ru/collection/cables-wires/product/wire-mm, изоляция снимается с них нормально. После спайки провода часто обрывались (не знаю почему, опять же наверно кривота рук, или я сильно вертел-крутил при попытке запихнуть все это в корпус).
    Фото))
    Прототипируем:
    [​IMG]
    Рядом лежит кусок, который я выпилил из корпуса под экран.
    С макеткой:
    [​IMG]
    Плату на стойках крепил (М3)
    [​IMG]
    примеряюсь к купленному корпусу ( экранчик влез хорошо, а вот остальное...)
    [​IMG]
    Вот такой по габаритам, кстати у него 2 половинки, поэтому я придумал суперсистему крепления
    верней части корпуса к нижней)). Но об этом после.
    [​IMG]
    Никогда, слышите, никогда не паяйте как я)))
    [​IMG]
    А вот так я одну часть корпуса крепил к нижней, не зря я резал отверстие под экран, этот материал пошёл на 4 крепёжные пластинки)). Без косяков не обошлось конечно.
    В тех дырках в пластинках нарезал резьбу.
    [​IMG]
    Суровая мешанина проводов, я прям горд:[​IMG]
    [​IMG]
    Почти готовое изделие, осталось надеть вторую половинку и прибавить заднюю стенку.
    [​IMG]
    Немного гравировки по вкусу:
    [​IMG]
    [​IMG]
    Спасибо за внимание. Потом я конечно винтики убрал заподлицо. На фото не финальный вариант.
     
    Последнее редактирование: 18 янв 2014
    Megakoteyka нравится это.
  20. Megakoteyka

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

    Изолентой места пайки замотать не забудьте потом :)
    Без флюса или канифоли паяли, что ли?