• 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
Sterownik do akwarium by Tedy24
#11
Tak działa, zapala się dioda szkopuł w tym ze dodałem juz te adresy u dalej nic.  Tylko jakbyś mógł zerknąć czy nic nie pomieszałem z tymi adresami. 

Kod:
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0xFC, 0x60, 0xA2, 0x15, 0x01, 0xAB,
0x28, 0xFF, 0xE1, 0x50, 0xA3, 0x15, 0x01, 0x79,
0x28, 0xFF, 0xA1, 0x60, 0xA3, 0x15, 0x01, 0xD8
};

Reszta jest jak wcześniej
 
Odpowiedź
#12
(15-02-2016, 22:36)Tedy24 napisał(a): Tak działa, zapala się dioda szkopuł w tym ze dodałem juz te adresy u dalej nic.  Tylko jakbyś mógł zerknąć czy nic nie pomieszałem z tymi adresami. 

Kod:
const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0xFC, 0x60, 0xA2, 0x15, 0x01, 0xAB,
0x28, 0xFF, 0xE1, 0x50, 0xA3, 0x15, 0x01, 0x79,
0x28, 0xFF, 0xA1, 0x60, 0xA3, 0x15, 0x01, 0xD8
};

Reszta jest jak wcześniej

Zauważyłem ze jest tak jakby ta Funkcja czujni1k wykonywała się tylko raz,  czyli jak się wciśnie AUTO to sprawdza temperaturę i zapala lub nie diodę.  Ne jest tak ze bada cały czas ta temperaturę.  Może tu co jest złe.  Nie wiem tylko co dopisać i gdzie.  Może inna funkcje zastosować?
 
Odpowiedź
#13
Witam
Jeszcze jedno pytanko:  A ten fragment kodu z adresami został skopiowany z netu i wklejony do Twojego sketcha???
Jeśli tak to na 100% nie będzie działać :-)
W pierwszej mojej odpowiedzi dałem linka jak obsługuje się DALLASY i tam jest wytłumaczone jak odczytać adresy.
Po drugie - sytuacja dojrzała już do tego abyś w końcu zamieścił CAŁY, KOMPLETNY kod, z którym się borykasz, bo jak dotąd albo był niekompletny albo błędny.
 Co do jednorazowego działania funkcji czujnikX(), to mam pewną teorię ale bez kodu trudno będzie ją potwierdzić :-)
Podobno całkiem niedawno udowodniono obecność fal grawitacyjnych o których 100 lat temu już pisał Einstein :-) 
Pozdrawiam
 
Odpowiedź
#14
Kompletny kod wklejanie jest w pierwszym poście. Do niego dopisalem adresy tak jak było na tej stronie od Ciebie. Skoro program odczytuje temperaturę z każdego czujnika i zapala diodę przypisana do danego czujnika wiec z adresami wydaje mi się ze jest dobrze. Problem polega na tym ze funkcja wykonuje się raz.
 
Odpowiedź
#15
Witam
Kurcze... zaraz dostane białej gorączki :-)
Skąd wiesz, że jest dobrze? Skąd wiesz jaką temperaturę zwraca Ci każdy z czujników skoro w całym programie tylko raz .....i tylko w setupie() ją wyświetlasz!!!
Masz w setupie() tylko to: 
Kod:
lcd.setCursor(1,0);  
 lcd.print("Czujnik-1: ");
 lcd.print(sensors.getTempCByIndex(0));

...czyli za pomocą funkcji getTempIndex(0) czytasz temperaturę niby z pierwszego czujnika... NIBY...bo nie wiadomo czy pierwszy czujnik ma index (0).
Potem w programie też tylko porównujesz temperaturę jaką zwraca Ci wirtualny i nieznany (bo niezdefiniowany wcześniej) czujnik z np 27 st. C i program robi co chce.
Sprawdzałeś chociaż raz co zwracają te czujniki?
Na przykład zmodyfikuj czujnik1() i dodaj tam odczyt temperatury:

Kod:
void czujnik1()
{
 sensors.requestTemperatures();

//----- te 4 linie dodałem do Twojej funkcji : ------
lcd.clear();
lcd.setCursor(1,0);  
lcd.print("Czujnik-1: ");
lcd.print(sensors.getTempCByIndex(0));

if(sensors.getTempCByIndex(0) < 27)
 {
 digitalWrite( wentylewy, HIGH);
 } else
 {
   digitalWrite( wentylewy, LOW);
 }
 
....potem ogrzewaj czujnik i zobacz czy Ci się zmienia temperatura.
Jeśli nadal nic to wywal wszystko z loopa i daj tam tylko czujnik1();
MUSI działać !!!!
Jeśli nie - to oznacza, że jednak czujniki NICZEGO nie mierzą, bo nie są zdefiniowane NIESTETY :-)
Pozdrawiam i jeszcze raz odsyłam do przeczytania ze zrozumieniem linka opisującego jak korzystać z Dallasów.
... ps. i POPROSIMY CAŁY KOD !!!
 
Odpowiedź
#16
Proszę cały kod.

Kod:
#include <MenuBackend.h>    //MenuBackend library - copyright by Alexander Brevig
#include <LiquidCrystal_I2C.h> //this library is included in the Arduino IDE
#include <Wire.h>
#include <IRremote.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS18B20.h>
#define ONE_WIRE_BUS 2
#define SENSORS_NUM 3
#define wentylewy 8
#define wentylprawy 7
#define wentprzodlewy 6
#define wentprzodprawy 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27, 2,1,0,4,5,6,7);

const byte address[SENSORS_NUM][8] PROGMEM = {
0x28, 0xFF, 0xFC, 0x60, 0xA2, 0x15, 0x01, 0xAB,
0x28, 0xFF, 0xE1, 0x50, 0xA3, 0x15, 0x01, 0x79,
0x28, 0xFF, 0xA1, 0x60, 0xA3, 0x15, 0x01, 0xD8
};
int RECV_PIN = 3;//pilot
IRrecv irrecv(RECV_PIN);
decode_results results;
boolean stan=0;//pilot
const int lamptyl = 4;
const int lamprzod = 9;

//Menu variables
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
    
    MenuItem menu1Item1 = MenuItem("1. Chlodzenie     ");
    
         MenuItem menuItem1SubItem1 = MenuItem("1.1 Tyl lewy        ");
               MenuItem menuItem1SubItem1Item1 = MenuItem("1.1.1 ON      ");
               MenuItem menuItem1SubItem1Item2 = MenuItem("1.1.2 OFF      ");
               MenuItem menuItem1SubItem1Item3 = MenuItem("1.1.3 AUTO      ");
    
         MenuItem menuItem1SubItem2 = MenuItem("1.2 Tyl prawy       ");
               MenuItem menuItem1SubItem2Item1 = MenuItem("1.2.1 ON      ");
               MenuItem menuItem1SubItem2Item2 = MenuItem("1.2.2 OFF      ");
               MenuItem menuItem1SubItem2Item3 = MenuItem("1.2.3 AUTO      ");
               
         MenuItem menuItem1SubItem3 = MenuItem("1.3 Przod lewy        ");
               MenuItem menuItem1SubItem3Item1 = MenuItem("1.3.1 ON      ");
               MenuItem menuItem1SubItem3Item2 = MenuItem("1.3.2 OFF      ");
               MenuItem menuItem1SubItem3Item3 = MenuItem("1.3.3 AUTO      ");
    
         MenuItem menuItem1SubItem4 = MenuItem("1.4 Przod prawy     ");
               MenuItem menuItem1SubItem4Item1 = MenuItem("1.4.1 ON       ");
               MenuItem menuItem1SubItem4Item2 = MenuItem("1.4.2 OFF      ");
               MenuItem menuItem1SubItem4Item3 = MenuItem("1.4.3 AUTO      ");
    
    MenuItem menu1Item2 = MenuItem("2. Oswietlenie         ");
    
         MenuItem menuItem2SubItem1 = MenuItem("2.1 Tyl        ");
               MenuItem menuItem2SubItem1Item1 = MenuItem("2.1.1 ON      ");
               MenuItem menuItem2SubItem1Item2 = MenuItem("2.1.2 OFF      ");
               MenuItem menuItem2SubItem1Item3 = MenuItem("2.1.3 AUTO      ");
         
         MenuItem menuItem2SubItem2 = MenuItem("2.2 Przod      ");
               MenuItem menuItem2SubItem2Item1 = MenuItem("2.2.1 ON      ");
               MenuItem menuItem2SubItem2Item2 = MenuItem("2.2.2 OFF      ");
               MenuItem menuItem2SubItem2Item3 = MenuItem("2.2.3 AUTO      ");
         
    MenuItem menu1Item3 = MenuItem("3. Czujki ");
    MenuItem menu1Item4 = MenuItem("4. Wylacz wszystko ");
    MenuItem menu1Item5 = MenuItem("5. Wlacz wszystko ");
    
void setup()
{
Serial.begin(9600);
sensors.begin();
irrecv.enableIRIn();//pilot
pinMode(13,OUTPUT);
pinMode(wentylewy, OUTPUT);
 pinMode(wentylprawy, OUTPUT);
 pinMode(wentprzodlewy, OUTPUT);
 pinMode(wentprzodprawy, OUTPUT);
 pinMode(lamptyl, OUTPUT);
 pinMode(lamprzod, OUTPUT);
lcd.begin(16, 2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  //configure menu
  menu.getRoot().add(menu1Item1);
    menu1Item1.addRight(menu1Item2).addRight(menu1Item3).addRight(menu1Item4).addRight(menu1Item5);
      menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2).addRight(menuItem1SubItem3).addRight(menuItem1SubItem4);;
       
        menuItem1SubItem1.add(menuItem1SubItem1Item1).addRight(menuItem1SubItem1Item2).addRight(menuItem1SubItem1Item3);
        menuItem1SubItem2.add(menuItem1SubItem2Item1).addRight(menuItem1SubItem2Item2).addRight(menuItem1SubItem2Item3);
        menuItem1SubItem3.add(menuItem1SubItem3Item1).addRight(menuItem1SubItem3Item2).addRight(menuItem1SubItem3Item3);
        menuItem1SubItem4.add(menuItem1SubItem4Item1).addRight(menuItem1SubItem4Item2).addRight(menuItem1SubItem4Item3);
        
      menu1Item2.add(menuItem2SubItem1).addRight(menuItem2SubItem2);;
      
        menuItem2SubItem1.add(menuItem2SubItem1Item1).addRight(menuItem2SubItem1Item2).addRight(menuItem2SubItem1Item3);
        menuItem2SubItem2.add(menuItem2SubItem2Item1).addRight(menuItem2SubItem2Item2).addRight(menuItem2SubItem2Item3);
        
        
  menu.moveUp();
  //lcd.print("T       ");
  delay(500);
 lcd.setCursor(1,0);  
  lcd.print("Czujnik-1: ");
  lcd.print(sensors.getTempCByIndex(0));
 
  lcd.setCursor(11,1);  
  lcd.print("Menu>");
  
}

 void translateIR() // takes action based on IR code received

{
MenuItem currentMenu=menu.getCurrent();
  switch(results.value)
  {

  case  16742535:   //if the current menu has a child and has been pressed enter then menu navigate to item below
        menu.moveDown();
        break;
  
  case  16722135:  //otherwise, if menu has no child and has been pressed enter the current menu is used
        menu.use();
        break;

  case 16732335:  
        menu.moveUp();
        break;
 
  case 16728255:
        menu.moveRight();  
        break;
  
  case 16752735:
        menu.moveLeft();
        break;
 
  case 16771095:
        menu.toRoot();
        break;
  
 case 16757325:
       lcd.noDisplay();
       lcd.setBacklight(LOW);
       menu.toRoot();
        break;
 
  case 16738455:
       lcd.display();
       lcd.setBacklight(HIGH);
       break;

  }
   delay(300);
  }
void czujnik1()

  sensors.requestTemperatures();
  lcd.clear();
lcd.setCursor(1,0);  
lcd.print("Czujnik-1: ");
lcd.print(sensors.getTempCByIndex(0));
if(sensors.getTempCByIndex(0) > 27)
  { //digitalWrite(13,HIGH);
  digitalWrite( wentylewy, HIGH);
  } else
{
    digitalWrite( wentylewy, LOW);
  }
  
}
void czujnik2()
{
sensors.requestTemperatures();
 // if(sensors.getTempCByIndex(1) >= 26)
  {digitalWrite(13,HIGH);
   // digitalWrite(wentylprawy, HIGH);
 // }
 // else
 // {
 //    digitalWrite(wentylprawy, LOW);
  }
}
void czujnik3()
{
sensors.requestTemperatures();
//  if(sensors.getTempCByIndex(2) >= 27) 
  {digitalWrite(13,HIGH);
   // digitalWrite(wentprzodlewy, HIGH);
 // }
 // else
 //{
//    digitalWrite(wentprzodlewy, LOW);
 }
}
void czujnik4()
{
sensors.requestTemperatures();
  if(sensors.getTempCByIndex(3) >= 27)
  {
    digitalWrite(wentprzodprawy, HIGH);
  }
  else
 {
    digitalWrite(wentprzodprawy, LOW);
 }

}
void loop()

{
sensors.requestTemperatures();
navigateMenus();  //in some situations I want to use the button for other purpose (eg. to change some settings)

  if (irrecv.decode(&results)) // have we received an IR signal?
  
  {
    translateIR();
    irrecv.resume(); // receive the next value
    results.value=0; 
  }

}
void menuChanged(MenuChangeEvent changed){

  MenuItem newMenuItem=changed.to; //get the destination menu
  
  lcd.setCursor(0,1); //set the start position for lcd printing to the second row
  
   if(newMenuItem.getName()==menu.getRoot()){
    lcd.clear();

  lcd.setCursor(11,1);
  lcd.print("Menu>");
     
 }else if(newMenuItem.getName()=="1. Chlodzenie     "){
     lcd.print("1. Chlodzenie     ");
  
  }else if(newMenuItem.getName()=="1.1 Tyl lewy        "){
      lcd.print("1.1 Tyl lewy        ");
      
      }else if(newMenuItem.getName()=="1.1.1 ON      "){
            lcd.print("1.1.1 ON      ");
      }else if(newMenuItem.getName()=="1.1.2 OFF      "){
            lcd.print("1.1.2 OFF      ");
      }else if(newMenuItem.getName()=="1.1.3 AUTO      "){
            lcd.print("1.1.3 AUTO      ");
            
                      
  }else if(newMenuItem.getName()=="1.2 Tyl prawy       "){
      lcd.print("1.2 Tyl prawy       ");
      
      }else if(newMenuItem.getName()=="1.2.1 ON      "){
          lcd.print("1.2.1 ON      ");
      }else if(newMenuItem.getName()=="1.2.2 OFF      "){
          lcd.print("1.2.2 OFF      ");
      }else if(newMenuItem.getName()=="1.2.3 AUTO      "){
          lcd.print("1.2.3 AUTO      ");
          
  }else if(newMenuItem.getName()=="1.3 Przod lewy        "){
      lcd.print("1.3 Przod lewy        ");
      
      }else if(newMenuItem.getName()=="1.3.1 ON      "){
            lcd.print("1.3.1 ON      ");
      }else if(newMenuItem.getName()=="1.3.2 OFF      "){
            lcd.print("1.3.2 OFF      ");
      }else if(newMenuItem.getName()=="1.3.3 AUTO      "){
            lcd.print("1.3.3 AUTO      ");
             
  }else if(newMenuItem.getName()=="1.4 Przod prawy     "){
      lcd.print("1.4 Przod prawy     ");
      
      }else if(newMenuItem.getName()=="1.4.1 ON       "){
            lcd.print("1.4.1 ON       ");
      }else if(newMenuItem.getName()=="1.4.2 OFF      "){
            lcd.print("1.4.2 OFF      ");
      }else if(newMenuItem.getName()=="1.4.3 AUTO      "){
            lcd.print("1.4.3 AUTO      ");
      
  }else if(newMenuItem.getName()=="2. Oswietlenie         "){
      lcd.print("2. Oswietlenie         ");
      
     }else if(newMenuItem.getName()=="2.1 Tyl        "){
      lcd.print("2.1 Tyl        ");
      
      }else if(newMenuItem.getName()=="2.1.1 ON      "){
            lcd.print("2.1.1 ON      ");
      }else if(newMenuItem.getName()=="2.1.2 OFF      "){
            lcd.print("2.1.2 OFF      ");
      }else if(newMenuItem.getName()=="2.1.3 AUTO      "){
            lcd.print("2.1.3 AUTO      ");
            
            
  }else if(newMenuItem.getName()=="2.2 Przod      "){
      lcd.print("2.2 Przod      ");
      
      }else if(newMenuItem.getName()=="2.2.1 ON      "){
          lcd.print("2.2.1 ON      ");
      }else if(newMenuItem.getName()=="2.2.2 OFF      "){
          lcd.print("2.2.2 OFF      ");
      }else if(newMenuItem.getName()=="2.2.3 AUTO      "){
          lcd.print("2.2.3 AUTO      ");
          
    
  

}else if(newMenuItem.getName()=="3. Czujki "){
      lcd.print("3. Test - Empty ");
}else if(newMenuItem.getName()=="4. Wylacz wszystko "){
      lcd.print("4. Wylacz wszystko ");
}else if(newMenuItem.getName()=="5. Wlacz wszystko "){
      lcd.print("5. Wlacz wszystko ");
  }
}
void menuUsed(MenuUseEvent used){
 
  lcd.setCursor(0,0);  
  lcd.print("Wybrano        ");
  delay(1000);
  //menu.moveUp();
  lcd.setCursor(0,0);  
  lcd.print("               ");

 

if ((used.item.getName()) == "1.1 Chłodzenie")
{

  //menu.moveUp();  //back to Main
}

if ((used.item.getName()) == "1.1.1 ON      ")
{
  digitalWrite(wentylewy, HIGH);}


if ((used.item.getName()) == "1.1.2 OFF      ")
{
  digitalWrite(wentylewy, LOW);}
     

 if ((used.item.getName()) == "1.1.3 AUTO      ")

  czujnik1();
}

 if ((used.item.getName()) == "1.2.1 ON      ")
{
  digitalWrite(wentylprawy, HIGH)
;}

if ((used.item.getName()) == "1.2.2 OFF      ")
{
  digitalWrite(wentylprawy, LOW);}
  
 if ((used.item.getName()) == "1.2.3 AUTO      ")

  czujnik3();
  ;}

 if ((used.item.getName()) == "1.3.1 ON      ")
{
  digitalWrite(wentprzodlewy, HIGH);}

if ((used.item.getName()) == "1.3.2 OFF      ")
{
  digitalWrite(wentprzodlewy, LOW);}
  
 if ((used.item.getName()) == "1.3.3 AUTO      ")

  czujnik3();
  ;}

 if ((used.item.getName()) == "1.4.1 ON       ")
{
  digitalWrite(wentprzodprawy, HIGH);}

if ((used.item.getName()) == "1.4.2 OFF      ")
{
  digitalWrite(wentprzodprawy, LOW);}
  
 if ((used.item.getName()) == "1.4.3 AUTO      ")
{
  czujnik4();
  ;}
  
if ((used.item.getName()) == "2.1.1 ON      ")
{
  digitalWrite(lamptyl, HIGH);}

if ((used.item.getName()) == "2.1.2 OFF      ")
{
  digitalWrite(lamptyl, LOW);}
  
if ((used.item.getName()) == "2.1.3 AUTO      ")
{
  ;}
  
 if ((used.item.getName()) == "2.2.1 ON      ")
{
  digitalWrite(lamprzod, HIGH);}
  
 if ((used.item.getName()) == "2.2.2 OFF      ")
{
  digitalWrite(lamprzod, LOW);}
 
 if ((used.item.getName()) == "2.2.3 AUTO      ")
{
  ;}
 if ((used.item.getName()) == "4. Wylacz wszystko ")
{  
   digitalWrite(wentylewy, LOW);
   digitalWrite(wentylprawy, LOW);
   digitalWrite(wentprzodlewy, LOW);
   digitalWrite(wentprzodprawy, LOW);
   digitalWrite(lamptyl, LOW);
   digitalWrite(lamprzod, LOW);
 }
  if ((used.item.getName()) == "5. Wlacz wszystko ")
{  
   digitalWrite(wentylewy, HIGH);
   digitalWrite(wentylprawy, HIGH);
   digitalWrite(wentprzodlewy, HIGH);
   digitalWrite(wentprzodprawy, HIGH);
   digitalWrite(lamptyl, HIGH);
   digitalWrite(lamprzod, HIGH);
 }
 

 
 // menu.moveLeft();  //back to Main  
menu.moveUp();
}

void navigateMenus() {
  MenuItem currentMenu=menu.getCurrent();
  

  switch (results.value){
    case 16722135:
         menu.use();
         break;
    case 16742535:   //if the current menu has a child and has been pressed enter then menu navigate to item below
         menu.moveDown();
         break;
    case 16732335:
      menu.moveUp();  //back to main
      break;
    case 16728255:
      menu.moveRight();
      break;      
    case  16752735:
      menu.moveLeft();
      break;    
  
 }

 results.value=0; //reset the lastButtonPushed variable

}

Po usunięciu wszystkiego z loopa wszystko działa tak jak powinno. Robiłem już tak wcześniej i nawet o tym pisałem.
Jestem laikiem w tym wiec mi trzeba jak chłopu na miedzy. Dobrze dodane są adresy tych czujników czy nie??
 
Odpowiedź
#17
Widzę, że nikt mi nie pomożeSad wydaje mi się, że powinno być coś dopisane do tych linijek
Kod:
 if ((used.item.getName()) == "1.1.3 AUTO      ")

  czujnik1();
  
}
bo z tego co zauważyłem program wykonuje to tylko raz a powinien po wybraniu tego cały czas. Próbowałem z while ale albo źle go dodaje albo on nic nie wniesie do tego
 
Odpowiedź
#18
Poradziłem sobie juz, temat można zamknąć. Wszystko działa jak należy, a meczenie mnie o wpisanie poprawnie adresów czujników było nienie potrzebne bo nie w tym był problem.
 
Odpowiedź
#19
jak nie działa to płacz o pomoc jak zadziałało to można zamknąć temat . nie tu był problem ale nie powiem gdzie
 
Odpowiedź
  


Skocz do:


Przeglądający: 2 gości