• 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
Pomoc - przepływomierz + menu
#1
Witam kolegów,
Jestem nowym użyszkodnikiem i niezbyt doświadczonym programistą (bardzo początkującym). Mam projekt, który muszę jakoś przeboleć.
Mianowicie muszę za pomocą Arduino (mega) odczytać temperaturę i przepływ w urządzeniu. Żeby nie było za łatwo tych urządzeń jest 5 każdy ma swoje dwa czujniki oraz jeden przepływomierz YF-S201. Odczyty mają być wyświetlane na wyświetlaczu LCD 16x4. Najpierw problemem było menu - jakoś się z tym uporałem (choć nie wiem czy do końca poprawnie). Odczyt temperatury nie nastręcza problemów bo jest realizowany na DS18B20. Problem zaczął się z przepływomierzami. Odczyty z tego co rozpoznawałem opierają się na przerwaniach. Wydaje mi się że jeżeli włączę przerwania to zablokują mi cały kod wraz z odczytami temperatury i "menu" czy istnieje jakiś sposób na odczyt nie rujnując całego kodu? oraz prośba o sprawdzenie czy to cudo będzie działać (niestety nie mam jak sprawdzić urządzenie nie znajduje się koło mnie) Przesyłam kod jaki do tej pory udało mi się stworzyć:
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

#define UP 22
#define DN 23
#define FLOW1 45
#define FLOW2 47
#define FLOW3 49
#define FLOW4 51
#define FLOW5 53

LiquidCrystal_I2C lcd(0x27,16,4);
OneWire oneWire(A5); //Podlaczenie do A5
DallasTemperature sensors(&oneWire);

DeviceAddress TU1A = {0x28, 0x30, 0xE0, 0xFB, 0xA, 0x0, 0x0, 0xA6};
DeviceAddress TU1B = {0x28, 0x69, 0x20, 0xFC, 0xA, 0x0, 0x0, 0xBA};
DeviceAddress TU2A = {0x28, 0xD, 0xC7, 0xFB, 0xA, 0x0, 0x0, 0xA8};
DeviceAddress TU2B = {0x28, 0x33, 0x53, 0xFB, 0xA, 0x0, 0x0, 0xFE};
DeviceAddress TU3A = {0x28, 0x7, 0xDE, 0xFB, 0xA, 0x0, 0x0, 0xE8};
DeviceAddress TU3B = {0x28, 0x2, 0x55, 0xFB, 0xA, 0x0, 0x0, 0xB8};
DeviceAddress TU4A = {0x28, 0x7B, 0xF8, 0xFB, 0xA, 0x0, 0x0, 0x69};
DeviceAddress TU4B = {0x28, 0x18, 0x68, 0xFB, 0xA, 0x0, 0x0, 0x44};
DeviceAddress TU5A = {0x28, 0xDE, 0xAA, 0xFB, 0xA, 0x0, 0x0, 0xC8};
DeviceAddress TU5B = {0x28, 0x90, 0xE5, 0xFB, 0xA, 0x0, 0x0, 0x28};


unsigned char  FLOW1 = 0;
unsigned char  FLOW2 = 0;
unsigned char  FLOW3 = 0;
unsigned char  FLOW4 = 0;
unsigned char  FLOW5 = 0;
// int LPrzycisku = 1; //licznik przycisku
// int SPrzycisku = 1; //status przycisku
// int OSPrzycisku = 1; // ostatni status przycisku
long last_up = 0;
long last_dn = 0;
int statusprzycisku = 1;



void setup() {

pinMode(UP, INPUT_PULLUP);
pinMode(DN, INPUT_PULLUP);
sensors.begin();
}

void loop() {
char wybor=1; //wybor kroku
char n=5; //ilosc kroków
if(digitalRead (UP)==LOW && (millis() - last_up > 30)) // odczyt przycisku up
{
wybor++; //zwiększ krok
if(wybor>=n) wybor=1; //jeżeli krok jest większy lub rowny n wpisz w n krok 1
last_up = millis();
}

if(digitalRead (DN)==LOW && (millis() - last_dn > 30))
{
wybor--;
if(wybor<=0) wybor=n;
last_dn = millis();
}
statusprzycisku = wybor;

switch(statusprzycisku)
{
case 1:   
lcd.begin(16,4); 
lcd.setBacklight(255);
lcd.setCursor(5,0);
lcd.print("UNIT 1");

  sensors.requestTemperatures();

  lcd.setCursor(0,1);
  lcd.print("Temp IN  = sensors.getTempC(TU1A)C");
  lcd.setCursor(0,2);
  lcd.print("Temp OUT = sensors.getTempC(TU1B)C");
  lcd.setCursor(0,3);
 

// lcd.print("Flow  = 6L/min");

break; //pozycja 1 w menu

case 2:
lcd.begin(16,4); 
lcd.setBacklight(255);
lcd.setCursor(5,0);
lcd.print("UNIT 2");

  sensors.requestTemperatures();
   //sensors.requestTemperatures(TU1B)
  lcd.setCursor(0,1);
  lcd.print("Temp IN  = sensors.getTempC(TU2A)C");
  lcd.setCursor(0,2);
  lcd.print("Temp OUT = sensors.getTempC(TU2B)C")
  ;break; //pozycja 2 w menu


case 3:
lcd.begin(16,4); 
lcd.setBacklight(255);
lcd.setCursor(5,0);
lcd.print("UNIT 3");

  sensors.requestTemperatures();
  lcd.setCursor(0,1);
  lcd.print("Temp IN  = sensors.getTempC(TU3A)C");
  lcd.setCursor(0,2);
  lcd.print("Temp OUT = sensors.getTempC(TU3B)C");
  break; // poz 3


case 4:

lcd.begin(16,4); 
lcd.setBacklight(255);
lcd.setCursor(5,0);
lcd.print("UNIT 4");

  sensors.requestTemperatures();
   
  lcd.setCursor(0,1);
  lcd.print("Temp IN  = sensors.getTempC(TU4A)C");
  lcd.setCursor(0,2);
  lcd.print("Temp OUT = sensors.getTempC(TU4B)C");
  break; // poz 4

case 5: lcd.begin(16,4); 
lcd.setBacklight(255);
lcd.setCursor(5,0);
lcd.print("UNIT 5");

  sensors.requestTemperatures();
  lcd.setCursor(0,1);
  lcd.print("Temp IN  = sensors.getTempC(TU5A)C");
  lcd.setCursor(0,2);
  lcd.print("Temp OUT = sensors.getTempC(TU5B)C");
  break; // poz 5

}
}
Proszę o pomoc
pozdr
Robert
 
Odpowiedź
  


Wiadomości w tym wątku
Pomoc - przepływomierz + menu - przez XaxaS - 18-07-2019, 15:22
RE: Pomoc - przepływomierz + menu - przez kaczakat - 18-07-2019, 21:59
RE: Pomoc - przepływomierz + menu - przez XaxaS - 22-07-2019, 06:32
RE: Pomoc - przepływomierz + menu - przez kaczakat - 22-07-2019, 14:38
RE: Pomoc - przepływomierz + menu - przez XaxaS - 26-08-2019, 12:07
RE: Pomoc - przepływomierz + menu - przez twjx - 26-08-2019, 13:23
RE: Pomoc - przepływomierz + menu - przez XaxaS - 26-08-2019, 14:44

Skocz do:


Przeglądający: 1 gości