Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Oświetlenie Led na czujniku Pir i przekazniku.
#11
Testowałem program z przekaźnikiem i pierwsze nie świeci dioda Red jak jest wyłączone, drugie nie przełącza się przekaźnik gdy nie ma ruchu i trzecie nie wyłącza się urządzenie mimo naciskania na przycisk. Próbowałem znaleźć w programie gdzie to jest. Połączyłem to z tym co ja napisałem i działa. Teraz testuje. Na czujniku mam czas ustawiony krótki. Załączam i wyłączam przyciskiem. Jak wykrywa ruch to dalej przekaźnik załączony. Co by tam jeszcze poprawić?
Kod:
#include <Bounce2.h>
#include "Timer.h"

//dodajemy timer

Timer t;

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona

int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;

Bounce bouncer = Bounce(PRZYCISK, 25);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

boolean state = false;
boolean isSwitchOn = false;



void setup() {
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
t.every(500, PIRCheck);//co 500ms wykonywana jest metoda
}

void zmiana()
{
 t.update();
}


void PIRCheck() {
if (digitalRead(PRZYCISK) == LOW && !state) {//jezeli wcisnieto przycisk i status zapalania jest na false
isSwitchOn = true;//to uruchom PIR
}
if (digitalRead(PRZYCISK) == LOW && state) {//jezli wcisnieto przycisk i status zapalania jest na true
isSwitchOn = false;//wylacz PIR
}
checkForMovement(isSwitchOn);
}

boolean checkForMovement(boolean isSwitchOn) {
if (isSwitchOn) {
if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
if (digitalRead(PIR) == HIGH) { //wykryto ruch
state = true;
}
else {
state = false;
}
}

if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
if (digitalRead(PIR) == HIGH) {//wykryto ruch
onTime = 0;
state = true;
}
}

}

lightControl(state);
return state;
}


void lightControl(boolean isStateOn) {
if (isStateOn) {
if (onTime < CZAS_SWIECENIA) {
digitalWrite(SWIATLO, HIGH);
onTime++;
}
}
else {
digitalWrite(SWIATLO, LOW);
}

if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
lightControl(checkForMovement(true));
}

if (onTime > CZAS_SWIECENIA) {
onTime = 0;
}

digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);
if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
   
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#12
(27-11-2017, 22:34)tom5555 napisał(a): Jak nigdzie nie znajdziesz Nano po rozsądnej cenie, mogę odsprzedać jednego klona. Mam kilka w zapasie.

Za ile i z kont ? Trochę przerobiłem program. Teraz jest z fotorezystorem i fotorezystor ma załączać i wyłączać czujnik pir. Dołożyłem też  wyświetlacz Lcd bo jak będę robił to też dla siebie i tam dołożę moduł rtc by wyświetlał datę i godziny i by można było ustawić czas zadziałania. Np. 20.03. 2018 godz. 17:30 lub by się zaświeciło światło o danej godzinie do zadanej godziny. Zmyłka złodzieja że niby ktoś jest  w domu. :Uśmiech Coś mi program nie wyłącza i nie załącza czujnika jak jest  urządzenie włączone. Czujnik  przełącza przekaźnik.
Kod:
#include <Bounce2.h>
#include <LiquidCrystal_I2C.h>

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000

LiquidCrystal_I2C lcd(0x3F,16,2);

// Fotorezystor

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 25);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);// Ustawienie kursora na pierwszej linii i lewej stronie ekranu LCD
 lcd.print("  Fotorezystor");//Wyświetlenie Test fotorezystora  
 lcd.setCursor(0,1);
 lcd.print("Wartosc:     ");

 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
}

void zmiana()

{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 lcd.print(war);                     //wyświetlenie jej na LCD
 lcd.setCursor(13,1);
 if (war < 300)                      //*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 {
   
    lcd.setCursor(0,0);
    lcd.print("   Czujnik ON   ");
    lcd.setCursor(13,1);
    digitalWrite(A1, LOW);
 }
 else
 {
   
   lcd.setCursor(0,0);
   lcd.print("   Czujnik OFF  ");
   lcd.setCursor(13,1);
   digitalWrite(A1, HIGH);
 }
 lcd.print("");
 delay(1000);                         //opóźnienie między kolejnymi odczytami

 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);
if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
   
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#13
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.
Odpowiedz
#14
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);

}

Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#15
(30-11-2017, 11:05)Ronin napisał(a):
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);




Próbowałem dodać do programu linie i wyskakuje mi błąd stray `\302` in program dokładnie na linii onTime = 0;

Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C
#include "Timer.h"

//dodajemy timer

Timer t;
#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;

#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

t.every(500, PIRCheck);  //co 500ms wykonywana jest metoda
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
  t.update();

void PIRCheck() {
 checkForMovement();
}

boolean checkForMovement() {
 if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     state = true;
   }
   else {
     state = false;
   }
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     onTime = 0;
     state = true;
   }
 }

 lightControl(state);
 return state;
}


void lightControl(boolean isStateOn) {
 if (isStateOn) {
   if (onTime < CZAS_SWIECENIA) {
     digitalWrite(SWIATLO, HIGH);
     onTime++;
   }
 }
 else {
   digitalWrite(SWIATLO, LOW);
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
   lightControl(checkForMovement());
 }

 if (onTime > CZAS_SWIECENIA) {
 onTime = 0;
}
}
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 if (war < 900); // o 8:55 jasność 416 o 16:30 jasność 227
   
 //*gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#16
(01-12-2017, 20:06)Ronin napisał(a):
(30-11-2017, 11:05)Ronin napisał(a):
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);




Próbowałem dodać do programu linie i wyskakuje mi błąd stray `\302` in program dokładnie na linii onTime = 0;

Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C
#include "Timer.h"

//dodajemy timer

Timer t;
#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;

#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

t.every(500, PIRCheck);  //co 500ms wykonywana jest metoda
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
  t.update();

void PIRCheck() {
 checkForMovement();
}

boolean checkForMovement() {
 if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     state = true;
   }
   else {
     state = false;
   }
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     onTime = 0;
     state = true;
   }
 }

 lightControl(state);
 return state;
}


void lightControl(boolean isStateOn) {
 if (isStateOn) {
   if (onTime < CZAS_SWIECENIA) {
     digitalWrite(SWIATLO, HIGH);
     onTime++;
   }
 }
 else {
   digitalWrite(SWIATLO, LOW);
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
   lightControl(checkForMovement());
 }

 if (onTime > CZAS_SWIECENIA) {
 onTime = 0;
}
}
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 if (war < 900); // o 8:55 jasność 416 o 16:30 jasność 227
   
 //*gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Próbowałem też jak kolega z forum napisał. Niestety nie działa tak jak ma działać. Po włączeniu zasilania ma się palić czerwona dioda LED1 a pali się zielona LED0. Przycisk załącza i wtedy działa czujnik Pir ale mimo że czekam bez ruchu aby wyłączył się przekaźnik to zero rekcji. Po powtórnym naciśnięciu  ma wyłączyć i palić się dioda LED1 czerwona. Zero reakcji. Tu program kolegi. Ps. zmieniałem  czas. Próbowałem też połączyć te dwa programy ale coś źle robię. U mnie działa przycisk dobrze wyłącza i załącza
Kod:
#include "Timer.h"

//dodajemy timer

Timer t;

#define PRZYCISK 2 // Przycisk z
#define SWIATLO 3 // Przekaznik
#define PIR 5 // Czujnik ruchu
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 6; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;
boolean isSwitchOn = false;

boolean wlaczony = false;

void setup() {

pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
t.every(5, PIRCheck);//co 500ms wykonywana jest metoda

}

void loop() {
t.update();
}


void PIRCheck() {
if (digitalRead(PRZYCISK) == LOW && !state) { //jezeli wcisnieto przycisk i status zapalania jest na false
isSwitchOn = true;//to uruchom PIR i zielona LED1
}
if (digitalRead(PRZYCISK) == LOW && state) {//jezli wcisnieto przycisk i status zapalania jest na true
isSwitchOn = false;//wylacz PIR i czerona LED0
}
checkForMovement(isSwitchOn);
}

boolean checkForMovement(boolean isSwitchOn) {
if (isSwitchOn) {
if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
if (digitalRead(PIR) == HIGH) { //wykryto ruch
state = true;
}
else {
state = false;
}
}
if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
if (digitalRead(PIR) == HIGH) {//wykryto ruch
onTime = 0;
state = true;
}
}
}

lightControl(state);
return state;
}


void lightControl(boolean isStateOn) {
if (isStateOn) {
if (onTime < CZAS_SWIECENIA) {
digitalWrite(SWIATLO, HIGH);
onTime++;
}
}
else {
digitalWrite(SWIATLO, LOW);
}

if (onTime > 10 && onTime < 14) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
lightControl(checkForMovement(true));
}

if (onTime > CZAS_SWIECENIA) {
onTime = 0;
}
}

(01-12-2017, 20:06)Ronin napisał(a):
(30-11-2017, 11:05)Ronin napisał(a):
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);




Próbowałem dodać do programu linie i wyskakuje mi błąd stray `\302` in program dokładnie na linii onTime = 0;

Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C
#include "Timer.h"

//dodajemy timer

Timer t;
#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;

#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

t.every(500, PIRCheck);  //co 500ms wykonywana jest metoda
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
  t.update();

void PIRCheck() {
 checkForMovement();
}

boolean checkForMovement() {
 if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     state = true;
   }
   else {
     state = false;
   }
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     onTime = 0;
     state = true;
   }
 }

 lightControl(state);
 return state;
}


void lightControl(boolean isStateOn) {
 if (isStateOn) {
   if (onTime < CZAS_SWIECENIA) {
     digitalWrite(SWIATLO, HIGH);
     onTime++;
   }
 }
 else {
   digitalWrite(SWIATLO, LOW);
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
   lightControl(checkForMovement());
 }

 if (onTime > CZAS_SWIECENIA) {
 onTime = 0;
}
}
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 if (war < 900); // o 8:55 jasność 416 o 16:30 jasność 227
   
 //*gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Próbowałem też jak kolega z forum napisał. Niestety nie działa tak jak ma działać. Po włączeniu zasilania ma się palić czerwona dioda LED1 a pali się zielona LED0. Przycisk załącza i wtedy działa czujnik Pir ale mimo że czekam bez ruchu aby wyłączył się przekaźnik to zero rekcji. Po powtórnym naciśnięciu  ma wyłączyć i palić się dioda LED1 czerwona. Zero reakcji. Tu program kolegi. Ps. zmieniałem  czas. Próbowałem też połączyć te dwa programy ale coś źle robię. U mnie działa przycisk dobrze wyłącza i załącza
Kod:
#include "Timer.h"

//dodajemy timer

Timer t;

#define PRZYCISK 2 // Przycisk z
#define SWIATLO 3 // Przekaznik
#define PIR 5 // Czujnik ruchu
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 6; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;
boolean isSwitchOn = false;

boolean wlaczony = false;

void setup() {

pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
t.every(5, PIRCheck);//co 500ms wykonywana jest metoda

}

void loop() {
t.update();
}


void PIRCheck() {
if (digitalRead(PRZYCISK) == LOW && !state) { //jezeli wcisnieto przycisk i status zapalania jest na false
isSwitchOn = true;//to uruchom PIR i zielona LED1
}
if (digitalRead(PRZYCISK) == LOW && state) {//jezli wcisnieto przycisk i status zapalania jest na true
isSwitchOn = false;//wylacz PIR i czerona LED0
}
checkForMovement(isSwitchOn);
}

boolean checkForMovement(boolean isSwitchOn) {
if (isSwitchOn) {
if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
if (digitalRead(PIR) == HIGH) { //wykryto ruch
state = true;
}
else {
state = false;
}
}
if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
if (digitalRead(PIR) == HIGH) {//wykryto ruch
onTime = 0;
state = true;
}
}
}

lightControl(state);
return state;
}


void lightControl(boolean isStateOn) {
if (isStateOn) {
if (onTime < CZAS_SWIECENIA) {
digitalWrite(SWIATLO, HIGH);
onTime++;
}
}
else {
digitalWrite(SWIATLO, LOW);
}

if (onTime > 10 && onTime < 14) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
lightControl(checkForMovement(true));
}

if (onTime > CZAS_SWIECENIA) {
onTime = 0;
}
}

(01-12-2017, 20:06)Ronin napisał(a):
(30-11-2017, 11:05)Ronin napisał(a):
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);




Próbowałem dodać do programu linie i wyskakuje mi błąd stray `\302` in program dokładnie na linii onTime = 0;

Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C
#include "Timer.h"

//dodajemy timer

Timer t;
#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;

#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

t.every(500, PIRCheck);  //co 500ms wykonywana jest metoda
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
  t.update();

void PIRCheck() {
 checkForMovement();
}

boolean checkForMovement() {
 if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     state = true;
   }
   else {
     state = false;
   }
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     onTime = 0;
     state = true;
   }
 }

 lightControl(state);
 return state;
}


void lightControl(boolean isStateOn) {
 if (isStateOn) {
   if (onTime < CZAS_SWIECENIA) {
     digitalWrite(SWIATLO, HIGH);
     onTime++;
   }
 }
 else {
   digitalWrite(SWIATLO, LOW);
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
   lightControl(checkForMovement());
 }

 if (onTime > CZAS_SWIECENIA) {
 onTime = 0;
}
}
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 if (war < 900); // o 8:55 jasność 416 o 16:30 jasność 227
   
 //*gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Próbowałem też jak kolega z forum napisał. Niestety nie działa tak jak ma działać. Po włączeniu zasilania ma się palić czerwona dioda LED1 a pali się zielona LED0. Przycisk załącza i wtedy działa czujnik Pir ale mimo że czekam bez ruchu aby wyłączył się przekaźnik to zero rekcji. Po powtórnym naciśnięciu  ma wyłączyć i palić się dioda LED1 czerwona. Zero reakcji. Tu program kolegi. Ps. zmieniałem  czas. Próbowałem też połączyć te dwa programy ale coś źle robię. U mnie działa przycisk dobrze wyłącza i załącza
Kod:
#include "Timer.h"

//dodajemy timer

Timer t;

#define PRZYCISK 2 // Przycisk z
#define SWIATLO 3 // Przekaznik
#define PIR 5 // Czujnik ruchu
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 6; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;
boolean isSwitchOn = false;

boolean wlaczony = false;

void setup() {

pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
t.every(5, PIRCheck);//co 500ms wykonywana jest metoda

}

void loop() {
t.update();
}


void PIRCheck() {
if (digitalRead(PRZYCISK) == LOW && !state) { //jezeli wcisnieto przycisk i status zapalania jest na false
isSwitchOn = true;//to uruchom PIR i zielona LED1
}
if (digitalRead(PRZYCISK) == LOW && state) {//jezli wcisnieto przycisk i status zapalania jest na true
isSwitchOn = false;//wylacz PIR i czerona LED0
}
checkForMovement(isSwitchOn);
}

boolean checkForMovement(boolean isSwitchOn) {
if (isSwitchOn) {
if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
if (digitalRead(PIR) == HIGH) { //wykryto ruch
state = true;
}
else {
state = false;
}
}
if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
if (digitalRead(PIR) == HIGH) {//wykryto ruch
onTime = 0;
state = true;
}
}
}

lightControl(state);
return state;
}


void lightControl(boolean isStateOn) {
if (isStateOn) {
if (onTime < CZAS_SWIECENIA) {
digitalWrite(SWIATLO, HIGH);
onTime++;
}
}
else {
digitalWrite(SWIATLO, LOW);
}

if (onTime > 10 && onTime < 14) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
lightControl(checkForMovement(true));
}

if (onTime > CZAS_SWIECENIA) {
onTime = 0;
}
}

(01-12-2017, 20:06)Ronin napisał(a):
(30-11-2017, 11:05)Ronin napisał(a):
(29-11-2017, 09:58)tom5555 napisał(a):
Cytat:Za ile i z kont ?
Za 10 zł, za tyle go kupiłem. Jestem z Zabrza, jeżeli się zdecydujesz to możemy się dogadać gdzie i kiedy.

W tej chwili program wygląda tak: Prawie wszystko działa oprócz sygnalizacji działania czujnika pir  i fotorezystora. Chcę aby po załączeniu przyciskiem fotorezystor załączał i wyłączał czujnik ruchu. Na razie piszę to na wyświetlacz 16x2 bo taki tylko mam.
Cytat:
Kod PHP:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000
#define FOTOREZYSTOR A1
#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPINDHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik A1  //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer Bounce(PRZYCISK20);
boolean wlaczony false;
unsigned long przycisk_czaswlaczony_czas;

void setup() {
 
 
 dht.begin();
 
 
  lcd
.init();                     
  lcd
.clear();// czyszczenie ekranu
 
 
  
// Wyświetl wiadomość na wyświetlaczu LCD.
 
 
  lcd
.backlight();//Zapalanie podświetlenia
 
 lcd.setCursor(0,0);
 
 lcd.print("Jasnosc:     ");
 
 
 pinMode
(LED0OUTPUT);
 
pinMode(LED1OUTPUT);
 
pinMode(SWIATLOOUTPUT);
 
digitalWrite(LED0HIGH);
 
digitalWrite(PIRLOW);
 
pinMode(PIRINPUT);
 
pinMode(PRZYCISKINPUT_PULLUP);
}

void zmiana()
{
 
digitalWrite(SWIATLOLOW);
 
wlaczony_czas millis() + CZAS_SWIECENIA;
 
przycisk_czas millis() + 1000;
 
wlaczony = !wlaczony;
 
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 
   
//Sygnalizacja działania czujnika ruchu on/off
 
   
     digitalWrite
(PIRHIGH);
 
    lcd.setCursor(13,0);
 
    lcd.print("On");
 
 
     digitalWrite
(PIRLOW);
 
    lcd.setCursor(13,0);
 
    lcd.print("Off");

 
 float h dht.readHumidity();
 
 float t dht.readTemperature();
 
 if (isnan(t) || isnan(h)) {
 
     } else {
 
   lcd.setCursor(0,1);
 
   lcd.print("W:      T:      "); 
 
   lcd.setCursor(2,1);
 
   lcd.print(h);
 
   lcd.print("%");
 
   lcd.setCursor(10,1); 
 
   lcd.print(t);
 
   lcd.print("C");
 
 
  int war 
analogRead(czujnik);      //odczytanie wartości z A1*
 
 

  if 
(war 300); // o 8:55 jasność 416
 
   
  
//*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 
 {
 
        
    lcd
.setCursor(0,0);
 
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony 
 
   lcd.setCursor(9,0);
 
   lcd.print(war);                     //wyświetlenie jej na LCD
 
  
  
}
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
 
 digitalWrite
(LED0wlaczony);
 
digitalWrite(LED1LOW);
 if (
przycisk_czas millis())
 
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmianaFALLING);

 if (
digitalRead(PIR))
 {
 
  if (wlaczony && wlaczony_czas millis())
 
       
   digitalWrite
(SWIATLOHIGH);
 }
 else
 
  digitalWrite(SWIATLOLOW);




Próbowałem dodać do programu linie i wyskakuje mi błąd stray `\302` in program dokładnie na linii onTime = 0;

Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C
#include "Timer.h"

//dodajemy timer

Timer t;
#define PRZYCISK 2
#define SWIATLO 3                                                                                                                                                      
#define PIR 5
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 600; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;

#define DHTPIN 4  
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

t.every(500, PIRCheck);  //co 500ms wykonywana jest metoda
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
  t.update();

void PIRCheck() {
 checkForMovement();
}

boolean checkForMovement() {
 if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     state = true;
   }
   else {
     state = false;
   }
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
   if (digitalRead(PIR) == HIGH) { //wykryto ruch
     onTime = 0;
     state = true;
   }
 }

 lightControl(state);
 return state;
}


void lightControl(boolean isStateOn) {
 if (isStateOn) {
   if (onTime < CZAS_SWIECENIA) {
     digitalWrite(SWIATLO, HIGH);
     onTime++;
   }
 }
 else {
   digitalWrite(SWIATLO, LOW);
 }

 if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
   lightControl(checkForMovement());
 }

 if (onTime > CZAS_SWIECENIA) {
 onTime = 0;
}
}
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");
 
 int war = analogRead(czujnik);      //odczytanie wartości z A1*
 
 if (war < 900); // o 8:55 jasność 416 o 16:30 jasność 227
   
 //*gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:    |   "); // Off czujnik pir wyłączony On załączony
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Próbowałem też jak kolega z forum napisał. Niestety nie działa tak jak ma działać. Po włączeniu zasilania ma się palić czerwona dioda LED1 a pali się zielona LED0. Przycisk załącza i wtedy działa czujnik Pir ale mimo że czekam bez ruchu aby wyłączył się przekaźnik to zero rekcji. Po powtórnym naciśnięciu  ma wyłączyć i palić się dioda LED1 czerwona. Zero reakcji. Tu program kolegi. Ps. zmieniałem  czas. Próbowałem też połączyć te dwa programy ale coś źle robię. U mnie działa przycisk dobrze wyłącza i załącza
Kod:
#include "Timer.h"

//dodajemy timer

Timer t;

#define PRZYCISK 2 // Przycisk z
#define SWIATLO 3 // Przekaznik
#define PIR 5 // Czujnik ruchu
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
int CZAS_SWIECENIA = 6; // Czas świecenia 600/2 = 300s
int onTime = 0;
boolean state = false;
boolean isSwitchOn = false;

boolean wlaczony = false;

void setup() {

pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
digitalWrite(LED0, HIGH);

pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
t.every(5, PIRCheck);//co 500ms wykonywana jest metoda

}

void loop() {
t.update();
}


void PIRCheck() {
if (digitalRead(PRZYCISK) == LOW && !state) { //jezeli wcisnieto przycisk i status zapalania jest na false
isSwitchOn = true;//to uruchom PIR i zielona LED1
}
if (digitalRead(PRZYCISK) == LOW && state) {//jezli wcisnieto przycisk i status zapalania jest na true
isSwitchOn = false;//wylacz PIR i czerona LED0
}
checkForMovement(isSwitchOn);
}

boolean checkForMovement(boolean isSwitchOn) {
if (isSwitchOn) {
if (onTime == 0) { //jak czas swiecienia jest rowny 0 to zwracaj tylko status czujnika
if (digitalRead(PIR) == HIGH) { //wykryto ruch
state = true;
}
else {
state = false;
}
}
if (onTime > 100 && onTime < 140) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund
if (digitalRead(PIR) == HIGH) {//wykryto ruch
onTime = 0;
state = true;
}
}
}

lightControl(state);
return state;
}


void lightControl(boolean isStateOn) {
if (isStateOn) {
if (onTime < CZAS_SWIECENIA) {
digitalWrite(SWIATLO, HIGH);
onTime++;
}
}
else {
digitalWrite(SWIATLO, LOW);
}

if (onTime > 10 && onTime < 14) { //jezeli czas zalacznie przekaznika jest pomiedzy 50 a 70 sekund (sekundy x2 bo timer chodzi w interwałach co 0,5 sekundy)
lightControl(checkForMovement(true));
}

if (onTime > CZAS_SWIECENIA) {
onTime = 0;
}
}
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#17
Cześć, mógłbyś podesłać aktualny kod, bo twój ostatni post jest całkowicie nie czytelny, ze względu na odnośniki do innych postów
>> Nie pomagam na PW. Od tego jest forum Uśmiech >> Koniecznie sprawdź: Jak dodawać załączniki

1 problem = 1 wątek
Odpowiedz
#18
(03-12-2017, 01:19)feriar napisał(a): Cześć, mógłbyś podesłać aktualny kod, bo twój ostatni post jest całkowicie nie czytelny, ze względu na odnośniki do innych postów

Ok.To ostatni aktualny kod: Próbowałem kopiować listę błędów. Znikęła mi gdzieś ta zakładka.
Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2 // Przycisk On/Off
#define SWIATLO 3  // Przekaznik                                                                                                                                                    
#define PIR 5      // Czujnik Ruchu
#define LED0 13 //Czerwona
#define LED1 12 //Zielona
#define CZAS_SWIECENIA 1000

#define DHTPIN 4 //Czujnik tmperatury i wilgotności
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.
 
 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasnosc:     ");
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));
}

void loop() {
 
 // Termometr i wilgotnościomierz
 
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
     } else {
   
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");

  //Fotorezystor
   int war = analogRead(czujnik);      //odczytanie wartości z A1*
                //wyświetlenie jej na monitorze
 lcd.print(war);                     //wyświetlenie jej na LCD
 lcd.setCursor(13,1);
  if (war < 300)                      //*gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
 {
   
    lcd.setCursor(13,0);
    lcd.print(" On ");
     
   
 }
 else
 {
   
   lcd.setCursor(13,0);
   lcd.print("Off");
 
   
 }
 //gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasnosc:        ");
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jej na LCD
 
 }
 delay(1000);                         //opóźnienie między kolejnymi odczytami

//
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);
if (przycisk_czas < millis())
  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))
{
  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
}
else
  digitalWrite(SWIATLO, LOW);

}
Próbowałem wstawić- jeżeli wartość jasność mniejsza lub równa 300 to czujnik ruchu załączony a jeśli większa od 300 to wyłączony. if (war<=300?... if (war>300...
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz
#19
(27-11-2017, 22:34)tom5555 napisał(a): Jak nigdzie nie znajdziesz Nano po rozsądnej cenie, mogę odsprzedać jednego klona. Mam kilka w zapasie.

Ostatnia wersja programu z polskimi literami.
Kod:
#include "DHT.h" //Biblioteka do AM2302
#include <Bounce2.h> //Biblioteka do przycisków
#include <LiquidCrystal_I2C.h> //Biblioteka do LCD I2C

#define PRZYCISK 2 // Przycisk On/Off
#define SWIATLO 3  // Przekaznik                                                                                                                                                    
#define PIR 5      // Czujnik Ruchu
#define LED0 13    //Czerwona
#define LED1 12    //Zielona
#define CZAS_SWIECENIA 1000

#define DHTPIN 4 //Czujnik temperatury i wilgotności
#define DHTTYPE DHT22   // DHT 22  (AM2302)

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x3F,16,2);

//Polskie znaki ś,ć,ą,ę,ł,ó,ń,ż

// ą

byte znak0[8] =
{              
 B00000,
 B01110,
 B00001,
 B01111,
 B10001,
 B01111,
 B00100,
 B00110,
};

// ę

byte znak1[8] =
{              
 B00000,
 B01110,
 B00001,
 B01111,
 B10001,
 B01110,
 B00100,
 B00110,
};

// ł

byte znak2[8] =
{              
 B01100,
 B00100,
 B00110,
 B01100,
 B00100,
 B00100,
 B01110,
 B00000,
};

// ó

byte znak3[8] =
{              
 B00010,
 B00100,
 B01110,
 B10001,
 B10001,
 B10001,
 B01110,
 B00000,
};

// ć

byte znak4[8] =
{              
 B00010,
 B00100,
 B01110,
 B10000,
 B10000,
 B10000,
 B01110,
 B00000,
};

// ś

byte znak5[8] =
{              
 B00010,
 B00100,
 B01110,
 B10000,
 B01110,
 B00001,
 B11110,
 B00000,
};

// ń

byte znak6[8] =
{              
 B00010,
 B00100,
 B10110,
 B11001,
 B10001,
 B10001,
 B10001,
 B00000,
};

// ż

byte znak7[8] =
{              
 B00100,
 B00000,
 B11111,
 B00010,
 B00100,
 B01000,
 B11111,
 B00000,
};

int czujnik = A1;   //pin analogowy A1 połączony z nóżką fotorezystora*

Bounce bouncer = Bounce(PRZYCISK, 20);
boolean wlaczony = false;
unsigned long przycisk_czas, wlaczony_czas;

void setup() {

 dht.begin();
 
 lcd.init();                    
 lcd.clear();// czyszczenie ekranu
 
 // Wyświetl wiadomość na wyświetlaczu LCD.

 lcd.backlight();//Zapalanie podświetlenia
 lcd.setCursor(0,0);
 lcd.print("Jasno  :     ");
 lcd.createChar(5, znak5);    //wyświetlenie znaku  ś
 lcd.setCursor(5,0);
 lcd.print((char)5);
 lcd.createChar(4, znak4);    //wyświetlenie znaku  ć
 lcd.setCursor(6,0);
 lcd.print((char)4);
 
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(SWIATLO, OUTPUT);
pinMode(PIR, INPUT);
pinMode(PRZYCISK, INPUT_PULLUP);

lcd.createChar(0, znak0);   //wyświetlenie znaku  ą
lcd.createChar(1, znak1);   //wyświetlenie znaku  ę
lcd.createChar(2, znak2);   //wyświetlenie znaku  ł
lcd.createChar(3, znak3);   //wyświetlenie znaku  ó
lcd.createChar(4, znak4);   //wyświetlenie znaku  ś
lcd.createChar(5, znak5);   //wyświetlenie znaku  ć
lcd.createChar(6, znak6);   //wyświetlenie znaku  ń
lcd.createChar(7, znak7);   //wyświetlenie znaku  ż
}

void zmiana()
{
digitalWrite(SWIATLO, LOW);
wlaczony_czas = millis() + CZAS_SWIECENIA;
przycisk_czas = millis() + 1000;
wlaczony = !wlaczony;
detachInterrupt(digitalPinToInterrupt(PRZYCISK));

}

void loop() {
 
 // Termometr i wilgotnościomierz
 
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 if (isnan(t) || isnan(h)) {
   
     } else {
   
   lcd.setCursor(0,1);
   lcd.print("W:      T:      ");
   lcd.setCursor(2,1);
   lcd.print(h);
   lcd.print("%");
   lcd.setCursor(10,1);
   lcd.print(t);
   lcd.print("C");

  //Fotorezystor
 
   int war = analogRead(czujnik);      //odczytanie wartości z A1*
   
                //wyświetlenie jej na monitorze
               
 lcd.print(war);                     //wyświetlenie jej na LCD
 
 //gdy wartość przekroczy pewien ustalony próg, wtedy czujnik ruchu zadziała
 
   lcd.setCursor(0,0);
   lcd.print("Jasno  :        ");
   lcd.createChar(5, znak5);    //wyświetlenie znaku  ś
   lcd.setCursor(5,0);
   lcd.print((char)5);
   lcd.createChar(4, znak4);    //wyświetlenie znaku  ć
   lcd.setCursor(6,0);
   lcd.print((char)4);
   lcd.setCursor(9,0);
   lcd.print(war);                     //wyświetlenie jasności na LCD
   
   if (war <= 240) //gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 12 zaświeci się
   lcd.setCursor(12,0);
   lcd.print(" On ");

   digitalWrite(LED1, wlaczony);
   digitalWrite(LED0, LOW);

     
   if (war > 240) //gdy wartość przekroczy pewien ustalony próg, wtedy dioda na pinie 13 zaświeci się
   lcd.setCursor(13,0);
   lcd.print("Off ");

   digitalWrite(LED0, wlaczony);
   digitalWrite(LED1, LOW);
     
 }
 
 delay(1000);                         //opóźnienie między kolejnymi odczytami

// Przycisk i sygnalizacja off/on
 
digitalWrite(LED0, wlaczony);
digitalWrite(LED1, LOW);

if (przycisk_czas < millis())

  attachInterrupt(digitalPinToInterrupt(PRZYCISK), zmiana, FALLING);

if (digitalRead(PIR))

{

  if (wlaczony && wlaczony_czas < millis())
       
  digitalWrite(SWIATLO, HIGH);
     
}

else

  digitalWrite(SWIATLO, LOW);
 
}

Działa tylko nie umiem zrobić aby czujnik pir po wykryciu ruchu co 30 sekund od nowa program liczył czas świecenia.  Czyli po wykryciu ruchu pierwszy raz światło świeciło się 180 sekund gdy nie wykryto by ruchu co 30 sekund. Po wykryciu ruchu czas od nowa i wykrywanie co 30 sekund. Chce też wyrzucić przycisk a urządzenie włączało by się gdy jasność 240 a powyżej wyłączone. Da się tak zrobić? Mam też moduł RTC DS3231. Jak dołączyć go do programu?
Jak nie chcesz odpowiedzieć to nie pisz !!!
Odpowiedz


Skocz do:


Użytkownicy przeglądający ten wątek: 1 gości