помогите сформировать код последовательности

Тема в разделе "Arduino & Shields", создана пользователем MESS, 20 май 2014.

  1. MESS

    MESS Гик

    Ловушка - это прекращение цикла движения или полный останов программы?
     
  2. acos

    acos Официальный гик Администратор

    Да, я уже понял что это совсем не то, что вам надо. Это полная остановка, пока не придёт сигнал с тормоза.
    Попытался понять ваш код, но там очень наворочено как-то. Скорее от вас бы пояснений по его работе получить)
    Вот эта запись, например
    Код (Text):
    //****************************************************
    //*********пытаюсь усмирить  ТО    ******************************************
      if(digitalRead(TO) == 0 && digitalRead(pinN) == 0)
    {
      digitalWrite (TO, 0);
      delay(DEL_1);
      digitalWrite (pinN, 0);
      delay(DEL_1);
    }
    //*********************************
    не очень понимаю её назначение. Может как-то прокоментируете свой код что там происходит - где человек кнопки нажимает, или как вы его используете?
     
  3. acos

    acos Официальный гик Администратор

    Эту штуку например можно вот так сделать
    Код (Text):
    #include <TimerOne.h>

    volatile unsigned int increment=0;

    void setup()
    {

      Timer1.initialize(200000); // Выбираю задержку 200 мс, как кратную DEL_1..4
      //Тут было написано:
      // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
      Timer1.attachInterrupt( timerIsr ); // attach the service routine here
    }

    void loop()
    {
      // Main code loop
      // TODO: Put your regular (non-ISR) logic here
    }

    /// --------------------------
    /// Custom ISR Timer Routine
    /// --------------------------
    // Это прерывание! Эта штука будет срабатывать каждые 200 мс
    // независимо от того, в каком месте программы мы находимся
    void timerIsr()
    {
    ++increment; // вот ваш счётчик 16-битный)
    }
     
    Это библиотека TimerOne, её вот здесь взять можно http://playground.arduino.cc/Code/Timer1

    http://code.google.com/p/arduino-timerone/downloads/detail?name=TimerOne-r11.zip&can=2&q=
     
  4. MESS

    MESS Гик

    "не очень понимаю её назначение. Может как-то прокоментируете свой код что там происходит - где человек кнопки нажимает, или как вы его используете?"


    Как раз этот фрагмент у меня и не работает- я же написал "пытаюсь усмирить ТО".
    я пытался задержать ТО нулевом уровне, если исчезла команда движения.
    Никаких кнопок я не нажимаю. Полный автомат.
    Ардуино через интерфейс на делителях, подключена к центральной плате управления лифтом (главный контроллер). Ардуино выступает в роли виртуального лифта -эмулирует его. Это дает возможность без реального лифта проверить работоспособность главной платы простому электромеханику (на коленке), без вызова наладчика.
    Все входные сигналы ардуино получает от главного контроллера, который их формирует по своему алгоритму. Выходные сигналы ардуино соответствуют поведению датчиков и концевиков в шахте лифта при его работе.
    Главный контроллер, при включении питания сам посылает лифт вниз , на 1 этаж для коррекции местоположения. ( выдает сигналы TR=1 и N=1) Скетч выполняет эту команду, но после коррекции и индикации "этаж=1" почему то продолжает перебирать импульсы из массива " byte pins[3] = {TO, VN, VN};", вместо того, чтобы прекратить этот перебор. Ошибка в этом
     
  5. acos

    acos Официальный гик Администратор

    Получается, что у вас ошибка в этом месте
    Код (Text):
    byte pin = pins[state-1];
    digitalWrite(pin, 1);    // ===invers?0
    delay(DEL_1);
    digitalWrite(pin, 0);    //==== invers?1
    Именно тут выставляется эта единичка на ТО, насколько я понял. Поэтому именно здесь нужно ввести вашу проверку
    Что-то вроде
    Код (Text):

    byte pin = pins[state - 1];

    if (pin == TO)
    {
      if ((digitalRead(pinTR) == 1) && (digitalRead(TO) == 0)) //тормоз снят, подано напряжение на каатушку
        // хотя проверка digitalRead(TO)==0 скорее всего лишена смысла
        digitalWrite(pin, 1);    // ===invers?0
      delay(DEL_1);
      digitalWrite(pin, 0);    //==== invers?1
    }
    else
    {
      digitalWrite(pin, 1);    // ===invers?0
      delay(DEL_1);
      digitalWrite(pin, 0);    //==== invers?1
    }
     
     
  6. MESS

    MESS Гик

    Спасибо, Василий! Буду пробовать. Именно в этот момент закончились исправные контроллеры - все что под рукой - побиты грозой. Когда отремонтирую -сразу начну пробовать.