Skocz do zawartości

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


beavis84881

Pomocna odpowiedź

Witam,

zwracam się  do wszystkich praktykujących o pomoc, jak  w temacie, ws. kodu w Arduino.

Jak większość początkujących miłośników programowania w Arduino i ja zacząłem od czujnika temperatury.

Z uwagi na bardzo znikomą ilość mojej wiedzy, po wielu tygodniach poszukiwań rozwiązania do mojego projektu, już wiem że programowanie nie jest takie proste jak się wydawało. A szukanie gotowego rozwiązania to jak szukanie przysłowiowej igły w stogu siana. Pewnie wszyscy powiecie, że nie tędy droga. Tak, trochę się z tym zgadzam i choć drogi są różne to ważne żeby dotrzeć do celu.

A cel jest taki, żeby dodać przycisk, który "wyłącza/włącza" buzzer po przekroczeniu konkretnej temperatury - tylko po to, żeby nie "hałasował".

I tu dodatkowo rozwinę o co chodzi z tym "włącza/wyłącza" buzzer. Po przekroczeniu danej temp. włącza się alarm (buzzer) a wciśniecie przycisku (coś typu mikrostyk) wyłącza dźwięk, kolejne wciśnięcie włącza dźwięk i tak w kółko pod warunkiem że nadal jest przekroczona temp. - trochę takie sprawdzenie czy dalej alarm jest włączony. Oczywiście, kiedy alarm nie jest włączony, wciśnięcie przycisku nie daje żadnej reakcji.

  Poniżej dotychczasowy kod jaki udało się wykonać (bez przycisku).

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

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

void setup() 
{ 
  pinMode(8,OUTPUT); 
  pinMode(7,OUTPUT); 
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  Serial.print("Temperatura:  ");
  Serial.print(sensors.getTempCByIndex(0)); 
  sensors.requestTemperatures(); // Polecenie, aby uzyskać odczyty temperatury 
  Serial.println(); 
  delay(500); 

 if (sensors.getTempCByIndex(0) >= 27)  //Jeśli czujnik wskaże temp >27 stopni Celcjusza
  { digitalWrite(8, HIGH);   //Włącz diodę
     tone(7, 1000, 100);     // Uruchom brzęczyk
     delay(150);
     tone(7, 1000, 100); 
     delay(150);  
     tone(7, 1000, 100); 
     delay(150);               
   } 
   
 if (sensors.getTempCByIndex(0) < 27)  //Jeśli czujnik wskaże temp <27 stopni Celcjusza
  { digitalWrite(8, LOW); //Wyłącz diodę
   } 
 }

Z góry dziękuję wszystkim udzielającym rad, rozwiązań i innych propozycji do powyższego projektu.

Pozdrawiam.

Link do komentarza
Share on other sites

@beavis84881 witam na forum...

11 godzin temu, beavis84881 napisał:

A szukanie gotowego rozwiązania to jak szukanie przysłowiowej igły w stogu siana. Pewnie wszyscy powiecie, że nie tędy droga. Tak, trochę się z tym zgadzam i choć drogi są różne to ważne żeby dotrzeć do celu.

...i potwierdzam to co wyżej. Nie ma nic złego w szukaniu gotowców, ale praktyka pokazuje (na bazie innych osób, które tu trafiają), że osoby początkujące kopiują kody bez zrozumienia i nie są później wstanie dokonać tam żadnej zmiany. Stąd sumarycznie dużo szybciej wychodzi jednak, gdy poświeci się trochę czasu na opanowanie podstaw.

11 godzin temu, beavis84881 napisał:

I tu dodatkowo rozwinę o co chodzi z tym "włącza/wyłącza" buzzer. Po przekroczeniu danej temp. włącza się alarm (buzzer) a wciśniecie przycisku (coś typu mikrostyk) wyłącza dźwięk, kolejne wciśnięcie włącza dźwięk i tak w kółko pod warunkiem że nadal jest przekroczona temp. - trochę takie sprawdzenie czy dalej alarm jest włączony. Oczywiście, kiedy alarm nie jest włączony, wciśnięcie przycisku nie daje żadnej reakcji.

Problem, który opisałeś jest stosunkowo prosty do rozwiązania, ale jest tam kilka kruczków. Nie wiem tylko czy oczekujesz gotowca, czy chcesz się tego nauczyć. Daj znać to coś pomożemy 🙂 Zacznę od ogólnych wskazówek: najprościej będzie, jeśli zaczniesz od dodatkowej zmiennej, która będzie zmieniana podczas naciskania przycisku. Następnie będziesz mógł uzależnić buzzer od temperatury i stanu te zmiennej. Aby uniknąć dodatkowych problemów (nie będę teraz komplikował Ci tego tematu) usuń na początek z programu opóźnienia, bo inaczej układ nie będzie reagował poprawnie na przycisk. Na tym etapie zostaw sobie po prostu program w taki sposób, aby przekroczenie alarmu włączało na stałe jeden dźwięk.

A jak szukasz innego rozwiązania... przetnij przewód od buzzera i wstaw tam przełącznik 😉

Link do komentarza
Share on other sites

33 minuty temu, Treker napisał:

osoby początkujące kopiują kody bez zrozumienia i nie są później wstanie dokonać tam żadnej zmiany

..i tu zgadzam sie w 99% bo podobnie jest w moim przypadku😔 przyznaję się, że skopiowałem i wgrałem prosty przykład mrygania diody (blink) z późniejszymi próbami modyfikacji ale.. właśnie od tego się zaczęło, praktyki, wizualnego potwierdzenie, że jest w tym ogromny potencjał 😉 i dużo zabawy.

37 minut temu, Treker napisał:

Nie wiem tylko czy oczekujesz gotowca, czy chcesz się tego nauczyć.

Właściwie to jedno i drugie. Jeśli chodzi o naukę i pomimo, że niewiele z tego rozumiem, będę się starał ogarnąć i odpowiadać w miarę moich możliwości.

A co do gotowca, to tak, to też jest jedno z rozwiązań ale też nie do końca dla mnie. Przede wszystkim, potrzebuję to zrozumieć, jak działa, co do czego, gdzie można sobie pozwolić na ewentualne zmiany w celu dalszej rozbudowy, itd. itp. Więc jak ktoś ma gotowca ze szczegółowym opisem, to tak, poproszę.

Nie mniej jednak, skoro jest propozycja nauki - chętnie spróbuję.

Po wstępnej modyfikacji (mam nadzieję, zgodnie z zaleceniami) kod wygląda tak:

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

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

void setup() 
{ 
  pinMode(8, OUTPUT); 
  pinMode(7, OUTPUT); 
  pinMode(2, INTPUT); 
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  Serial.print("Temperatura:  ");
  Serial.print(sensors.getTempCByIndex(0)); 
  sensors.requestTemperatures(); // Polecenie, aby uzyskać odczyty temperatury 
  Serial.println(); 
  delay (500);

 if (sensors.getTempCByIndex(0) >= 27)  //Jeśli czujnik wskaże temp >27 stopni Celcjusza
  { digitalWrite(8, HIGH);   //Włącz diodę
    tone(7, 1000);          // Uruchom brzęczyk              
   } 
   
 if (sensors.getTempCByIndex(0) < 27)  //Jeśli czujnik wskaże temp <27 stopni Celcjusza
  { digitalWrite(8, LOW); //Wyłącz diodę
    noTone (7);          // Wyłącz brzęczyk
   } 
 }

Nie wiem czy to dobrze, że zostawiłem linijkę delay (500); ale przydał by się finalnie "regulowany odstęp czasowy" odczytu temp. a nie wiem jak inaczej to wykonać.

Dodatkowo dodałem noTone (7);  do wyłączenia brzęczyka (piezo) bo daje po uszach.

Apropo tego przełącznika - owszem, ta opcja też wyłącza dźwięk ale jak zapomnę go włączyć, to nie dowiem się o alarmie 🙂 a dla mojego projektu wiąże się to poważnymi konsekwencjami (usterkami).

Pozdrawiam

Link do komentarza
Share on other sites

Musisz dodać obsługę guzika w warunku, w którym jakaś flaga będzie decydować czy alarm ma być aktywny czy nie...

if (digitalRead(guzik) == LOW) {
  delay(1000);
  flaga_alarm = !flaga_alarm;
  }

Potem musisz dodać dodatkowy warunek który decyduje o aktywności alarmu do warunku który decyduje czy już temp przekroczono... 

if (flaga_alarm == 1) {
  tone(7,1000);
  } else {
  noTone(7);
  }

No i już w twoim kodzie razem...

if (sensors.getTempCByIndex(0) >= 27)  //Jeśli czujnik wskaże temp >27 stopni Celcjusza
  { digitalWrite(8, HIGH);   //Włącz diodę
    if (flaga_alarm == 1) {
  tone(7,1000);
  } else {
  noTone(7);
  }.       // Uruchom brzęczyk              
   } 

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

1 godzinę temu, beavis84881 napisał:

Jeśli chodzi o naukę i pomimo, że niewiele z tego rozumiem, będę się starał ogarnąć

No to ogarniamy.

Uwaga 1

Jeśli w programie mamy np.  #define BUZZER 7  to po to, by potem tego BUZZER używać - zamiast  pinMode(7, OUTPUT); powinno być   pinMode(BUZZER, OUTPUT);   i tak talej. Chodzi o to by a) łatwiej się czytało tekst programu, b) w przypadku chęci zmiany nóżki buzzera na jakąś inną, zmieniamy ją tylko w jednym miejscu, bez konieczności przeszukiwania całego programu. Analogicznie  w przypadku LED i BUTTON.

Uwaga 2

Jeśli mamy dwa dopełniające się warunki, to zamiast dwóch poleceń if( ) poręcznie będzie użyć takiej konstrukcji:

 if (sensors.getTempCByIndex(0) >= 27)  //Jeśli czujnik wskaże temp >27 stopni Celcjusza
  { digitalWrite(8, HIGH);   //Włącz diodę
    tone(7, 1000);          // Uruchom brzęczyk              
   } else          //Jeśli czujnik wskaże temp <27 stopni Celcjusza
  { digitalWrite(8, LOW); //Wyłącz diodę
    noTone (7);          // Wyłącz brzęczyk
   } 
 

Uwaga 3

Czujnik temperatury najpierw "prosimy" o dokonanie pomiaru, następnie odczekujemy jakiś czas (zależy on od ustawionej rozdzielczości), a następnie pobieramy wynik:

  sensors.requestTemperatures();     // Polecenie, aby uruchomić pomiar temperatury 
  delay (500);     //
  float wynik = sensors.getTempCByIndex(0);   // Polecenie, aby pobrać wartość temperatury 
  Serial.println(wynik); 

 

Link do komentarza
Share on other sites

Witaj @farmaceuta,

jak już wcześniej wspominałem, nie jestem biegły w programowaniu i nie rozumiem wielu rzeczy. W przypadku Twojego rozwiązania, rozwiń proszę szczegółowo "flaga_alarm" - gdzie, dlaczego, kiedy, jak i co to.

 

Link do komentarza
Share on other sites

40 minut temu, beavis84881 napisał:

Witaj @farmaceuta"flaga_alarm" - gdzie, dlaczego, kiedy, jak i co to.

 

To zmienna która określa czy ma być alarm, czy buzzer  ma milczeć...w tym przypadku jeśli naciśniesz guzik to ta zmienna będzie przybierać dwa stany..0 lub 1...jeśli 0 to milczy Buzz, jeśli 1 to jest uruchomiony..to jest zmienna typu bool, bo potrzeba przechowywać tylko dwa stany...deklarujesz ją jako zmienna globalna, czyli na górze kodu 

bool flaga_alarm;

 

Link do komentarza
Share on other sites

Flaga jest przydatna przy obsłudze przerwań, tu wystarczy:

 

//do innych #define na górze programu dodajemy
#define SWITCH xx   //gdzie xx jest numerem pinu do którego podłączamy przycisk - zwiera on pin do masy
  
  //na początku setup()
  
  pinMode(SWITCH, INPUT_PULLUP);

// na końcu pętli
   if (digitalRead(SWITCH) == 0) noTone(BUZZER);

 

Przycisk trzeba chwilę przytrzymać jakąś sekundę (max.)

Link do komentarza
Share on other sites

@farmaceuta gdzieś już  wcześniej czytałem o tych porządkach  w kodzie i sam miałem sie do  tego stosować  i  popatrz  wyszedł zonk.  Dzięki za cenne uwagi.  Poniżej,  w  miarę poprawiony kod. Proszę   o  dalsze  instrukcje.

 

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

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

void setup() 
{ 
  pinMode(LED, OUTPUT);        
  pinMode(BUZZER, OUTPUT); 
  pinMode(BUTTON, INPUT); 
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury 
  delay (500);     //
  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ę
     tone(BUZZER, 1000);               // Uruchom brzęczyk              
   } else                             // W przeciwnym razie
   { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER);                 // Wyłącz brzęczyk
   }
 if (digitalRead(SWITCH) == 0) noTone(BUZZER);
}

 

@jand wykorzystałem  twoją podpowiedź z funkcją SWITCH. Nie do końca o to mi chodziło - działa  połowicznie, tzn. wyłącza BUZZER  tylko w  momencie trzymania wciśniętego przycisku. To dla mnie za mało...ale dzięki.

Dodatkowo, jeśli dobrze rozumiem, SWITCH mogę użyć zamiast BUTTON?..tak? Poniżej kod.

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

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

void setup() 
{ 
  pinMode(LED, OUTPUT);        
  pinMode(BUZZER, OUTPUT); 
 // pinMode(BUTTON, INPUT); 
  pinMode(SWITCH, INPUT_PULLUP);
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury 
  delay (500);     //
  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ę
     tone(BUZZER, 1000);               // Uruchom brzęczyk              
   } else                             // W przeciwnym razie
   { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER);                 // Wyłącz brzęczyk
   }
   if (digitalRead(SWITCH) == 0) noTone(BUZZER);
}

Napotkałem raz zastosowanie rozwiązania z SWITCH i CASE. Czy to tędy droga?

https://arduinoplusplus.wordpress.com/2019/07/06/finite-state-machine-programming-basics-part-1/

 

Link do komentarza
Share on other sites

wybacz @farmaceuta  za  dużo na  raz

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


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

void setup() 
{ 
  pinMode(LED, OUTPUT);        
  pinMode(BUZZER, OUTPUT); 
  pinMode(BUTTON, INPUT); 
  
 Serial.begin(9600); 
 Serial.println("Dallas DS18B20. Pomiar Temperatury."); 
 sensors.begin(); 
} 
void loop(void) 
{ 
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury 
  delay (500);     //
  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ę
     tone(BUZZER, 1000);               // Uruchom brzęczyk              
   } else                             // W przeciwnym razie
   { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER);                 // Wyłącz brzęczyk
   }
}

 

Link do komentarza
Share on other sites

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

bool flaga_alarm = 0;

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);                 // Wyłącz brzęczyk
   } 
  if (digitalRead(BUTTON) == LOW) {
  delay(1000);
  flaga_alarm = !flaga_alarm;
  }
}

koniecznie musisz sie wziasc za podstawy bo bez tego w tej zabawie zginiesz marnie...😉

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

17 minut temu, farmaceuta napisał:

koniecznie musisz sie wziasc za podstawy bo bez tego w tej zabawie zginiesz marnie...😉

😔 rozumiem.

A tak na marginesie,  czy to  już jest  "gotowy" kod?..bo brzęczyk nie działa. Czy znów coś popsułem?

Link do komentarza
Share on other sites

15 minut temu, beavis84881 napisał:

A tak na marginesie,  czy to  już jest  "gotowy" kod?..bo brzęczyk nie działa. Czy znów coś popsułem?

Tak gotowy...na starcie Buzz jest wyłączony...wciśnij przycisk raz i będzie aktywny 

Edit..lub do zmiennej "flaga_alarm" przypisz wartość 1, na samej górze

 

 

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

1 godzinę temu, beavis84881 napisał:
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
#define BUZZER 7
#define LED 8
//#define BUTTON 2
#define SWITCH  2


boolean alarm_byl_uruchomiony = false;

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

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(BUTTON, INPUT);

  Serial.begin(9600);
  Serial.println("Dallas DS18B20. Pomiar Temperatury.");
  sensors.begin();
}
void loop(void)
{
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury
  delay (500);     //
  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 (alarm_byl_uruchomiony == false) {
      tone(BUZZER);                     // Uruchom brzęczyk
      alarm_byl_uruchomiony = true;
    }
  } else                             // W przeciwnym razie
  { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER);                 // Wyłącz brzęczyk
    alarm_byl_uruchomiony = false;
  }
  if (digitalRead(SWITCH) == 0) {
    noTone(BUZZER);
    alarm_byl_uruchomiony = true;
  }
}

 

 

1 godzinę temu, beavis84881 napisał:

SWITCH mogę użyć zamiast BUTTON?..tak?

Tak, nie zauważyłem, że już jest zdefiniowany

 

1 godzinę temu, beavis84881 napisał:

działa  połowicznie, tzn. wyłącza BUZZER  tylko w  momencie trzymania wciśniętego przycisku

Tak, to prawda. Może to będzie lepsze 🙂 . Teraz (w moim zamyśle) po skasowaniu dzwięku brzęczyka temperatura musi spaść poniżej 27st i znowu się podnieść powyżej by znów zadziałał.

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


boolean alarm_byl_uruchomiony = false;

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

void setup()
{
  pinMode(LED, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(BUTTON, INPUT);

  Serial.begin(9600);
  Serial.println("Dallas DS18B20. Pomiar Temperatury.");
  sensors.begin();
}
void loop(void)
{
  sensors.requestTemperatures();            // Polecenie, aby uruchomić pomiar temperatury
  delay (500);     //
  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 (alarm_byl_uruchomiony == false) {
      tone(BUZZER);                     // Uruchom brzęczyk
      alarm_byl_uruchomiony = true;
    }
  } else                             // W przeciwnym razie
  { digitalWrite(LED, LOW);         // Wyłącz diodę
    noTone(BUZZER);                 // Wyłącz brzęczyk
    alarm_byl_uruchomiony = false;
  }
  if (digitalRead(SWITCH) == 0) {
    noTone(BUZZER);
  }
}

 

Edytowano przez jand
Link do komentarza
Share on other sites

@jand kod dalej, jak dla  mnie, działa połowicznie. Po uruchomieniu alarmu, jeden  raz uruchomiony przycisk owszem wyłącza dźwięk ale kolejne uruchomienie   przycisku (w  trakcie trwania alarmu) już go nie uruchamia.

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.