Странности с GY-85(акселерогирокомпас) и ESP-01

Нет ответов
Sh0a1m0a0n1
Offline
Зарегистрирован: 16.09.2016

Сразу к делу:

Есть код

#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <Adafruit_NeoPixel.h>
#include "GY_85.h"

#define PIN            2
#define NUMPIXELS      14
#define BRIGHTNESS     50
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int r, g, b, j  = 0;

#include <Wire.h>
int headingCZDegrees;
int cx;
GY_85 GY85;     //create the object
const byte DNS_PORT = 53;
IPAddress apIP(192, 168, 1, 1);
DNSServer dnsServer;
ESP8266WebServer webServer(80);

String responseHTML = ""
                      "<!DOCTYPE html><html><head><title>CaptivePortal</title></head><body>" + String(cx) +
                      "<h1>Hello World!</h1><p>This is a captive portal example. All requests will "
                      "be redirected here.</p></body></html>";

void setup() {
  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
  WiFi.softAP("DNSServer CaptivePortal example");

  // if DNSServer is started with "*" for domain name, it will reply with
  // provided IP to all DNS request
  dnsServer.start(DNS_PORT, "*", apIP);

  // replay to all requests with same HTML
  webServer.onNotFound([]() {

    webServer.send(200, "text/html", "<!DOCTYPE html><html><head><title>CaptivePortal</title></head><body>" + String(headingCZDegrees) + " - " + String(cx) +
                   "</body></html>");
  });
  webServer.begin();
  Wire.pins(3, 0);
  Wire.begin(3, 0);
  strip.begin();
  GY85.init();

  //delay(500);
  for (int i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(15, 15, 15));
    strip.show();

    delay(50);
  }
  delay(500);
}

void loop() {
  dnsServer.processNextRequest();
  webServer.handleClient();
  for (byte i = 0; i < NUMPIXELS; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 0));
  }
  float headingCZ  = atan2(GY85.compass_y( GY85.readFromCompass() ), GY85.compass_x( GY85.readFromCompass() ));
  if (headingCZ < 0)
    headingCZ += 2 * PI;
  if (headingCZ > 2 * PI)
    headingCZ -= 2 * PI;
  headingCZDegrees = headingCZ * 180 / M_PI;
  cx = map(headingCZDegrees, 0, 360, 0, NUMPIXELS);
  for (int i = 0; i <= cx; i++) {
    strip.setPixelColor(i, strip.Color(0, 0, 100));
  }
  strip.show();
}

Собственно проблема в том, что на Arduino Mega этот код (с изменениями, касающимися отображения переменных) работает как надо, а на ESP переменная headingCZDegrees не принимает значения большие прямого угла. В чём причина и как это можно лечить?