Próbowałem rozwiązać ten problem przez cały weekend, ale bez powodzenia postanowiłem zamieścić go tutaj. Byłbym naprawdę wdzięczny za każdą pomoc.
Problem
Moduł Wi-Fi aktywuje silnik prądu stałego i pozwala mu pracować przez 3 sekundy, ale kiedy Silnik prądu stałego zatrzymuje się po tych 3 sekundach, moduł Wi-Fi i wyświetlacz już nie reagują. Działa tylko raz. (Po naciśnięciu przycisku resetowania dzieje się to samo.)
Pytanie
Co powoduje te zakłócenia? Masz jakąś radę na temat mojego obwodu? (zamieściłem diagram Fritzinga, ponieważ źle rysuję schematy)
# Include <SoftwareSerial.h> # include <LiquidCrystal.h>LiquidCrystal lcd (12, 11, 5, 4, 3, 2); SoftwareSerial ESP8266 (9, 8); // RX = 8 pl TX = 9 # define DEBUG trueboolean FAIL_8266 = false; int LED = 13; // led op 13int secondeAan = 3000; String my_AP_SSID = "myID"; String my_AP_Pass = "myPass"; void setup () {// - stel led in - pinMode (LED, OUTPUT); // - lcd scherm - lcd.begin (16, 2); lcd.clear (); lcd.setCursor (0, 1); zrób {ESP8266. początek (115200); // rozpocznij komunikację z esp8266 // Poczekaj na uruchomienie monitora szeregowego while (! Serial); lcd.clear (); lcd.print ("--- Start ---"); ESP8266.print ("AT \ r \ n"); opóźnienie (500); if (ESP8266.find ("OK")) {FAIL_8266 = false; sendData ("AT + RST \ r \ n", 4000, DEBUG); sendData ("AT + CWMODE = 3 \ r \ n", 2000, DEBUG); sendData ("AT + CWJAP = \" "+ my_AP_SSID +" \ ", \" "+ my_AP_Pass +" \ ", 9,4 \ r \ n", 2000, DEBUG); sendData ("AT + CIFSR \ r \ n", 2000, DEBUG); sendData ("AT + CIPMUX = 1 \ r \ n", 2000, DEBUG); sendData ("AT + CIPSERVER = 1,80 \ r \ n", 2000, DEBUG); } else {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Moduł nie odpowiada."); opóźnienie (500); FAIL_8266 = prawda; }} while (FAIL_8266);} void loop () {// Pobierz liczbę bajtów (znaków) dostępnych do odczytu z portu szeregowego if (ESP8266.find ("+ IPD,")) { lcd.clear (); lcd.print ("Nieuwe connectie"); // - sluit connectie - motorToggle (); sendData ("AT + CIPCLOSE = 0 \ r \ n", 100, DEBUG); sendData ("AT + CIPCLOSE = 1 \ r \ n", 100, DEBUG); sendData ("AT + CIPCLOSE = 2 \ r \ n", 100, DEBUG); }} void motorToggle () {digitalWrite (LED, WYSOKI); lcd.clear (); lcd.print ("eten gegeven"); opóźnienie (secondeAan); digitalWrite (LED, LOW); delay (200);} String sendData (polecenie String, const int timeout, debugowanie typu boolean) {String response = ""; ESP8266.print (polecenie); // wyślij odczytany znak do esp8266 long int time = millis (); while ((czas + limit czasu) > millis ()) {while (ESP8266.available ()) {char c = ESP8266.read (); odpowiedź + = c; }} if (debugowanie) {lcd.clear (); lcd.print (odpowiedź); } odpowiedź zwrotna;}