Skocz do zawartości

Pomocna odpowiedź

Nie... Znalazłem w szufladzie stary wyświetlacz z kontrolerem FT-800 - czekał na jakiś dobry pomysł i... postanowiłem zrobić na nim bitwę czołgów 🙂 W końcu mamy Sobotę, trzeba się jakoś rozerwać a w Wawie taki smog, że siekiera zawisa w powietrzu więc rower odpada. No i muszę przyznać, że fajnie to działa. Głupia 8MHz ATmega z płyteczki NanoPro spokojnie daje radę robić 20 klatek na sekundę i wciąż śpi przez 30 z 50 dostępnych milisekund. Mam już dwa joysticki analogowe z klikiem (FIRE), dwa czołgi, pole walki ze zniszczalnymi przeszkodami (drewniane, ceglane i beton), odliczane czasy przeładowania dział, punktację itp. Ten kontroler nie jest przeznaczony stricte do gier a raczej do ekranów GUI, bo właśnie najważniejsze czego mu brakuje to sprzętowe wykrywanie kolizji obiektów. Ja zrobiłem detekcję kolizji czołgów z przeszkodami i ze sobą, pocisków ze wszystkim a teraz rysuję (w Paint'cie...) animacje wybuchów, heh, fajna zabawa. Ostatni raz napisałem grę.. a nie, to wcale nie było tak dawno. Mój PONG powstał kilka lat temu gdy dorwałem się do malutkiego wyświetlacza OLED 128x64. A tutaj mam 5 cali, 480x272 i 24-bitowy kolor 🙂 FT-800 sam umie robić transformacje (przesunięcia i obroty) raz podesłanych mu bitmap 2D więc rysowanie czołgów w dowolonym położeniu to po prostu bajka. Nie mamy czasem na Forbocie działu "Gry"? 😲

No, ale zaraz, nie o tym miało być... Niestety nie mam ogrzewania czujnika 😳

  • 2 tygodnie później...

OK, jako, że w końcu usiadłem do mojego czujnika jakości powietrza, postanowiłem najpierw podlączyć DHT11 który będzie mi sprawdzał temperaturę i wilgotność badanego powietrza.

Problem, po wgraniu do nodeMCU kod nie działa, po wgraniu do arduino uno, śmiga aż miło. Dlaczego, o czym zapomniałem?? Przewód sygnałowy wpinam oczywiście w pin D2 na nodeMCU. 

Oto sketch:

#include <SimpleDHT.h>

// for DHT11, 
//      VCC: 5V or 3V
//      GND: GND
//      DATA: 2
int pinDHT11 = 2;
SimpleDHT11 dht11(pinDHT11);

void setup() {
  pinMode(2, INPUT);
  Serial.begin(9600);
}

void loop() {
  // start working...
  Serial.println("=================================");
  Serial.println("Sample DHT11...");
  
  // read without samples.
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
    return;
  }
  
  Serial.print("Sample OK: ");
  Serial.print((int)temperature); Serial.print(" *C, "); 
  Serial.print((int)humidity); Serial.println(" H");
  
  // DHT11 sampling rate is 1HZ.
  delay(1500);
}

wywala błędy 2832 i 3088...

(edytowany)

Czyli mam wpisać 4 zamiast 2? też nie działa, a w przykładzie na tej stronie jest że jak chcemy użyc np. pinu D4 to wpisujemy D4, ale u mnie tez nie działa...:-(

 

 

EDIT, wpisałem D4, podlączyłem do D4 i d..., ale jako, że mam DHT11 podłączone do osobnej przetwornicy, a nodeMCU do USB żeby działał monitor szeregowy, to przypomniało mi się, że może by tak połączyć masy node i przetwornicy zasilającej DHT... i BINGO... czyta prawidłowo...:-))

Dobra biorę się za PMS5003...

Trzy godziny później, kurcze jest za pięć czwarta, chyba się nie wyśpię....he he ale jakos to uruchomiłem:

Dobranoc, w sumie i tak sam tu jestem 😉

Edytowano przez SOYER
(edytowany)

Czekając, na nowe nodeMcu, stare poszło z dymem z powodu wadliwie polutowanej przetwornicy, uzupełniam kod o RTC, serwo i wentylator...

Pytanie, jak obejść problem konieczności podłączania i odłączania przewodów od PMS5003 podpiętych pod TXi RX nodeMCU za każdym wgrywaniem nowej wersji softu...??

Edytowano przez SOYER
(edytowany)

Nie wiedziałem o takiej opcji, dzięki:-). Korzystając z tego tutoriala: http://strejczek.com/esp8266-i-arduino-ota-over-the-air-update/ , rozumiem, że dochodze do wgrania szkicu BasicOTA.ino i po pojawieniu sie portu "internetowego", moge wgrywać dowolny program przez ten port, czy musi on zawierać jakieś elementy tego szkicu BasicOTA.ino? Krótko mówiąc, czy BasicOTA.ino po prostu uruchamia port sieciowy, a potem to już możemy wgrywać co chcemy?

EDIT już doczytałem, że szkic BasicOTA.ino musi być częścią naszego programu... ciekawe jak to się bedzie gryźć z Blynkiem...

Edytowano przez SOYER

nie musi. ja zawsze robię coś takiego, że mam jakiś wolny pin, podpinam do guzika i jeśli ten w czasie startu jest wciśnięty, uruchamia się inna pętla zamiast loop. kiedyś mi to rzyć uratowało gdy się okazało, że wskutek błędu program po wejściu w loop strzelał sobie rejestramina serialu i robił reset 🙂

U nas godo się rzić ;-).

Czyli jak? Na dzień dobry w pętli dajesz if-a sprawdzającego przycisk i jak jest LOW to uruchamia się szkic np. od OTA, a jak nie to co innego? Przycisk to chyba nie jakiś microswitch tylko dwustanowy, tak? Bo jakbyś go nie trzymał wciśniętego to pętla przeleci i ruszy ten drugi szkic... dobrze kombinuję?

niezupełnie tak. jeśli w setup wykryję że przycisk jest wciśnięty, to wchodzę w swoją nieskończoną pętlę. tylko pamiętaj, żeby dać yield() albo delay(0) przy każdym obrocie pętli.

1. Można wgrać szkic z dwoma pętlami i wybierać (jakoś) która ma się wykonywać?

2. Z tego co wyczytałem moim angielskim to wpisanie yield() na końcu petli powoduje, że wykonuje się tylko ona, tak?

3. Jak to się zapisuje w setup-ie, że jeśli przycisk LOW to ma się wykonać to a nie tamto...??

 

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