27-11-2020, 02:21
Witam!
Mam problem z kodem który stworzyłem na potrzeby urządzenia. Mianowicie warunkiem zadziałania układu jest spełnienie warunku temperatury powyżej 23 st. w przypadku przekroczenia tej granicy nie można włączyc układu (zaznaczyłem na czerwono ten fragment). Niestety po złozeniu wszystkiego na płytce i przekroczeniu temp. nadal istnieje możliwość uruchomienia. Co robię żle? Pomóżcie plisss...
int odczytanaWartosc = 0;
int czas = 0;
#include <Wire.h> // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie biblioteki I2C dla LCD 20x4
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
OneWire oneWire(ONE_WIRE_BUS); // deklaracja lini komuninkacji Arduino z czujnikiem
DallasTemperature sensors(&oneWire); // deklaracja (wskazanie) po jakiej lini ma sie komunikować Arduino z czujnikiem
void setup()
{
lcd.begin(20,4); // Inicjalizacja wyświetlacza LCD 20X4
lcd.clear();
lcd.backlight(); // Włączenie podswietlenia LCD
pinMode(8, OUTPUT); // zasilenie układu wyzwalającego
pinMode(7, INPUT_PULLUP); // włącznik pracy
sensors.begin();
lcd.setCursor(0,0);
}
void loop(void)
{
// kod działania czujnika temperatury
sensors.requestTemperatures(); // informacja o pobraniu temp przez czujnik
float x=sensors.getTempCByIndex(0); // Serial.println(x);
lcd.setCursor(0,2);
lcd.print("Temp.aktualna");
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,4);
lcd.print(x);
// kod działania układu
lcd.setCursor(0,0); //ustawienie kursora na pozycji 0,0
lcd.print("Czas impulsu:"); // wyswietlenie frazy "Długość impulsu" na wyswietlaczu
lcd.setCursor(0,1);
lcd.print(" ms");
odczytanaWartosc = analogRead(A1); // odczyt z potencjometru
lcd.setCursor(0,1); // Ustawienie kursora w pozycji 0,1 (pierwszy wiersz, pierwsza kolumna)
czas = odczytanaWartosc * (100/1023.0) ;
lcd.print(czas);
delay(100); //przerwa pomiędzy kolejnymi impulsami
if (digitalRead(7) == LOW)
{
digitalWrite(8, HIGH); //praca
delay(czas);//czas trwania przerwy pomiedzy impulsami
}
else {
digitalWrite(8, LOW); //Wyłączenie
}
if (x<=23); //zabezpieczenie-gdy temp.jest większa lub równa 23 brak możliwości uruchomienia
{
digitalWrite(8, LOW);
}
}
Mam problem z kodem który stworzyłem na potrzeby urządzenia. Mianowicie warunkiem zadziałania układu jest spełnienie warunku temperatury powyżej 23 st. w przypadku przekroczenia tej granicy nie można włączyc układu (zaznaczyłem na czerwono ten fragment). Niestety po złozeniu wszystkiego na płytce i przekroczeniu temp. nadal istnieje możliwość uruchomienia. Co robię żle? Pomóżcie plisss...
int odczytanaWartosc = 0;
int czas = 0;
#include <Wire.h> // standardowa biblioteka Arduino
#include <LiquidCrystal_I2C.h> // dolaczenie biblioteki I2C dla LCD 20x4
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
OneWire oneWire(ONE_WIRE_BUS); // deklaracja lini komuninkacji Arduino z czujnikiem
DallasTemperature sensors(&oneWire); // deklaracja (wskazanie) po jakiej lini ma sie komunikować Arduino z czujnikiem
void setup()
{
lcd.begin(20,4); // Inicjalizacja wyświetlacza LCD 20X4
lcd.clear();
lcd.backlight(); // Włączenie podswietlenia LCD
pinMode(8, OUTPUT); // zasilenie układu wyzwalającego
pinMode(7, INPUT_PULLUP); // włącznik pracy
sensors.begin();
lcd.setCursor(0,0);
}
void loop(void)
{
// kod działania czujnika temperatury
sensors.requestTemperatures(); // informacja o pobraniu temp przez czujnik
float x=sensors.getTempCByIndex(0); // Serial.println(x);
lcd.setCursor(0,2);
lcd.print("Temp.aktualna");
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,4);
lcd.print(x);
// kod działania układu
lcd.setCursor(0,0); //ustawienie kursora na pozycji 0,0
lcd.print("Czas impulsu:"); // wyswietlenie frazy "Długość impulsu" na wyswietlaczu
lcd.setCursor(0,1);
lcd.print(" ms");
odczytanaWartosc = analogRead(A1); // odczyt z potencjometru
lcd.setCursor(0,1); // Ustawienie kursora w pozycji 0,1 (pierwszy wiersz, pierwsza kolumna)
czas = odczytanaWartosc * (100/1023.0) ;
lcd.print(czas);
delay(100); //przerwa pomiędzy kolejnymi impulsami
if (digitalRead(7) == LOW)
{
digitalWrite(8, HIGH); //praca
delay(czas);//czas trwania przerwy pomiedzy impulsami
}
else {
digitalWrite(8, LOW); //Wyłączenie
}
if (x<=23); //zabezpieczenie-gdy temp.jest większa lub równa 23 brak możliwości uruchomienia
{
digitalWrite(8, LOW);
}
}