Skocz do zawartości

Wynik mnożenia ze znakami po przecinku


lukas616

Pomocna odpowiedź

19 godzin temu, farmaceuta napisał:

Wchodzisz w case który Cię interesje i latasz w nim w kółko...a jak wartość wyświetlana się zmieni to wtedy aktualizujesz... 

zmienna = odczyt;

switch (x) { 
    case 0:
    if (zmienna != kopia) { 
    //  wyswietl 
      kopia = zmienna; 
      }
    break; 
 }

 

nie kumam za bardzo co masz na myśli

Link do komentarza
Share on other sites

(edytowany)
#include <LiquidCrystal_I2C.h>

int buttonPin = 4;  // PIN 4
int Display = 0;
LiquidCrystal_I2C lcd(0x27,20,4);
int watermeterPin1 = 2;
int watermeterPin2 = 3;
volatile int  impulsychwilowe1;
volatile int  impulsychwilowe2;
volatile int  impulsycalkowite1;
volatile int  impulsycalkowite2;
volatile int  impulsycalkowite11;
volatile int  impulsycalkowite22;
float  liter1;
float  liter2;
float liter11;
float liter22;
float literperhour1;
float literperhour2;
unsigned long currentTime, loopTime;

 void getFlow1 ()
{ 
   impulsychwilowe1++;
impulsycalkowite1++;
impulsycalkowite11++;
} 
void getFlow2 ()
{ 
   impulsychwilowe2++;
impulsycalkowite2++;   
impulsycalkowite22++;
} 

void setup()
{
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); 
pinMode(watermeterPin1, INPUT);
pinMode(watermeterPin2, INPUT);   
Serial.begin(9600); 
attachInterrupt(digitalPinToInterrupt(2), getFlow1, FALLING);
attachInterrupt(digitalPinToInterrupt(3), getFlow2, FALLING);

}

void loop()
{ 
  currentTime = millis();
if(currentTime >= (loopTime + 1000))
loopTime = currentTime;
if (digitalRead(buttonPin) == LOW){  
  delay(200);                        

  Display = Display + 1;
  if(Display > 3){
    
    Display = 1;
  }

  switch (Display) {
    case 1: {
     
    
     if(impulsychwilowe1!=0.0)
{literperhour1 = (impulsychwilowe1*10);
literperhour2 = (impulsychwilowe2*10);   
float literperhour = (literperhour1 - literperhour2);   
impulsychwilowe1=0.0;
impulsychwilowe2=0.0;          
lcd.setCursor(0,1);
lcd.print("Spal.chwil.");  
lcd.setCursor(13,1);            
lcd.print(literperhour,1);  
lcd.setCursor(17,1);  
lcd.print("l/h");
}else{
lcd.setCursor(0,1);
lcd.print("Spal.chwil.");
lcd.setCursor(13, 1);
lcd.print("0.0  ");
lcd.setCursor(17,1);
lcd.print("l/h");

     
      break;
    }
     
    case 2: {
      lcd.clear();
      lcd.setCursor(0, 1);
lcd.print("Spal.calk "); 
liter1 = (impulsycalkowite1*10);
liter2 = (impulsycalkowite2*10);   
float liter = (liter1 - liter2);     
lcd.setCursor(13,1);
lcd.print(liter/300, 1);        
lcd.print(" l");
      break;
    }
     
     case 3: {
       lcd.clear();
       if(impulsycalkowite11!=0.0)
{lcd.setCursor(0, 1);
Serial.print("Spal.rob. "); 
liter11 = (impulsycalkowite11*10);
liter22 = (impulsycalkowite22*10);   
float liter_ha = (liter11 - liter22); 
impulsycalkowite11=0;
impulsycalkowite22=0;    
lcd.setCursor(11,1);
lcd.print(liter_ha, 1);  
lcd.setCursor(16, 1);     
lcd.print("l/ha");
}else
{lcd.setCursor(0,1);
lcd.print("Spal.rob.");
lcd.setCursor(11, 1);
lcd.print("0.0  ");
lcd.setCursor(16,1);
lcd.print("l/ha");
       break;
}
}
}
}
}
}

to może inaczej. Gdzie jest błąd w kodzie?

Edytowano przez lukas616
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

To może inaczej: nikomu z nas się nie chce przepuszczać Twoich kodów przez jakies indenty czy inne autoformatery.

Sformatuj kod porządnie, bo na razie to wygląda jak materac w domu publicznym (z tych tańszych).

 

Link do komentarza
Share on other sites

23 minuty temu, lukas616 napisał:
#include <LiquidCrystal_I2C.h>

int buttonPin = 4;  // PIN 4
int Display = 0;
LiquidCrystal_I2C lcd(0x27,20,4);
int watermeterPin1 = 2;
int watermeterPin2 = 3;
volatile int  impulsychwilowe1;
volatile int  impulsychwilowe2;
volatile int  impulsycalkowite1;
volatile int  impulsycalkowite2;
volatile int  impulsycalkowite11;
volatile int  impulsycalkowite22;
float  liter1;
float  liter2;
float liter11;
float liter22;
float literperhour1;
float literperhour2;
unsigned long currentTime, loopTime;

 void getFlow1 ()
{ 
   impulsychwilowe1++;
impulsycalkowite1++;
impulsycalkowite11++;
} 
void getFlow2 ()
{ 
   impulsychwilowe2++;
impulsycalkowite2++;   
impulsycalkowite22++;
} 

void setup()
{
lcd.begin(20, 4);
lcd.init();
lcd.backlight();
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH); 
pinMode(watermeterPin1, INPUT);
pinMode(watermeterPin2, INPUT);   
Serial.begin(9600); 
attachInterrupt(digitalPinToInterrupt(2), getFlow1, FALLING);
attachInterrupt(digitalPinToInterrupt(3), getFlow2, FALLING);

}

void loop()
{ 
  currentTime = millis();
if(currentTime >= (loopTime + 1000))
loopTime = currentTime;
if (digitalRead(buttonPin) == LOW){  
  delay(200);                        

  Display = Display + 1;
  if(Display > 3){
    
    Display = 1;
  }

  switch (Display) {
    case 1: {
     
    
     if(impulsychwilowe1!=0.0)
{literperhour1 = (impulsychwilowe1*10);
literperhour2 = (impulsychwilowe2*10);   
float literperhour = (literperhour1 - literperhour2);   
impulsychwilowe1=0.0;
impulsychwilowe2=0.0;          
lcd.setCursor(0,1);
lcd.print("Spal.chwil.");  
lcd.setCursor(13,1);            
lcd.print(literperhour,1);  
lcd.setCursor(17,1);  
lcd.print("l/h");
}else{
lcd.setCursor(0,1);
lcd.print("Spal.chwil.");
lcd.setCursor(13, 1);
lcd.print("0.0  ");
lcd.setCursor(17,1);
lcd.print("l/h");

     
      break;
    }
     
    case 2: {
      lcd.clear();
      lcd.setCursor(0, 1);
lcd.print("Spal.calk "); 
liter1 = (impulsycalkowite1*10);
liter2 = (impulsycalkowite2*10);   
float liter = (liter1 - liter2);     
lcd.setCursor(13,1);
lcd.print(liter/300, 1);        
lcd.print(" l");
      break;
    }
     
     case 3: {
       lcd.clear();
       if(impulsycalkowite11!=0.0)
{lcd.setCursor(0, 1);
Serial.print("Spal.rob. "); 
liter11 = (impulsycalkowite11*10);
liter22 = (impulsycalkowite22*10);   
float liter_ha = (liter11 - liter22); 
impulsycalkowite11=0;
impulsycalkowite22=0;    
lcd.setCursor(11,1);
lcd.print(liter_ha, 1);  
lcd.setCursor(16, 1);     
lcd.print("l/ha");
}else
{lcd.setCursor(0,1);
lcd.print("Spal.rob.");
lcd.setCursor(11, 1);
lcd.print("0.0  ");
lcd.setCursor(16,1);
lcd.print("l/ha");
       break;
}
}
}
}
}
}

to może inaczej. Gdzie jest błąd w kodzie?

A przypomnij na czym polega problem..

Link do komentarza
Share on other sites

26 minut temu, farmaceuta napisał:

A przypomnij na czym polega problem..

Że liczba jest wyswietlana statyczna a nie zmienna i dopiero aktualizuje się po wciśnięciu przycisku

Link do komentarza
Share on other sites

1 godzinę temu, lukas616 napisał:

Że liczba jest wyswietlana statyczna a nie zmienna i dopiero aktualizuje się po wciśnięciu przycisku

Bo obliczenia robisz w środku if'a i to jest błąd...obliczenia rób normalnie ciągle w case, a w tym if'ie do wyświetlania masz tylko wyświetlić zmienna...

Link do komentarza
Share on other sites

13 godzin temu, farmaceuta napisał:

Bo obliczenia robisz w środku if'a i to jest błąd...obliczenia rób normalnie ciągle w case, a w tym if'ie do wyświetlania masz tylko wyświetlić zmienna...

No niestety ale to nie pomogło

Link do komentarza
Share on other sites

Wyświetl sobie na porcie szeregowym zmienne, które wyświetlasz, potrzebujesz do działania programu jak "impulsychwilowe1", jakiś tekst w poszczególnych if, żebyś wiedział w jakim miejscu program się znajduje. Po tym stwierdzisz czy jakąś pętle program wykonuje raz a powinien ciągiem, lub nie oblicza jakiejś zmiennej. Bo teraz wygląda tak, że zmienna "impulsychwilowe1" przyjmuje wartość 0.0 w funkcji if i tak pozostaje.

Link do komentarza
Share on other sites

26 minut temu, Yarokot napisał:

Wyświetl sobie na porcie szeregowym zmienne, które wyświetlasz, potrzebujesz do działania programu jak "impulsychwilowe1", jakiś tekst w poszczególnych if, żebyś wiedział w jakim miejscu program się znajduje. Po tym stwierdzisz czy jakąś pętle program wykonuje raz a powinien ciągiem, lub nie oblicza jakiejś zmiennej. Bo teraz wygląda tak, że zmienna "impulsychwilowe1" przyjmuje wartość 0.0 w funkcji if i tak pozostaje.

#include <LiquidCrystal_I2C.h>



LiquidCrystal_I2C lcd(0x27,20,4);
int watermeterPin1 = 2;
int watermeterPin2 = 3;
int PRZYCISK = 4; //  PIN 4
int ostatniStan = HIGH;


volatile int  impulsychwilowe1;
volatile int  impulsychwilowe2;
float literperhour1;
float literperhour2;
byte sensorInterrupt = 0;



 void getFlow1 ()
{ 
   impulsychwilowe1++;
} 
void getFlow2 ()
{ 
   impulsychwilowe2++;
} 

void setup()
{ pinMode(4, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(6,1);
lcd.print(" WITAJ! "); 
delay(1000);
pinMode(watermeterPin1, INPUT);
pinMode(watermeterPin2, INPUT);   
Serial.begin(9600); 
attachInterrupt(sensorInterrupt, getFlow1, FALLING);
attachInterrupt(digitalPinToInterrupt(3), getFlow2, FALLING);
lcd.clear();  

}
 
void loop(){
literperhour1 = (impulsychwilowe1*10);
literperhour2 = (impulsychwilowe2*10);   
float literperhour = (literperhour1 - literperhour2);            
int stan = digitalRead(PRZYCISK);  
if(stan == LOW)
{lcd.setCursor(0,1);
lcd.print("Spal.chwil.");  
lcd.setCursor(13,1);            
lcd.print(literperhour,1);  
lcd.setCursor(17,1);  
lcd.print("l/h");


}  
}  

Ja już całkiem zgłupiałem. Uprościłem kod jak tylko można i dalej po naciśnięciu przycisku nie jest wyświetlana zmienna tylko stała liczba.

Link do komentarza
Share on other sites

9 minut temu, Yarokot napisał:

Teraz funkcja if wykonuje się tylko wtedy kiedy masz wciśnięty przycisk.

To jak mam zrobić aby po wciśnięciu przycisku wyświetlana była liczba która się zmienia w zależności od obrotów czujnika?

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.