致电digitalWrite

时间:2019-07-15 22:31:28

标签: c++ arduino esp8266 arduino-esp8266

我正在使用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); 时,不会发生这种情况。 >功能。

0 个答案:

没有答案