Skocz do zawartości

Problem z programem - menu na LCD


zirael3

Pomocna odpowiedź

Cześć wszystkim forumowiczom,

walczę od kilku dni z własnym małym projektem. Chcę zrobić z pomocą Arduino czytnik temperatury. Temperatura ma być pobierana z dworu, pokoju oraz grzejnika a następnie pokazywana na wyświetlaczu LCD. Dodatkowo jeśli temperatura w domu oraz na grzejniku będzie zbyt duża to dioda ma zacząć świecić. Do tego momentu nie miałem zbyt dużego problemu. Niestety schody zaczynają się teraz.

Po uruchomieniu Arduino na LCD wyświetla się komunikat "Zadana temperatura" tutaj przy pomocy przycisków ustalam sobie temperaturę, następnie przy użyciu oddzielnego przycisku przechodzę do kolejnej "zakładki" na LCD mianowicie wyczyszcza się wszystko i wyświetla się "Dioda ON/OFF (w zależności od warunków) oraz aktualne temperatury. Nie mogę niestety już wrócić do poprzedniego okienka z "zadaną temperaturą" 

Czy ktoś mógłby nakierować/pomóc gdzie popełniłem błąd, oraz wyjaśnić co poprawić? Z góry dziękuję i życzę spokojnych świąt

#include <Wire.h>  
#include <LiquidCrystal_I2C.h> 
#include <OneWire.h>
#include <DallasTemperature.h>


  LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  OneWire oneWire(3);
  DallasTemperature sensor1(&oneWire);
  OneWire twoWire(5);
  DallasTemperature sensor2(&twoWire);
  OneWire threeWire(6);
  DallasTemperature sensor3(&threeWire);

  unsigned long aktualnyCzas = 0;
  unsigned long zapamietanyCzas = 0;
  
  float maks = 30;
  float mini = 31;
  float aktualna1;
  float aktualna2;
  float aktualna3;
  int praca = 0;
  int przycisk = 0;

void setup()  
{
  Serial.begin(9600);
  sensor1.begin();
  sensor2.begin();
  sensor3.begin();
  lcd.begin(17,4);   // Inicjalizacja LCD 4x16
  
  lcd.backlight(); // zalaczenie podwietlenia 
  lcd.setCursor(2,0);  //pierwsze jest od wiersza drugie od kolumny
  lcd.print("Czytnik Temp");
  lcd.setCursor(3,1);
  lcd.print("version 1.5");
  lcd.setCursor(0,2);
  lcd.print(" Hello World ");
  lcd.setCursor(8,3);
  lcd.print("2020");
  delay(2000);
  lcd.clear();
  delay(1000);

  pinMode(2, INPUT_PULLUP); // pierwsza druga strona
  pinMode(A0, INPUT_PULLUP); //do góry temp w pom
  pinMode(A1, INPUT_PULLUP); //do dołu temp w pom
  pinMode(A2, INPUT_PULLUP); //do góry na grzejniku
  pinMode(A3, INPUT_PULLUP); //do dołu na grzejniku
  pinMode(8, OUTPUT);
  digitalWrite(8,HIGH);
  lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
 }

void loop() 
{
  przyciski();
 if (praca==1)
 
odczytTEMP();

 if (praca==1)


 zadanaTEMP();
 }

void przyciski()
{

  if ((digitalRead(A0) == HIGH) & (digitalRead(A1) == HIGH) & (digitalRead(A2) == HIGH) & (digitalRead(A3) == HIGH) & (digitalRead(2) == HIGH))
  
{
  przycisk = 0;
}
if (digitalRead(2) == LOW)
{
  delay(25);
  if (digitalRead(2) == LOW)
  {
    if (przycisk == 0)
    {
      if (praca == 0)
      {
        praca = 1;
        lcd.setCursor(0,0);
        lcd.print("                     ");
        lcd.setCursor(0,1);
        lcd.print("Inside:");
        lcd.setCursor(0,2);
        lcd.print("Outside:");
        lcd.setCursor(0,3);
        lcd.print("Grzejnik:");
        przycisk = 1;
        
      }
      else
      {
        praca = 0;
     lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
        przycisk = 0;

        
      }
    }
  }
}

   if (digitalRead(A0) == LOW)
  {
    delay(25);
    if (digitalRead(A0) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        maks = maks + 0.1;
        
        lcd.setCursor(5, 2); 
        lcd.print(maks);
      }
    }
  }


  if (digitalRead(A1) == LOW)
  {
    delay(25);
    if (digitalRead(A1) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        maks = maks - 0.1;
       
        lcd.setCursor(5, 2);
        lcd.print(maks);
      }
    }
  }


  if (digitalRead(A2) == LOW)
  {
    delay(25);
    if (digitalRead(A2) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        mini = mini + 0.1;
        
        lcd.setCursor(10, 3);
        lcd.print(mini);
      }
    }
  }

  if (digitalRead(A3) == LOW)
  {
    delay(25);
    if (digitalRead(A3) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        mini = mini - 0.1;
        
        lcd.setCursor(10, 3);
        lcd.print(mini);
      }
    }
  } 

}


void odczytTEMP ()
 {
  aktualnyCzas = millis();
  if (aktualnyCzas - zapamietanyCzas >= 800)
  {
    zapamietanyCzas = aktualnyCzas;
    
       sensor1.requestTemperatures();
       Serial.println(sensor1.getTempCByIndex(0));
    lcd.setCursor(7,1);
    lcd.print(sensor1.getTempCByIndex(0));
    aktualna1 = sensor1.getTempCByIndex(0);
    
      sensor2.requestTemperatures();
       Serial.println(sensor2.getTempCByIndex(0));
    lcd.setCursor(8,2);
    lcd.print(sensor2.getTempCByIndex(0));
    aktualna2 = sensor2.getTempCByIndex(0);
    
      sensor3.requestTemperatures();
    Serial.println(sensor3.getTempCByIndex(0));
    lcd.setCursor(10,3);
    lcd.print(sensor3.getTempCByIndex(0));
    aktualna3 = sensor3.getTempCByIndex(0);
    dioda();
  }

    }
void dioda()
{
  
    if (aktualna1 <= maks && aktualna2 < mini)
    {
      digitalWrite (8,HIGH);
      lcd.setCursor (0,0);
      lcd.print("Dioda ON            ");
    }
    if (aktualna1 > maks && aktualna2 > mini)
    {
      digitalWrite(8,LOW);
      lcd.setCursor (0,0);
      lcd.print("Dioda OFF           ");
    }
}

  void zadanaTEMP()
{
  lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
}

 

Link do komentarza
Share on other sites

Zmieniłem trochę kod ale nadal nie działa.

Dodałem nowy guzik, chciałem żeby po jego naciśnięciu wyświetlacz się wyczyścił a następnie wyświetlił pierwszą "stronę". Mianowicie po wciśnięciu pierwszego guzika jest pierwsza strona, drugi guzik kolejna strona.

Niestety drugi guzik nie działa. Wydaje mi się że robię błąd w pętli loop LUB/ORAZ w samej funkcji guzika

W załączniku wrzucam kod w którym przypuszczam że jest błąd.

Proszę o pomoc 😞

void loop() 
{
  przyciski();
 if (praca==1) 
odczytTEMP();
  else
  {
    praca2==1;
    zadanaTEMP();
  }
 
 }

void przyciski()
{

  if ((digitalRead(7) == HIGH) & (digitalRead(A0) == HIGH) & (digitalRead(A1) == HIGH) & (digitalRead(A2) == HIGH) & (digitalRead(A3) == HIGH) & (digitalRead(2) == HIGH))
  
{
  przycisk = 0;
}
if (digitalRead(2) == LOW)
{
  delay(25);
  if (digitalRead(2) == LOW)
  {
    if (przycisk == 0)
    {
      if (praca == 0)
      {
        praca = 1;
        lcd.setCursor(0,0);
        lcd.print("                     ");
        lcd.setCursor(0,1);
        lcd.print("Inside:");
        lcd.setCursor(0,2);
        lcd.print("Outside:");
        lcd.setCursor(0,3);
        lcd.print("Grzejnik:");
        przycisk = 1;
        
      }
   
    }
  }
}

if (digitalRead(7) == LOW)
  {
    delay(25);
    if (digitalRead(7) == LOW)
    {
      if (przycisk == 0)
      {
        if (praca2 == 0)
        {
          praca2 = 1;
   lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
      }
    }
  }
  }

 

Zauważyłem, że jeśli dam lcd.clear() w kodzie czy w loop czy w if jest on cały czas wykonywany #geniusz, jak zatem zrobić żeby po wciśnięciu guzika wyczyścił się tylko raz?

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

1 godzinę temu, zirael3 napisał:

Iloczyn bitowy spełnia chyba swoją funkcję.

Chyba to się wesz na pępku.

W opisanej sytuacji iloczyn bitowy zupełnie przypadkiem działa tak jak iloczyn logiczny. Ale w informatyce nie ma przypadków, chybów, misiów wydajów i tym podobnych. Wyobraź sobie, że idziesz ulicą i przypadkiem znajdujesz stówkę. Czy za tydzień jak Ci zabraknie kasy pójdziesz na tą samą ulicę po stówkę? I co, zdziwisz się jak nie będzie?

  • Lubię! 2
Link do komentarza
Share on other sites

Macie Panowie rację, dziękuję za sugestie będę w ten sposób korzystał z iloczynu bitowego i logicznego, nie ma co się uczyć i powtarzać błędów, teraz działa a przy kolejnym projekcie już nie musi.

Link do komentarza
Share on other sites

Po dłuższym zastanowieniu postanowiłem użyć funkcji switch case, przy wciśnięciu pierwszego guzika będzie się wykonywała pierwsza funkcja przy wciśnięciu drugiego - kolejna

Myślałem, że to będzie łatwiejsze "na moim poziomie" niestety to także mnie przerosło... Nie wiem gdzie popełniam błąd. Podświetla mi się: expected unqualified-id before 'switch', wrzuciłem to w setup.

#include <Wire.h>  
#include <LiquidCrystal_I2C.h> 
#include <OneWire.h>
#include <DallasTemperature.h>


  LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
  OneWire oneWire(3);
  DallasTemperature sensor1(&oneWire);
  OneWire twoWire(5);
  DallasTemperature sensor2(&twoWire);
  OneWire threeWire(6);
  DallasTemperature sensor3(&threeWire);

  unsigned long aktualnyCzas = 0;
  unsigned long zapamietanyCzas = 0;
  
  float maks = 30;
  float mini = 31;
  float aktualna1;
  float aktualna2;
  float aktualna3;
  int praca = 0;
  int przycisk = 0;
  int praca2 = 0;
 

void setup()  
{
  Serial.begin(9600);
  sensor1.begin();
  sensor2.begin();
  sensor3.begin();
  lcd.begin(17,4);   // Inicjalizacja LCD 4x16
  
  lcd.backlight(); // zalaczenie podwietlenia 
  lcd.setCursor(2,0);  //pierwsze jest od wiersza drugie od kolumny
  lcd.print("Czytnik Temp");
  lcd.setCursor(3,1);
  lcd.print("version 1.5");
  lcd.setCursor(0,2);
  lcd.print(" Hello World ");
  lcd.setCursor(8,3);
  lcd.print("2020");
  delay(2000);
  lcd.clear();
  delay(1000);

  pinMode(2, INPUT_PULLUP); // pierwsza druga strona
  pinMode (7, INPUT_PULLUP);
  pinMode(A0, INPUT_PULLUP); //do góry temp w pom
  pinMode(A1, INPUT_PULLUP); //do dołu temp w pom
  pinMode(A2, INPUT_PULLUP); //do góry na grzejniku
  pinMode(A3, INPUT_PULLUP); //do dołu na grzejniku
  pinMode(8, OUTPUT);
  digitalWrite(8,HIGH);
  lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
 }
char guzik=0;

switch (guzik) 
{  
  case '0':
   odczytTEMP()
 break;
  case '1':
   zadanaTEMP()
break;

}

void loop() 
{


if ((digitalRead(7) == HIGH) && (digitalRead(2) == HIGH))
{
if (digitalRead(2) == LOW)
{
  delay(25);
  if (digitalRead(2) == LOW)
  {
    guzik = 0;
  }
}
}
{
if (digitalRead(7) == LOW)
{
  delay(25);
  if (digitalRead(7) == LOW)
  {
    guzik = 1;
  }
}
}


  
  przyciski();
odczytTEMP();

    zadanaTEMP();
  }
 

void przyciski()
{

  if ((digitalRead(A0) == HIGH) && (digitalRead(A1) == HIGH) && (digitalRead(A2) == HIGH) && (digitalRead(A3) == HIGH))
  


   if (digitalRead(A0) == LOW)
  {
    delay(25);
    if (digitalRead(A0) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        maks = maks + 0.1;
        
        lcd.setCursor(5, 2); 
        lcd.print(maks);
      }
    }
  }


  if (digitalRead(A1) == LOW)
  {
    delay(25);
    if (digitalRead(A1) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        maks = maks - 0.1;
       
        lcd.setCursor(5, 2);
        lcd.print(maks);
      }
    }
  }


  if (digitalRead(A2) == LOW)
  {
    delay(25);
    if (digitalRead(A2) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        mini = mini + 0.1;
        
        lcd.setCursor(10, 3);
        lcd.print(mini);
      }
    }
  }

  if (digitalRead(A3) == LOW)
  {
    delay(25);
    if (digitalRead(A3) == LOW)
    {
      if (przycisk == 0)
      {
        przycisk = 1;
        mini = mini - 0.1;
        
        lcd.setCursor(10, 3);
        lcd.print(mini);
      }
    }
  } 

}


void odczytTEMP ()
 {
  aktualnyCzas = millis();
  if (aktualnyCzas - zapamietanyCzas >= 800)
  {
    zapamietanyCzas = aktualnyCzas;
    
       sensor1.requestTemperatures();
       Serial.println(sensor1.getTempCByIndex(0));
    lcd.setCursor(7,1);
    lcd.print(sensor1.getTempCByIndex(0));
    aktualna1 = sensor1.getTempCByIndex(0);
    
      sensor2.requestTemperatures();
       Serial.println(sensor2.getTempCByIndex(0));
    lcd.setCursor(8,2);
    lcd.print(sensor2.getTempCByIndex(0));
    aktualna2 = sensor2.getTempCByIndex(0);
    
      sensor3.requestTemperatures();
    Serial.println(sensor3.getTempCByIndex(0));
    lcd.setCursor(10,3);
    lcd.print(sensor3.getTempCByIndex(0));
    aktualna3 = sensor3.getTempCByIndex(0);
    dioda();
  }

    }
void dioda()
{
  
    if (aktualna1 <= maks && aktualna2 < mini)
    {
      digitalWrite (8,HIGH);
      lcd.setCursor (0,0);
      lcd.print("Dioda ON            ");
    }
    if (aktualna1 > maks && aktualna2 > mini)
    {
      digitalWrite(8,LOW);
      lcd.setCursor (0,0);
      lcd.print("Dioda OFF           ");
    }
}

  void zadanaTEMP()
{
  lcd.setCursor(0,0);
  lcd.print("Zadana temperatura: ");
  lcd.setCursor(0,2);
  lcd.print("Dom: ");
  lcd.setCursor(5,2);
  lcd.print(maks);
  lcd.setCursor(0,3);
  lcd.print("Grzejnik: ");
  lcd.setCursor(10,3);
  lcd.print(mini);
}

 

Link do komentarza
Share on other sites

Czy wiesz, że char guzik=0 i char guzik='0' to nie to samo

spróbuj takiego programiku:

void setup()
{
  Serial.begin(9600);
}

void loop()
{
	char gusik=0;
	char guzik2='0';
	Serial.println(guzik);
	Serial.println(guzik2);
}

Czy to jest to samo?

I znowu ta nieszczęsna pętla switch. Tym razem spróbuj takiego programu - to Twój kod z dodanym Serial.println:

char guzik=0;
void setup()
{
  Serial.begin(9600);
}
void loop()
{
    switch (guzik) 
    {  
      case '0':
       Serial.println('0');
       break;
      case '1':
       Serial.println('1');
       break;
    }
 Serial.println("Koniec loop");
}

Jakie jest przeznaczenie Twojego warunku switch(), który jest poza jakąkolwiek funkcją? Zobacz, że case '0' czy też case '1' nie są spełnione. Dlaczego?

Edytowano przez Belferek
Link do komentarza
Share on other sites

Jeśli dobrze rozumiem case 1 i case 2 w moim kodzie będzie spełnione jeśli wcisnę guzik z pinu 7 (case 1) lub guzik z pinu 2 (case 2), bo wtedy w moim warunku zmienia się wartość zmiennej guzik, niemniej jednak nie działa to tak jak powinno. Dlaczego? Gdzie popełniam błąd?

 

char guzik = 0;

void loop() 
{
 przyciski();
 
switch (guzik) 
{  
  case 1:
       odczytTEMP();
    break;
  case 2:
      zadanaTEMP();
  break;
}
}
 void przyciski()
{
  if ((digitalRead(7) == HIGH) && (digitalRead(2) == HIGH) && (digitalRead(A0) == HIGH) && (digitalRead(A1) == HIGH) && (digitalRead(A2) == HIGH) && (digitalRead(A3) == HIGH))
  {
if (digitalRead(2) == LOW)
{
  delay(25);
  if (digitalRead(2) == LOW)
  {
         guzik = 1;
}
}
}
{
if (digitalRead(7) == LOW)
{
  delay(25);
  if (digitalRead(7) == LOW)
  {
    guzik = 2;
  }
}
}

 

Link do komentarza
Share on other sites

Bo funkcja przycisk() i te warunki if to taki koszmarek.

if ((digitalRead(7) == HIGH) && (digitalRead(2) == HIGH) && (digitalRead(A0) == HIGH) && (digitalRead(A1) == HIGH) && (digitalRead(A2) == HIGH) && (digitalRead(A3) == HIGH))
  {
		if (digitalRead(2) == LOW)

....ciach ....

Jaki to ma sens według Ciebie? By pierwsze IF było spełnione to digitalRead(2) musi zwrócić HIGH, a dla drugiego IF sprawdzasz czy digitalRead(2)==LOW
Gdzie tu logika? Przeanalizuj swoją funkcję. Warto na etapie testów wykorzystać Serial.println() do wysyłania komunikatów diagnostycznych na monitor portu. Ułatwi to wyszukiwanie błędów np.

if ((digitalRead(7) == HIGH) && (digitalRead(2) == HIGH) && (digitalRead(A0) == HIGH) && (digitalRead(A1) == HIGH) && (digitalRead(A2) == HIGH) && (digitalRead(A3) == HIGH))
  {
	if (digitalRead(2) == LOW)
    {
      
      Serial.println("Pin 2 == LOW");
      ....ciach...
      }
...ciach...
}

Skup się na obsłudze swoich przycisków. Później weź się za resztę programu.

Edytowano przez Belferek
Link do komentarza
Share on other sites

Rozbiłem program funkcji przycisków, wygląda trochę dziwnie, czy teraz jest lepiej?

 

int skok = 0;
int a=0;
int b=0;
int c=0;
int d=0;
int e=0;
int f=0;


void przycisk()
{
int przycisk1 = digitalRead(A0);
int przycisk2 = digitalRead(A1);
int przycisk3 = digitalRead(A2);
int przycisk4 = digitalRead(A3);
int przycisk5 = digitalRead(2);
int przycisk6 = digitalRead(7);

if (przycisk1 == LOW) 
{ if (skok == 0);
{
a=1;
b=0;
c=0;
d=0;
e=0;
f=0;
skok = 1;
}
}
if (przycisk2 == LOW) 
{ if (skok == 0);
{
a=0;
b=1;
c=0;
d=0;
e=0;
f=0;
skok = 1;
}
}
if (przycisk3 == LOW) 
{ (skok == 0);
{
a=0;
b=0;
c=1;
d=0;
e=0;
f=0;
}
}
if (przycisk4 == LOW) 
{ (skok == 0);
a=0;
b=0;
c=0;
d=1;
e=0;
f=0;
}
}
if (przycisk5 == LOW) 
{ if (skok == 0);
{
a=0;
b=0;
c=0;
d=0;
e=1;
f=0;
}
}
if (przycisk6 == LOW) 
{ if (skok == 0;
{
a=0;
b=0;
c=0;
d=0;
e=0;
f=1;
}
}


if (a==1){
          maks = maks + 0.1;
        lcd.setCursor(5, 2); 
        lcd.print(maks);
}
if (b==1){
          maks = maks - 0.1;
        lcd.setCursor(5, 2); 
        lcd.print(maks);
}

if (c==1){
        mini = mini + 0.1;
     lcd.setCursor(10, 3);
        lcd.print(mini);
}

if (d==1){
        mini = mini - 0.1;
     lcd.setCursor(10, 3);
        lcd.print(mini);
}

if (e==1){
guzik = 1;
}

if (f==1){
guzik = 2;
}
}

 

Link do komentarza
Share on other sites

To Ty wiesz czy lepiej - czy program działa?

Wyjaśnij ten fragment swojego programu:

if (przycisk1 == LOW) 
{ if (skok == 0);
    {
	  a=1;
	  b=0;
	  c=0;
	  d=0;
	  e=0;
	  f=0;
	  skok = 1;
     }
}

Swoją drogą stosuj wcięcia i tabulacje - program jest wtedy czytelniejszy.

Link do komentarza
Share on other sites

(edytowany)

Po wciśnięciu guzika program sprawdza czy skok == 0 jeśli tak to wartość a zmienia się na 1 reszta na 0 potem do zmiennej skok dodawana jest wartość 1 żeby program się nie zapętlał.

Zamiast zmiennych a,b,c,d,e,f powinienem wrzucić od razu co chcę osiągnąć po wciśnięciu guzika?

Edytowano przez zirael3
Link do komentarza
Share on other sites

Włącz sobie diagnostykę za pomocą kilku komunikatów Serial.println (w newralgicznych miejscach) i przeanalizuj program, co się wykonuje. Możesz wyświetlać w ten sposób wartości kluczowych zmiennych. Znajdziesz wtedy odpowiedź. Nie wiem co masz na myśli mówiąc, że program się zapętla. Program Arduino to jedna wielka pętla - tu void loop()

12 minut temu, zirael3 napisał:

Po wciśnięciu guzika program sprawdza czy skok == 0 jeśli tak to wartość a zmienia się na 1 reszta na 0

A to jest akurat nieprawda program po wciśnięciu guzika sprawdza czy skok == 0 jeśli tak to nie robi nic! W przeciwnym przypadku a zmienia się na 1 a reszta na 0!

Taki zapis if(skok==0) ; oznacza jeśi skok ==0 to nie rób nic.

Czy ten średnik  if(skok==0); jest potrzebny? Jeśli go usuniesz to powinien ten fragment kodu zadziałać tak jak pisałeś.

Edytowano przez Belferek
  • Lubię! 1
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.