dimakein
New member
Здравствуйте, уважаемые форумчане. Я хочу реализовать управление RGB светодиодной лентой, но столкнулся с непонятным глюком:
переписал немного пример Basic_PWM, чтобы управлять тремя каналами, с ним никаких проблем нет
а когда таким же образом пытаюсь использовать этот пример в своем проекте ловлю глюки, почему-то не получается управлять одним из трех каналов(синим)
Мой код(это еще не до конца переписанный HttpServer_ConfigNetwork) под спойлером
[/I][/I][/I][/I][/I][/I][/I][/I]
никто с подобным не сталкивался?
переписал немного пример Basic_PWM, чтобы управлять тремя каналами, с ним никаких проблем нет
Код:
[HASHTAG]#include[/HASHTAG] <user_config.h>
[HASHTAG]#include[/HASHTAG] <SmingCore/SmingCore.h>
[HASHTAG]#define[/HASHTAG] LED_PIN1 13
[HASHTAG]#define[/HASHTAG] LED_PIN2 12
[HASHTAG]#define[/HASHTAG] LED_PIN3 14
DriverPWM RedPWM,GreenPWM,BluePWM;
Timer procTimer;
int i = 0,j=0,k=0;
bool countUp = true;
bool countDown = false;
void doPWM()
{
if(countUp){
if(i < 255 && j==0 && k==0){
i++;
}
if(i == 255 && j<255 && k==0) {
j++;
}
if(i == 255 && j == 255 && k < 255) {
k++;
}
if(i == 255 && j == 255 && k == 255) {
countUp = false;
countDown = true;
}
}
if(countDown){
if(i > 0 && j==255 && k==255){
i--;
}
if(i == 0 && j>0 && k==255) {
j--;
}
if(i == 0 && j == 0 && k > 0) {
k--;
}
if(i == 0 && j == 0 && k == 0) {
countUp = true;
countDown = false;
}
}
Serial.printf("%d %d %d\r\n",i,j,k);
RedPWM.analogWrite(LED_PIN1, i);
GreenPWM.analogWrite(LED_PIN2, j);
BluePWM.analogWrite(LED_PIN3, k);
}
void init()
{
RedPWM.initialize();
GreenPWM.initialize();
BluePWM.initialize();
procTimer.initializeMs(5, doPWM).start();
}
а когда таким же образом пытаюсь использовать этот пример в своем проекте ловлю глюки, почему-то не получается управлять одним из трех каналов(синим)
Мой код(это еще не до конца переписанный HttpServer_ConfigNetwork) под спойлером
Код:
[HASHTAG]#include[/HASHTAG] <user_config.h>
[HASHTAG]#include[/HASHTAG] <SmingCore/SmingCore.h>
[HASHTAG]#include[/HASHTAG] <AppSettings.h>
[HASHTAG]#include[/HASHTAG] <cstdio>
[HASHTAG]#include[/HASHTAG] <cstdlib>
[HASHTAG]#include[/HASHTAG] <cstring>
[HASHTAG]#define[/HASHTAG] RED_LED 13
[HASHTAG]#define[/HASHTAG] GREEN_LED 12
[HASHTAG]#define[/HASHTAG] BLUE_LED 14
DriverPWM RedPWM,GreenPWM,BluePWM;
HttpServer server;
FTPServer ftp;
BssList networks;
String network, password;
Timer connectionTimer;
int RED_value=0, GREEN_value=0, BLUE_value=0;
int tRED_value, tGREEN_value, tBLUE_value;
void onIndex(HttpRequest &request, HttpResponse &response)
{
TemplateFileStream *tmpl = new TemplateFileStream("index.html");
auto &vars = tmpl->variables();
response.sendTemplate(tmpl); // will be automatically deleted
}
void onFile(HttpRequest &request, HttpResponse &response)
{
String file = request.getPath();
if (file[0] == '/')
file = file.substring(1);
if (file[0] == '.')
response.forbidden();
else
{
response.setCache(86400, true); // It's important to use cache for better performance.
response.sendFile(file);
}
}
[I][I][I][I][I]void onAjaxSetLedColor(HttpRequest &request, HttpResponse &response)
{
String color = request.getQueryParameter("value");
debugf("Get new led color: %s", color.c_str());
RED_value = strtol(color.substring(0,2).c_str(),NULL,16);
GREEN_value = strtol(color.substring(2,4).c_str(),NULL,16);
BLUE_value = strtol(color.substring(4,6).c_str(),NULL,16);
debugf("Parse color to RGB: %d %d %d",RED_value, GREEN_value, BLUE_value);
if (RED_value > 255) RED_value=255;
if (RED_value < 0) RED_value=0;
RedPWM.analogWrite(RED_LED,RED_value);
if (GREEN_value > 255) GREEN_value=255;
if (GREEN_value < 0) GREEN_value=0;
GreenPWM.analogWrite(GREEN_LED,GREEN_value);
if (GREEN_value > 255) GREEN_value=255;
if (GREEN_value < 0) GREEN_value=0;
BluePWM.analogWrite(GREEN_LED,GREEN_value);
JsonObjectStream* stream = new JsonObjectStream();
JsonObject& json = stream->getRoot();
Serial.printf("Current RGB colors1: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
json["status"] = (bool) true;
json["red"] = (int) RED_value;
json["green"] = (int) GREEN_value;
json["blue"] = (int) BLUE_value;
response.setAllowCrossDomainOrigin("*");
response.sendJsonObject(stream);
Serial.printf("Current RGB colors2: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
}
void onAjaxGetLedColor(HttpRequest &request, HttpResponse &response)
{
JsonObjectStream* stream = new JsonObjectStream();
JsonObject& json = stream->getRoot();
json["status"] = (bool) true;
json["red"] = (int) RED_value;
json["green"] = (int) GREEN_value;
json["blue"] = (int) BLUE_value;
Serial.printf("Current RGB colors: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
response.setAllowCrossDomainOrigin("*");
response.sendJsonObject(stream);
}
void startWebServer()
{
server.listen(80);
server.addPath("/", onIndex);
server.addPath("/ajax/setledcolor", onAjaxSetLedColor);
server.addPath("/ajax/getledcolor", onAjaxGetLedColor);
server.setDefaultHandler(onFile);
}
void startFTP()
{
if (!fileExist("index.html"))
fileSetContent("index.html", "<h3>Please connect to FTP and upload files from folder 'web/build' (details in code)</h3>");
ftp.listen(21);
ftp.addUser("me", "123"); // FTP account
}
void startServers()
{
startFTP();
startWebServer();
}
[I][I][I]void init()
{
RedPWM.initialize();
GreenPWM.initialize();
BluePWM.initialize();
RedPWM.analogWrite(RED_LED, 0);
GreenPWM.analogWrite(GREEN_LED, 0);
BluePWM.analogWrite(BLUE_LED, 0);
Serial.begin(SERIAL_BAUD_RATE);
Serial.systemDebugOutput(false);
AppSettings.load();
WifiStation.enable(true);
if (AppSettings.exist())
{
WifiStation.config(AppSettings.ssid, AppSettings.password);
if (!AppSettings.dhcp && !AppSettings.ip.isNull())
WifiStation.setIP(AppSettings.ip, AppSettings.netmask, AppSettings.gateway);
Serial.printf("Current network settings: ip %d netmask %d gateway %d\r\n",WifiStation.getIP(), WifiStation.getNetworkMask(), WifiStation.getNetworkGateway());
}
WifiStation.startScan(networkScanCompleted);
// Start AP for configuration
WifiAccessPoint.enable(true);
WifiAccessPoint.config("Sming Configuration", "", AUTH_OPEN);
// Run WEB server on system ready
System.onReady(startServers);
}
Последнее редактирование: