Генератор импульсов на Arduino Uno

Тема в разделе "Arduino & Shields", создана пользователем Александр_Kit, 4 дек 2013.

  1. Привет всем умникам=) У меня небольшая проблема. Собираю схему аппарата для магнитотерапии, компоненты уже все купил. И хочу чтобы импульсы длиной 15 мс и с паузой в 2 секунды подавались с ардуино дальше на плату, где стоит диод который формирует треугольный импульс из того, что пришло с генератора.
    Но вот беда. Скетча генератора не нашел, а сам его писать пока не умею( купил ардуино 4 дня назад). Есть ли здесь люди которые могут помочь написать скетч и объяснить мне дураку, как он работает?
     
  2. Да и еще должен работать на нескольких частотах 10, 17, 30, 50, 100 Гц. Причем управляется с кнопки без фиксации. Для меня пока вообще не выполнимая задача.
     
  3. Megakoteyka

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

    Как работает пример blink разобрались? Возьмите его за основу и переделывайте под свои нужды. Все то же самое, только значения задержек сменить нужно будет.
     
  4. Да, спасибо) разобрался, вот только не понимаю, как дописать скетч на то, чтобы он при нажатии кнопок переключал 5 режимов работы(т.е. менял частоту).
     
  5. Megakoteyka

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

    Нажатие кнопки умеете обрабатывать?
    Нужно завести массив с временами задержки и переменную для хранения текущей позиции в массиве. По нажатию кнопки циклически менять значение этой переменной.
     
  6. Не умею.только что заставил мигать диод с помощью прерывания отдельно от основной программы, где также стоит диод, но теперь уже с кнопкой с фиксацией. Текст программы: "пока используется только кнопка Push = 12.


    #include <TimerOne.h>


    // Pin 13 has an LED connected on most Arduino boards.
    // give it a name:
    int led = 13;
    int Push = 12;
    int Push2 = 8;
    int Push3 = 7;

    // the setup routine runs once when you press reset:
    void setup()
    {
    // initialize the digital pin as an output.
    pinMode(led, OUTPUT);
    pinMode(Push, INPUT);
    pinMode(Push2, INPUT);
    pinMode(Push3, INPUT);
    Timer1.initialize(); // 1 секунда по умолчанию - то, что надо
    Timer1.pwm(10, ); // полсекунды светимся (512 / 1024), на полсекунды гасим

    pinMode(10, OUTPUT);
    Timer1.attachInterrupt(Timer1_action);
    }


    void Timer1_action()
    {
    // LED секунду горит, секунду - нет
    digitalWrite(10, !digitalRead(10));
    }
    // the loop routine runs over and over again forever:

    void loop()
    {
    if (digitalRead(Push) == HIGH)
    {
    digitalWrite(led, HIGH);
    }
    else
    {
    digitalWrite(led, LOW);
    }
    }
     
  7. Megakoteyka

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

    Библиотека для обработки нажатия кнопок живет тут: http://playground.arduino.cc/code/bounce

    Вот так по нажатию кнопки можно перебирать значения задержек:
    Код (Text):
    #include <Bounce.h>

    #define DELAY_COUNT 5
    int delayValues[DELAY_COUNT] = {
      100, 200, 300, 400, 500 };
    int delayIndex = 0;

    #define BUTTON 12
    #define LED 13

    // Instantiate a Bounce object with a 5 millisecond debounce time
    Bounce bouncer = Bounce(BUTTON, 5);

    void setup()
    {
      pinMode(BUTTON,INPUT);
    }

    void loop()
    {
      // обновить состояние кнопки
      bouncer.update( );

      // если кнопка нажата
      if(bouncer.read() == HIGH)
      {
        // прибавили номер задержки
        delayIndex++;

        // если номер задержки превышает длину
        // массива задержек - сбросить его в 0
        if(delayIndex == DELAY_COUNT)
          delayIndex = 0;
      }

      // текущая задержка, выбираемая нажатиями кнопки
      int delayValue = delayValues[delayIndex];
    }