Мультизадача: тахометр + тензо (АЦП)_2

svr
Offline
Зарегистрирован: 08.03.2020

повторно даю. 1-й раз где-то затерялось...

Есть некий механизм. Нужно одновременно измерять частоту вращения привода и силы (в 2х направлениях) тензодатчиками. И передавать на комп, с записью в файл.
Пробую на Ардуино Мега 2560.

По отдельности скетчи апробированы (хотя их надо еще уточнять).

Скетч для тахометра взят из https://robotclass.ru/tutorials/arduino-tacho-irq/3/  «Ардуино: тахометр на прерываниях» (этот скетч опробован на ИК-датчике).

const byte interruptPin = 2;

unsigned int rot = 0;

unsigned long int tm;

unsigned long int spd = 0;

unsigned int dt = 0;

void detect() {

    rot++; // прибавляем единичку к счётчику обротов

    dt = millis() - tm; // вычисляем время с последнего расчёта

    if( dt >= 100 ){ // если прошло 100мс или более, то начинаем расчёт

        spd = rot*60000/dt;

        rot = 0; // обнуляем счётчик

        tm = millis(); // запоминаем время расчёта

    }

}

void setup() {

    Serial.begin(9600);

    pinMode(interruptPin, INPUT_PULLUP);

    attachInterrupt(digitalPinToInterrupt(interruptPin), detect, RISING);

    tm = millis();

}

void loop() {

    Serial.println(spd);

    delay(100);

}

 

Скетч для 2-х тензодатчиков (с использованием ацп hx711 и его библиотеки) таков:

#include "HX711.h"

const int DM = 4;  //dt ацп 1-й силы «М»

const int SM = 5;  //sck ацп 1-й силы

const int DX = 6;  //dt ацп 2-й силы «Х»

const int SX = 7;  //sck ацп 2-й силы

HX711 scale1;

HX711 scale2;

void setup() {

  Serial.begin(9600);

  scale1.begin(DM, SM);

  scale2.begin(DX, SX);

  Serial.println("M X ");

}

void loop() {

  if(scale1.is_ready() && scale2.is_ready()) {

    long M = scale1.read();

    long X = scale2.read();

    Serial.print(M);

    Serial.print(' ');

    Serial.print(X);

    Serial.println(' ');

  }

  delay(100);

}

Теперь стоит вопрос объединения этих скетчей в ЕДИНЫЙ, с учетом особенностей многозадачности в ардуино. Какие тут подводные камни? Каков текст единого скетча?
Тут я со своими познаниями в вакууме… Прошу помощи.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Пока код вставлять не научишься, так и будет теряться. 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Ну, если только

svr пишет:
с учетом особенностей многозадачности в ардуино
то можно и попробовать.

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

svr
Offline
Зарегистрирован: 08.03.2020

DetSimen пишет:

Пока код вставлять не научишься

Это уже только в следующей жизни...

-NMi-
Offline
Зарегистрирован: 20.08.2018
const byte interruptPin = 2;

unsigned int rot = 0;

unsigned long int tm;

unsigned long int spd = 0;

unsigned int dt = 0;

void detect() {

    rot++; // прибавляем единичку к счётчику обротов

    dt = millis() - tm; // вычисляем время с последнего расчёта

    if( dt >= 100 ){ // если прошло 100мс или более, то начинаем расчёт

        spd = rot*60000/dt;

        rot = 0; // обнуляем счётчик

        tm = millis(); // запоминаем время расчёта

    }

}

void setup() {

    Serial.begin(9600);

    pinMode(interruptPin, INPUT_PULLUP);

    attachInterrupt(digitalPinToInterrupt(interruptPin), detect, RISING);

    tm = millis();

}

void loop() {

    Serial.println(spd);

    delay(100);

}

 

#include "HX711.h"

const int DM = 4;  //dt ацп 1-й силы «М»

const int SM = 5;  //sck ацп 1-й силы

const int DX = 6;  //dt ацп 2-й силы «Х»

const int SX = 7;  //sck ацп 2-й силы

HX711 scale1;

HX711 scale2;

void setup() {

  Serial.begin(9600);

  scale1.begin(DM, SM);

  scale2.begin(DX, SX);

  Serial.println("M X ");

}

void loop() {

  if(scale1.is_ready() && scale2.is_ready()) {

    long M = scale1.read();

    long X = scale2.read();

    Serial.print(M);

    Serial.print(' ');

    Serial.print(X);

    Serial.println(' ');

  }

  delay(100);

}

Скотч или синяя изолента???

svr
Offline
Зарегистрирован: 08.03.2020

Чтобы пробовать, надо знать и понимать правила для мультизадачности. 
А я только понимаю, что все здесь не так просто...

Возможно, будут какие-то подсказки?

b707
Онлайн
Зарегистрирован: 26.05.2017

svr пишет:

Чтобы пробовать, надо знать и понимать правила для мультизадачности. 
А я только понимаю, что все здесь не так просто...

на самом деле все просто - нет в МК никакой многозадачности

nik182
Offline
Зарегистрирован: 04.05.2015

Не бывает мультизадачности на ардуине. В любой момент времени выполняется одна программа, даже если это диспетчер мультизадачности. А если  совсем без диспетчера, то надо точно расписать сколько времени какая задача занимает по минимум и решить как задача отдает свободное время другой задаче. У Вас как минимум 5 задач описано, но я подозреваю, что пару Вы не упомянули. Тахометр можно сделать на прерываниях, он сам будет время отбирать, а остальное можно подружить кооперативно.     

svr
Offline
Зарегистрирован: 08.03.2020

nik182 пишет:

...

У Вас как минимум 5 задач описано, но я подозреваю, что пару Вы не упомянули. 

...   

Подробнее можно, если вас это не затруднит?

nik182
Offline
Зарегистрирован: 04.05.2015

"Нужно одновременно измерять частоту вращения привода 1) и силы (в 2х направлениях) тензодатчиками 2,3). И передавать на комп 4), с записью в файл 5)."  Возможно ещё кнопки будут и дисплей 6,7) , для отражения оперативной информации и управления. 

 

svr
Offline
Зарегистрирован: 08.03.2020

nik182

В целом да, такие хотелки в перспективе могут быть.
Но пока рассматриваются 1-2-3-4 в рамках исходного поста.
5- запись в файл просматривается ч/з эксель (известным макросом, но который еще надо освоить).

6 и 7 возможно потом потребуется для управления процессом испытания. Но пока можно без этого.

svr
Offline
Зарегистрирован: 08.03.2020

Кто понимает соотнесение обоих исходных скетчей, видит контуры ЕДИНОГО скетча и способен его сваять,
тому могу предложить свою почту sverlan@mail.ru для предложений на возмездной основе.

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Насколько возмездной? 

svr
Offline
Зарегистрирован: 08.03.2020

sadman41

Насколько вы понимаете задачу.

sadman41
Offline
Зарегистрирован: 19.10.2016

Порядок предполагаемого бюджета можете озвучить?

svr
Offline
Зарегистрирован: 08.03.2020

sadman41

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

Жду предложений от исполнителя (на почту).

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

svr пишет:

Жду предложений от исполнителя (на почту).

А че не в разделе "Ищу исполнителя"?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

b707 пишет:

на самом деле все просто - нет в МК никакой многозадачности

Ну, вот, спалил контору!

Мы тут щёки надуваем, типа у нас всё по-взрослому, а он ....