• 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
Może ktoś pomoże
#1
Opis w kodzie.
Alarm wyłącza się w innej temperaturze niż zdeklarowana.

Kod:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMPERATURE_PRECISION 9 // precyzja
#define SENSORS_NUM 2 // Ilość czujników
int one_wire = 8;       //Transmisja 1-Wire na pinie 10
int buzzer = 9;
int przekaznik = 10;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
OneWire oneWire(one_wire);                   //wywołujemy transmisję 1-Wire na pinie 10
DallasTemperature sensors(&oneWire);         //informujemy Arduino, ze przy pomocy 1-Wire
                                            //chcemy komunikowac sie z czujnikiem


void setup() {

 pinMode(buzzer,OUTPUT); //buzzer
 pinMode(przekaznik,OUTPUT);
 lcd.begin(16, 2); //Rozpoczęcie pracy wyświetlacza
 lcd.setCursor(0,0); //Ustawienie kursora w pozycji poczatkowej
 lcd.print("T1:"); // wyświetlanie stałej
 lcd.setCursor(0,1); //Ustawienie kursora w pozycji poczatkowej
 lcd.print("T2:"); // wyświetlanie stałej
 sensors.begin();     //rozpocznij odczyt z czujnika
 digitalWrite(przekaznik, HIGH); //stan poczatkowy przekażnika wysoki
 //digitalWrite(buzzer, LOW);
 }

void loop()
{
 sensors.requestTemperatures();            //zazadaj odczyt temperatury z czujnika
 lcd.setCursor(4,0);                       //ustaw kursor w pozycji 0,0
 lcd.print(sensors.getTempCByIndex(0));    //wyswietl wartosc z czujnika 0
 //float tempT1 = (sensors.getTempCByIndex(0));
if(sensors.getTempCByIndex(0) >=24.2)
  digitalWrite(przekaznik, LOW);
  delay(1);
  {
 if(sensors.getTempCByIndex(0) >=26.1)
  digitalWrite(buzzer, HIGH);
  delay(10);
  digitalWrite(buzzer, LOW);
  delay(500);

  if(sensors.getTempCByIndex(0) <=23.1) // tu jest problem
  digitalWrite(buzzer, HIGH);             // buzzer przestaje pipczyć
  delay(1);                              // przy temp. 26.1
  digitalWrite(buzzer, LOW);               //
  }
if(sensors.getTempCByIndex(0) <=23.3)        //jeżeli T1 niższa od 27
   digitalWrite(przekaznik, HIGH);
 
// drugi czujnik            
 lcd.setCursor(4,4);                       //ustaw kursor w pozycji 0,0
 lcd.print(sensors.getTempCByIndex(1));    //wyswietl wartosc z czujnika 1

delay(10);                                //odczekaj 50ms
}
 
Odpowiedź
#2
Proszę bardzo , nie da się wysterować wyjścia bez utrzymania stanu poniżej którego funkcja nie działa .

Kod:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define TEMPERATURE_PRECISION 9 // precyzja
#define SENSORS_NUM 2 // Ilość czujników
int one_wire = 8;       //Transmisja 1-Wire na pinie 10
int buzzer = 9;
int przekaznik = 10;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
OneWire oneWire(one_wire);                   //wywołujemy transmisję 1-Wire na pinie 10
DallasTemperature sensors(&oneWire);         //informujemy Arduino, ze przy pomocy 1-Wire
                                            //chcemy komunikowac sie z czujnikiem
long pm = 0;
byte buzzerstate = 0;

void setup() {

pinMode(buzzer,OUTPUT); //buzzer
pinMode(przekaznik,OUTPUT);
lcd.begin(16, 2); //Rozpoczęcie pracy wyświetlacza
lcd.setCursor(0,0); //Ustawienie kursora w pozycji poczatkowej
lcd.print("T1:"); // wyświetlanie stałej
lcd.setCursor(0,1); //Ustawienie kursora w pozycji poczatkowej
lcd.print("T2:"); // wyświetlanie stałej
sensors.begin();     //rozpocznij odczyt z czujnika
digitalWrite(przekaznik, HIGH); //stan poczatkowy przekażnika wysoki
//digitalWrite(buzzer, LOW);
}

void loop(){
  
sensors.requestTemperatures();            //zazadaj odczyt temperatury z czujnika
lcd.setCursor(4,0);                       //ustaw kursor w pozycji 0,0
lcd.print(sensors.getTempCByIndex(0));    //wyswietl wartosc z czujnika 0

  if(sensors.getTempCByIndex(0) >= 24.2)digitalWrite(przekaznik, LOW);
  if(sensors.getTempCByIndex(0) <= 23.3)digitalWrite(przekaznik, HIGH);

  if(sensors.getTempCByIndex(0) >= 26.1)buzzerstate = 1;
  if(sensors.getTempCByIndex(0) <= 23.1)buzzerstate = 0;    
        
  lcd.setCursor(4,4);                      
  lcd.print(sensors.getTempCByIndex(1));                                  

  buzerek();
}


void buzerek(){

  if ( buzzerstate == 1 ){  
  
     long cm = millis();

      if ( cm - pm > 500 )digitalWrite(buzzer, HIGH);
      if ( cm - pm > 1000 ){digitalWrite(buzzer, LOW);pm = cm;}

   }
  if ( buzzerstate == 0 )digitalWrite(buzzer, LOW);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości