Skocz do zawartości

Uruchamianie wyświetlacza lub programu po wykryciu ruchu


Krisk

Pomocna odpowiedź

Jako wersję 2 podłączyłem czujnik temperatury, który był wcześniej w programie.

Program działa tak, że w przypadku, gdy czujnik ultradźwiękowy nie wykrywa ruchu (a raczej, jeśli zmierzony dystans się nie zmienia przez dłużej niż 5s) to wyświetlacz się przełącza w tryb pomiaru temperatury. W rzeczywistości gdy przed sensorem jest większa odległość to odczyt wariuje, +/- kilka cm, więc są nikłe szanse, że przejdzie w tryb pomiaru temperatury.

Zastosowałem dodatkowo PIR, który jeśli wykryje ruch powinien być jedynym warunkiem do uruchamiania pomiaru odległości. A pomiar temperatury powinien być tylko i wyłącznie, gdy czujnik PIR nie wykrywa ruchu.

Dodatkowo podłączyłem LED kontrolny na PIN6, który pokazuje działanie PIR.

Tak wygląda teraz program, jednak nie działa prawidłowo, bo gdy PIR przestaje widzieć ruch to odczyt się zatrzymuje na ostatnim wskazaniu.

// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
// - HCSR04 library: https://github.com/Martinsos/arduino-lib-hc-sr04
// - MD_Parola Library: https://github.com/MajicDesigns/MD_Parola
// - MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX
// Find All "Great Projects" Videos : https://www.youtube.com/channel/UCCC8DuqicBtP3A_aC53HYDQ/videos

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <HCSR04.h>
#include "DHT.h"
#define DHTPIN 12     // Digital pin connected to the DHT sensor
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

// SPI hardware interface
//MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
// SOFTWARE SPI
MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
UltraSonicDistanceSensor distanceSensor(9, 8);  // Initialize sensor that uses digital pins 13 and 12.

uint8_t scrollSpeed = 25;    // default frame delay value
char megs[4];
int temperature;
int distance;
int lastdistance;
bool newDistance = false;
uint32_t lastTime = 0;
uint8_t degC[] = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C

void 
getTempe() { 
    temperature = dht.readTemperature();        
    delay(2000);                 
}
void 

readDistance() {        
distance = distanceSensor.measureDistanceCm() + 1;       
    delay(200);                 
   if (distance != lastdistance)
    {
    lastdistance = distance;
    newDistance = true;           
  }
}
void setup()
{
  Serial.begin(115200);
  P.begin(1);
  P.setZone(2, 0, 2);
  P.displayZoneText(0, megs, PA_CENTER, scrollSpeed, 0, PA_PRINT, PA_NO_EFFECT);
  P.addChar('$', degC);
  dht.begin();
    getTempe();  
  pinMode(2, INPUT); //PIR jako wejście
  pinMode(6, OUTPUT);// Dioda sygn. gdy ekran wyłączony  

}

void loop()
{

  if (digitalRead(2) == LOW){ //wykryto ruch
digitalWrite(6, HIGH); //dioda kontrolna
delay(500);
return;
  }

  else 
digitalWrite(6, LOW);//dioda kontrolna

  {

readDistance(); 
P.displayAnimate();
P.getZoneStatus(0);
    if (newDistance)
    {
    lastTime = millis(); 
    sprintf(megs, "%d", distance);
    P.displayReset(0);
    newDistance = false;
  }
  if (millis() - lastTime >= 5000)
  {
    lastTime = millis(); 
    getTempe(); 
    sprintf(megs, "%d", temperature);
    strcat(megs, "$");   
    P.displayReset(0);    
  }
  }}

To co musi być zmienione- wydaje mi się, ze trzeba usunąć część kodu, która porównuje odczyty, tylko nie bardzo rozumiem, co się tu dzieje.

Ktoś pomoże?

P.getZoneStatus(0);
    if (newDistance)
    {
    lastTime = millis(); 
    sprintf(megs, "%d", distance);
    P.displayReset(0);
    newDistance = false;
  }
  if (millis() - lastTime >= 5000)
  {
    lastTime = millis(); 
    getTempe(); 
    sprintf(megs, "%d", temperature);
    strcat(megs, "$");   
    P.displayReset(0);    
  }
  }}

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.