Tramp

Arduino, I need your help

8 повідомлень у цій темі

Приветствую!

Возможно кто-то сталкивался и может подсказать. Суть задачи: есть некоторое количество циклов, выполнение которых хотелось бы задать по времени (а не нажатием кнопок). Цикл 1 выполняется 5 сек => пауза 2 сек. => цикл 2 выполняется 5 сек. => пауза 2 сек. => ...

кусок циклов

{
    digitalWrite(12, HIGH);
    delayMicroseconds(1897);      //tachometr 8'000 RPM
    digitalWrite(12, LOW);
    delayMicroseconds(1897);
  }
  {
    digitalWrite(12, HIGH);
    //delayMicroseconds(2350);      //tachometr 6'500 RPM
    digitalWrite(12, LOW);
    //delayMicroseconds(2350);
  }

 

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

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Если без диспетчера задач, то можно примерно зная время выполнения каждого цикла подсчитать сколько раз его нужно выполнить.  Второй вариант - запустить аппаратный таймер и считать некие интервалы времени (например приращивая по преыванию таймера какую нибудь переменную) и в основной программе анализируя ее значение отправлять выполнять тот или иной цикл (это в принципе и будет что то типа диспетчера).

 

Змінено користувачем DimonDSS
0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Например  (используем библиотеку https://alexgyver.ru/lessons/timer-isr/)

 

#include "GyverTimers.h"

int time=0; // Глобальная переменная времени

void setup() {

     // запустим второй таймер

     Timer2.setPeriod(1000000); // Устанавливаем период таймера 1000000 мкс -> 1 гц

     Timer2.enableISR(CHANNEL_A); // Или просто .enableISR(), запускаем прерывание на канале А таймера 2

}

void loop() {

if (time<5)

   CYCLE1();

   else if (time<7)

    PAUSE1();

    else if (time<12)

    CYCLE2();

    else if (time<14)

    PAUSE2();

    else time=0;

 }

 

 

// Прерывание А таймера 2

ISR(TIMER2_A) { 

time++;

}

 

 

1

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Спасибо за ответы. Возможно не совсем корректно (или неточно) описал задачу. Есть панель приборов (спидометр, тахометр) у дуни используем два порта на выход. При первом цикле на самом приборе (спидометр, тахометр) выставляем стрелку на соответствующее значение. Дальше, просто пробежаться по шкале визуально проверить разметку, т.е. длительность выполнения цикла и длительность паузы перехода к следующему циклу не критичны к точности по времени или количеству выполненных циклов.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
В 04/06/2021 в 18:17, softm сказал:

Вы бы схему изобразили.

 

Да там собственно нет какой-то мудрой схемы. Из ардуины выходит два провода: один на вход тахометра, второй на вход спидометра. У тахометра зависимость показаний примерно следующая:

delay_us.     RPM

1 897          8 000

2 350          6 500

5 000          3 000

10 000        1 500

15 000        1 000

Вот хотелось бы что бы эти циклы отрабатывались примерно пять сек каждый, желательно в такой же последовательности и с перерывами между ними в пару сек.

 

IMG_4462.jpg

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Мені такі задачі подобається робити на ПЛК із апаратним генеруванням сигналів.

Вихід 0.5Гц-200 000Гц. Заповнення 0.0-100.0% та апаратний біт для ВКЛ/ВИКЛ.

6 каналів -тобто одночасно генерованих різних сигналів.

Плюс все це десь в якомусь стандартному допуску. І можливість поміряти самими ПЛК, що в результаті на виході.

Хоча напевно трохи дорого... Але можливо якщо нарисувати собі на екрані настройки для такого девайса і тест-програму із N кроків із часом кожного кроку, паузам та запам'ятовуванням - то був би повноцінний прилад з можливістю запису назви для чого цей тест.

Я ліпив подібні ардуінки для тестування сервоприводів із частотним завданням швидкості. Тепер лежить десь коробка із підписаними - котра для якого призначена.

Потім зліпив універсальну програмку на ПЛК і забув за ту коробку.   

 

П.С. З часом розумієш, що все менше маєш часу на забавки із Ардуінками.

П.П.С. Просто цікаво наскільки стабільно видає сигнали Ардуінка.  Хоча для такої задачі певно її має вистарчати.

 

1

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Створіть акаунт або увійдіть для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!


Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.


Увійти зараз

  • Зараз на сторінці   0 користувачів

    Немає користувачів, які переглядають цю сторінку