Skocz do zawartości

Problem z kodem NODEMCU v3


Pomocna odpowiedź

Napisano

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.

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ć...

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 .

Weź się ogarnij. Wklej cały kod, formatując go przy tym tak, żeby to się dało przeczytać. Napisz też co do czego masz podłączone, bo przecież nie jest powiedziane, że problem rzeczywiście jest z kodem.

  • Lubię! 2
#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.

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

 

(edytowany)

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

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.

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.

Hmm, dobra myśl tylko mysle zastąpic te przyciski klawiszami dzwonkowymi 😄

czyli nie ma opcji uzycia przycisku tak jak pisalem po jednym na pin ? 

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