• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zliczanie obrotów z trzech czujników w ciągu 1 sek.
#1
Witam

Jestem w trakcie pisania programu na Arduino Uno który będzie nadzorował pracę trzech wentylatorów i dwóch czujników DHT 22 oraz wskazywał aktualny czas . Dokładnie będzie kontrolował czy żaden z wentylatorów się nie zablokował.
Obroty jednego wentylatora są liczone w ciągu 1 sek. Mając 3 wentylatory mam opóźnienie w przetwarzaniu kodu o 3 sek. Jak przerobić kod żeby w jednej pętli uzyskać obroty z wentylatorów w ciągu 1 sek ? 
Oczywiście nie chodzi mi o zmianę wartości "sampleTime" na 333  Tongue
Raczej żeby jedna pętle "millis" obejmowała wszystkie trzy.
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
const int wen_1 = 11; //wentylator nadmuch
const int wen_2 = 10; //wentylator wyciąg
const int wen_3 = 9; //wentylator okap
const unsigned long sampleTime = 1000;
void setup()
{
pinMode(wen_1, INPUT); //wentylator nadmuch
pinMode(wen_2, INPUT); //wentylator wyciąg
pinMode(wen_3, INPUT); //wentylator okap
  lcd.init(); // uruchomienie LCD
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("RPM1: ");

}
void loop()
{
//obroty wentylatora 1 nadmuch
int rpm1 = getRPM1();
displayRPM1(rpm1);
int rpm2 = getRPM2();
displayRPM2(rpm2);
int rpm3 = getRPM3();
displayRPM3(rpm3);
}
  float getRPM1()
{
  int count = 0;
  boolean flag = LOW;
  unsigned long currentTime = 0;
  unsigned long startTime = millis();
  while (currentTime <= sampleTime) 
{
  if (digitalRead(wen_1) == HIGH)
{
  flag = HIGH;
}
  if (digitalRead(wen_1) == LOW && flag == HIGH)
{
  count++;
  flag = LOW;
}
  currentTime = millis() - startTime;
}
  float count2rpm = int(60000. / float(sampleTime)) * count; //int 6000
  return count2rpm;
}
  void displayRPM1(int rpm1)
{
  lcd.setCursor(2, 2);
  lcd.print("    ");
  lcd.setCursor(2, 2);
  lcd.print(rpm1, DEC);
}
//obroty wentylatora 2 wyciąg
  float getRPM2()
{
  int count = 0;
  boolean flag = LOW;
  unsigned long currentTime = 0;
  unsigned long startTime = millis();
  while (currentTime <= sampleTime) 
{
  if (digitalRead(wen_2) == HIGH)
{
  flag = HIGH;
}
  if (digitalRead(wen_2) == LOW && flag == HIGH)
{
  count++;
  flag = LOW;
}
  currentTime = millis() - startTime;
}
  float count2rpm = int(60000. / float(sampleTime)) * count;
  return count2rpm;
}
  void displayRPM2(int rpm2)
{
  lcd.setCursor(9, 2);
  lcd.print("    "); 
  lcd.setCursor(9, 2);
  lcd.print(rpm2, DEC);

//obroty wentylatora 3 okap
}
  float getRPM3()
{
  int count = 0;
  boolean flag = LOW;
  unsigned long currentTime = 0;
  unsigned long startTime = millis();
  while (currentTime <= sampleTime) 
{
  if (digitalRead(wen_3) == HIGH)
{
  flag = HIGH;
}
  if (digitalRead(wen_3) == LOW && flag == HIGH)
{
  count++;
  flag = LOW;
}
  currentTime = millis() - startTime;
}
  float count2rpm = int(60000. / float(sampleTime)) * count;
  return count2rpm;
}
void displayRPM3(int rpm3)
{
  lcd.setCursor(16, 2);
  lcd.print("    ");
  lcd.setCursor(16, 2);
  lcd.print(rpm3, DEC);
}
  //koniec wentylatory
 
Odpowiedź
  


Wiadomości w tym wątku
Zliczanie obrotów z trzech czujników w ciągu 1 sek. - przez spark - 07-11-2020, 01:54

Skocz do:


Przeglądający: 1 gości