Arduino Polska Forum

Pełna wersja: Sterownik do akwarium by Tedy24
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2
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
(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ć?
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
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.
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 !!!
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??
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
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.
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
Stron: 1 2