Skocz do zawartości

Problem z kodem NODEMCU v3


Gość Meqyou

Pomocna odpowiedź

Witam posiadam problem z tym kawałeczkiem kodu:

if(digitalRead(klawisz8)==LOW) {
delay(400);
 h++;
}
if (h==0){}else
if(h==1){
a28 = "1";
Serial.println("WŁACZ");

}else
if (h==2){
a28 = "0";
Serial.println("WYŁACZ");
h=0;
 }else
 if (h==3){
 a28 = "1";
 Serial.println("WŁACZ");
 h=1;
 }

Nie wiem dlaczego raz pokazuje 0 raz 1 . mam takich przycisków 8 i 7 z nich działają bez zarzutu, a ten na zmianę ustawia stany 0/1 sam. Jak będzie potrzeba wrzucę cały kod 🙂

Ale sądze ze tutaj leży problem bo po usunięciu tych linijek nie ustawia 0/1.

Link do komentarza
Share on other sites

Nie za bardzo czaję o co tu chodzi ale chyba jak wciśniesz przycisk to inkrementujesz "h", kiedy "h" wynosi 1 to wyskakuje ci WŁĄCZ, po kolejnym wcisnieciu przycisku h wynosi 2 i wyskakuje ci WYŁĄCZ. h nigdy nie będzie wynosiło 3 bo po przy h==2 ustawiasz h na 0 czyli w.g. mnie końcowka kodu się nie wykonuje nigdy... ale niech się lepsi wypowiedzą bo pewny swego nie jestem.

Co do Twojej zagwozdki to nie wiem co rozumiesz przez "Nie wiem dlaczego raz pokazuje 0 raz 1", kiedy pokazuje? Samo się zmienia? Bez wciskania przycisku raz wypisuje WŁĄCZ a raz WYŁĄCZ? Trudno zgadywać jak całego kodu nie widać...

Link do komentarza
Share on other sites

Sorka 😄 to mój kod napisałem nielogując się 🙂 tak tak h==3 pokazuje jak czyta wartości z bazy danych 🙂  ale kod cały czas co pętla działa tak ze pokazuje 1 następna petla 0 i tak w koło nie wiem czemu ale nie wpływa na to stan przycisku ;/ mam 8 takich i 7 przycisków działa bez problemu itp a ten jeden nakabania w pętli cały czas jak zwariowany 1/0/1/0 ... nie wiem co z nim nie tak .

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

#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
const char* ssid = "******";
const char* password = "****";
 const int httpPort = 80;
const char* host = "www";
int klawisz1 = D1;              
int klawisz2 = D2;
int klawisz3 = D3;               
int klawisz4 = D4; 
int klawisz5 = D5;              
int klawisz6 = D6;
int klawisz7 = D7;               
int klawisz8 = D8; 


 int a ;
  int b;
   int c ;
    int d ;
     int e;
      int f ;
       int g;
        int h ;
    
String a21;
String a22;
String a23;
String a24;
String a25;
String a26;
String a27;
String a28;
void setup() {
   Serial.begin(9600);
pinMode(klawisz1, INPUT_PULLUP);
pinMode(klawisz2, INPUT_PULLUP);
pinMode(klawisz3, INPUT_PULLUP);
pinMode(klawisz4, INPUT_PULLUP);
pinMode(klawisz5, INPUT_PULLUP);
pinMode(klawisz6, INPUT_PULLUP);
pinMode(klawisz7, INPUT_PULLUP);
pinMode(klawisz8, INPUT_PULLUP);

    WiFi.begin(ssid, password);  
 while (WiFi.status() != WL_CONNECTED) {
 delay(500);
 Serial.print(".");}
 Serial.println(WiFi.localIP());

}

void loop() {


   WiFiClient client; 
  if (!client.connect(host, httpPort)) {
   Serial.println("connection failed");}
   else
   {HTTPClient http;  //Declare an object of class HTTPClient
   http.begin(".............WWW............"); 

  int httpCode = http.GET();
   if (httpCode > 0) {//Send the request
//  Check the returning code
 String payload = http.getString();   //Get the request response payload
      
String S = payload;
int a1 = (S[0]);
 int a2 = (S[1]);
int a3 = (S[2]);
int a4 = (S[3]);
int a5 = (S[4]);
int a6 = (S[5]);
int a7 = (S[6]);
int a8 = (S[7]);


  if (a1==49){a=1;} else if ((a1==48) && (a=1)){a=2;}
   if (a2==49){b=1;} else if ((a2==48) && (b=1)){b=2;}
    if (a3==49){c=1;} else if ((a3==48) && (c=1)){c=2;}
     if (a4==49){d=1;} else if ((a4==48) && (d=1)){d=2;}
     if (a5==49){e=1;} else if ((a5==48) && (e=1)){e=2;}
   if (a6==49){f=1;} else if ((a6==48) && (f=1)){f=2;}
    if (a7==49){g=1;} else if ((a7==48) && (g=1)){g=2;}
     if (a8==49){h=1;} else if ((a8==48) && (h=1)){h=2;}
 if(digitalRead(klawisz1)==LOW) {
  delay(400);
  a++;
 }
 if (a==0){}else
 if(a==1){
  a21 = "1";
  Serial.println("WŁACZ");
 
  }else
  if (a==2){
   a21 = "0";
  Serial.println("WYŁACZ");
  a=0;
  }else
   if (a==3){
   a21 = "1";
  Serial.println("WŁACZ");
  a=1;
  }
if(digitalRead(klawisz2)==LOW) {
  delay(400);
  b++;
 }
 if (b==0){}else
 if(b==1){
  a22= "1";
  Serial.println("WŁACZ");
 
  }else
  if (b==2){
   a22 = "0";
  Serial.println("WYŁACZ");
  b=0;
  }else
   if (b==3){
   a22 = "1";
  Serial.println("WŁACZ");
  b=1;
  }
  if(digitalRead(klawisz3)==LOW) {
  delay(400);
  c++;
 }
 if (c==0){}else
 if(c==1){
  a23 = "1";
  Serial.println("WŁACZ");
 
  }else
  if (c==2){
   a23 = "0";
  Serial.println("WYŁACZ");
  c=0;
  }else
   if (c==3){
   a23 = "1";
  Serial.println("WŁACZ");
  c=1;
  }
if(digitalRead(klawisz4)==LOW) {
  delay(400);
  d++;
 }
 if (d==0){}else
 if(d==1){
  a24 = "1";
  Serial.println("WŁACZ");
 
  }else
  if (d==2){
   a24 = "0";
  Serial.println("WYŁACZ");
 d=0;
  }else
   if (d==3){
   a24 = "1";
  Serial.println("WŁACZ");
  d=1;
  }
if(digitalRead(klawisz5)==LOW) {
  delay(400);
  e++;
 }
 if (e==0){}else
 if(e==1){
  a25 = "1";
  Serial.println("WŁACZ");
 
  }else
  if (e==2){
   a25 = "0";
  Serial.println("WYŁACZ");
 e=0;
  }else
   if (e==3){
   a25 = "1";
  Serial.println("WŁACZ");
  e=1;
  }

  if(digitalRead(klawisz6)==LOW) {
  delay(400);
  f++;
 }
 if (f==0){}else
 if(f==1){
  a26= "1";
  Serial.println("WŁACZ");
 
  }else
  if (f==2){
   a26 = "0";
  Serial.println("WYŁACZ");
 f=0;
  }else
   if (f==3){
   a26 = "1";
  Serial.println("WŁACZ");
  f=1;
  }
if(digitalRead(klawisz7)==LOW) {
  delay(400);
  g++;
 }
 if (g==0){}else
 if(g==1){
  a27 = "1";
  Serial.println("WŁACZ");
 
  }else
  if (g==2){
   a27 = "0";
  Serial.println("WYŁACZ");
 g=0;
  }else
   if (g==3){
   a27 = "1";
  Serial.println("WŁACZ");
  g=1;
  }
//if(digitalRead(klawisz8)==LOW) {
  //delay(400);
 // h++;
// }
// if (h==0){}else
// if(h==1){
//  a28 = "1";
 // Serial.println("WŁACZ");
 
 //}else
 // if (h==2){
 //  a28 = "0";
//  Serial.println("WYŁACZ");
// h=0;
///  }else
//   if (h==3){
 //  a28 = "1";
//  Serial.println("WŁACZ");
//  h=1;
 // }
//

 
 String url = "/przyciski4.php?";
 url += "id=1"; 
 url += "&o1="; 
 url += a21;
 url += "&o2="; 
 url += a22;
 url += "&o3="; 
 url += a23;
 url += "&o4="; 
 url += a24;
url += "&o5="; 
url += a25;
url += "&o6="; 
url += a26;
url += "&o7="; 
url += a27;
url += "&o8="; 
url += a28;
 client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n");  
 }}
   delay(200);}

mam podłączone 8 przycisków (chwilowych)-monostabilnych. Odczytuje wartość 1/0 z bazy danych, po naciśnięciu wysyłam 1/0 do bazy danych. Przyciski podłączone do wejść od D1-D8. Wszystkie inne przyciski działają niestety ten 8 co wykonanie pętli loop ustawia 1/0 i tak w koło reszta jest ok. I walczę już chwile z tym i nie wiem co go boli.

Link do komentarza
Share on other sites

Bo D8 (czyli GPIO15) jest wewnętrznie podłączony do GND (ten typ tak ma).

Niestety - w ESP masz tylko 5 pinów które możesz wykorzystać dowolnie (6 jeśli doliczysz GPIO16, ale tam nie da się zrobić programowo pullupa, 8 tylko wtedy gdy dodatkowo nie będziesz chciał korzystać z seriala).

Może zanim zaczniesz pisać radosne programiki które nie mają prawa działać zajrzałbyś uprzejmie do dokumentacji? To naprawdę nie boli...

 

Link do komentarza
Share on other sites

skłaniam się do problemów z podłączeniem podobnie jak deshipu, w każdej pętli robisz http.begin?? ile trwa obieg pętli bez wciskania przycisku?

EDIT: czyli jednak podłączenie tylko że wewnętrzne 😄

 

Edytowano przez SOYER
Link do komentarza
Share on other sites

D0 (czyli GPIO16) możesz spokojnie wykorzystać jako wyjście, albo jako wejście. Tyle, że w przypadku wejścia konfigurujesz to albo jako INPUT albo jako INPUT_PULLDOWN - nie ma możliwości INPUT_PULLUP.

Link do komentarza
Share on other sites

A gdybyś tak podłączył te przyciski sprytniej niż po jednym na pin? Jeśli przeszukasz forum, to możliwości masz dużo: macierz, multiplikatory portów, rejestry przesuwne, nawet charlieplexing. Ja nawet swojego czasu zrobiłem dedykowanego shielda z przyciskami do D1 Mini:https://www.tindie.com/products/10579/ — attiny na pokładzie robi skanowanie, debouncing i buforowanie i odczytujesz przyciski po i2c.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.