我正在使用NodeMCU ESP8266板创建一个远程控制流动站。 ESP8266充当服务器,从客户端接收UDP数据包。当板载蓝色LED点亮时,我可以毫无问题地连接到服务器。当板载蓝色LED不亮时,我可以在计算机上看到服务器的SSID。但是,我无法连接或向其发送UDP数据包。
在我的程序的 resetSteering 中,当调用 turnLeft 时,我没有上述问题。调用 turnRight 时,我遇到了上述问题。 turnLeft 和 turnRight 几乎完全相同。它们之间的区别是 if 语句和一个 digitalWrite 调用。
通过注释 turnRight 函数中的代码行。我将问题进一步缩小为 digitalWrite(SteerDir,HIGH); 。如果将 SteerDir 的值设置为较低,则不会遇到任何问题。
我已将问题隔离到 turnRight 函数中。在这里,当达到 digitalWrite(SteerDir,HIGH); 时,我会遇到WiFi故障。
我尝试注释掉if语句中的所有内容,但有问题的 digitalWrite 除外,但仍然遇到该问题。
我还尝试用5V 2A电源为ESP8266供电,问题仍然存在。
#include <ESP8266WiFi.h>
char *SSID = "ConnectHere"; // Retrieve SSID from WiFiCredentials.cpp.
char *PASSWORD = "YOURWIFI01"; // Retrieve PASSWORD from WiFiCredentials.cpp.
const int BAUD_RATE = 9600; // Baud Rate for serial communication.
// Define pinouts
#define DriveEn D0
#define DriveDir D1
#define DrivePWM D2
#define SteerEn D3
#define SteerDir D4
#define SteerPWM D5
#define SteerPot A0
// Variables for motor control.
const int DriveAcceleration = 10; // Delay for controlling acceleration.
const int SteerAcceleration = 5; // Delay for controlling acceleration.
int DrivePWMValue = 0; // PWM value for speed control.
int SteerPWMValue = 0; // PWM value for speed control.
int SteerPotValue = 0; // potentiometer reading from steering column.
int MinSteerAngle = 514; // Lower limit for steering pot value.
int MidSteerAngle = 882; // Value when wheels are pointed straight.
int MaxSteerAngle = 1024; // Upper limit for steering pot value.
void turnRight()
{
int currentSteerVal = analogRead(SteerPot);
Serial.println("Right");
if (currentSteerVal < MaxSteerAngle) // If wheels not at max:
{
Serial.println();
digitalWrite(SteerEn, HIGH);
digitalWrite(SteerDir, HIGH); // Problem is here. Program works if SteerDir is set to LOW.
incSteerPWM();
analogWrite(SteerPWM, SteerPWMValue);
delay(SteerAcceleration);
}
}
void turnLeft()
{
int currentSteerVal = analogRead(SteerPot);
Serial.println("Left");
if (currentSteerVal > MinSteerAngle) // If wheels not at min:
{
digitalWrite(SteerEn, HIGH);
digitalWrite(SteerDir, LOW);
incSteerPWM();
analogWrite(SteerPWM, SteerPWMValue);
delay(SteerAcceleration);
}
}
void incSteerPWM()
{
if (SteerPWMValue < 255)
SteerPWMValue++;
}
void setup() {
// Set motor driver pinouts as output.
pinMode(SteerEn, OUTPUT);
pinMode(SteerDir, OUTPUT);
pinMode(SteerPWM, OUTPUT);
pinMode(DriveEn, OUTPUT);
pinMode(DriveDir, OUTPUT);
pinMode(DrivePWM, OUTPUT);
Serial.begin(BAUD_RATE); // Begin Serial communication on port 9600.
WiFi.softAP(SSID, PASSWORD); // Setup access point from ESP8266.
}
void loop() {
/* Uncomment turnLeft, and comment turnRight.
* Only one function should be called in the loop.
*/
turnRight();
// turnLeft();
}
使用备用NodeMCU ESP8266,您将看到蓝色LED指示灯在关闭之前快速点亮。当 turnLeft()是循环中唯一调用的函数,或者在 turnRight digitalWrite(SteerDir,LOW); 时,不会发生这种情况。 >功能。