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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.