Skocz do zawartości

Pomoc w kodzie Arduino - DS18B20+buzzer. Odczyt temperatury z alarmem(powiadomieniem).


Pomocna odpowiedź

@farmaceuta ratuj dalej! Jest drobna nieprawidłowość.

Po uruchomieniu alarmu i w czasie jego trwania, przyciskiem  wyłączam i włączam brzęczyk - SUPER. Co prawda czas reakcji  trochę długi ale.. OK.

Natomiast jest problem, kiedy podczas trwania alarmu wyłączę brzęczyk a w tym czasie spadnie temperatura (w tym przykładzie poniżej 27).

Po ponownym uruchomieniu alarmu brzęczyk już się sam nie włącza. KATASTROFA.

53 minuty temu, beavis84881 napisał:

kolejne uruchomienie   przycisku (w  trakcie trwania alarmu) już go nie uruchamia.

Tak miało być.

Nie bardzo wiem, po co uruchamiać alarm dźwiekowy jeszcze raz w czasie trwania tego samego zdarzenia. Dioda się świeci cały czas.

Przed chwilą, jand napisał:

Nie bardzo wiem, po co uruchamiać alarm dźwiekowy jeszcze raz w czasie trwania tego samego zdarzenia. Dioda się świeci cały czas.

Poniekąd ta dioda  to  takie awaryjne ostrzeganie (pomimo, że może się spalić) a tu zostaje jeszcze sygnalizacja dźwiękowa, którą nawet  zza niewielkie  przeszkody słychać i można w  czas zareagować.

Dioda to dodatek, brzęczyk ważniejszy.

13 minut temu, beavis84881 napisał:

@farmaceuta ratuj dalej! Jest drobna nieprawidłowość.

Po uruchomieniu alarmu i w czasie jego trwania, przyciskiem  wyłączam i włączam brzęczyk - SUPER. Co prawda czas reakcji  trochę długi ale.. OK.

Natomiast jest problem, kiedy podczas trwania alarmu wyłączę brzęczyk a w tym czasie spadnie temperatura (w tym przykładzie poniżej 27).

Po ponownym uruchomieniu alarmu brzęczyk już się sam nie włącza. KATASTROFA.

ok.......

#include <OneWire.h> 
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4 
#define BUZZER 7
#define LED 8
#define BUTTON 2 

bool flaga_alarm = 1;

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() 
{ 
  pinMode(LED, OUTPUT);        
  pinMode(BUZZER, OUTPUT); 
  pinMode(BUTTON, INPUT_PULLUP); 
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury 
  float wynik = sensors.getTempCByIndex(0); // Polecenie, aby pobrać wartość temperatury 
  Serial.print("Temperatura:  ");
  Serial.println(wynik);  

 if (sensors.getTempCByIndex(0) >= 27)   // Jeśli czujnik wskaże temp >27 stopni Celcjusza
   { digitalWrite(LED, HIGH);           // Włącz diodę
  if (flaga_alarm == 1) {            // Uruchom brzęczyk  
     tone(BUZZER,1000);
  } else {
     noTone(BUZZER);
  }                           
   } else                             // W przeciwnym razie
   { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER); 
    flaga_alarm = 1;                 // Wyłącz brzęczyk
   } 
  if (digitalRead(BUTTON) == LOW) {
  delay(1000);                      // tutaj mozesz zmniejszyc czas dla szybszej reakcji na wcisniecie w ms
  flaga_alarm = !flaga_alarm;
  }
}

 

DZIAŁA !!!

Tak, właśnie o to mi chodziło.

@farmaceuta   chylę przed tobą czoło, twoją wiedzą i wytrwałością.

Bardzo  dziękuję za pomoc i Twój cenny, poświęcony czas.

Dziękuję również pozostałym uczestnikom za ich wkład i cenne rady.

 

Na koniec zapytam jeszcze ws. tej wstępnej wiedzy. Czy jest jakiś uniwersalny  zakres wiedzy podstawowej, żeby zacząć z tym "poważną" zabawę?

 

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