Ребят всем привет!
Очень нужна ваша помощь! Приобрел ваш Диммер - классная вещь, все работает, но вот незадача. Когда я использую Ардуино + Wi-Fi Shield все идеально, регулирую уровень свечения через wi-fi все гуд. Но когда я использую WIFI ESP8266-07, используя для обмена с ним информацией SoftwareSerial, то при передаче данных к этому модулю напряжение на PIN 3 подключенному к димммеру падает до нуля и восстанавливается, т.е. пытаясь изменить свечение лампы она моргает. Менял пины ничего не помогает, все время на это пине пропадает напряжение.
Сетую на SoftwareSerial, но не знаю что делать, может кто знает в чем дело?
Вот скетч:
PHP код:
#include <ESP8266.h>
#include <SPI.h>
#include "CyberLib.h"
#include <SoftwareSerial.h>
#define SSID "---"
#define PASSWORD "---"
#define HOST_NAME "0"
#define HOST_PORT 2390
volatile uint8_t tic, Dimmer1=100;
SoftwareSerial mySerial(10,11); // RX, TX для отладки
ESP8266 wifi(mySerial);
String packet = "";
int level = 100;
//********************обработчики прерываний*******************************
void halfcycle() //прерывания таймера
{
tic++; //счетчик
if(Dimmer1 < tic ) D3_High; //управляем выходом
}
void detect_up() // обработка внешнего прерывания. Сработает по переднему фронту
{
tic=0; //обнулить счетчик
ResumeTimer1(); //запустить таймер
attachInterrupt(0, detect_down, RISING); //перепрограммировать прерывание на другой обработчик
}
void detect_down() // обработка внешнего прерывания. Сработает по заднему фронту
{
StopTimer1(); //остановить таймер
D3_Low; //логический ноль на выходы
tic=0; //обнулить счетчик
attachInterrupt(0, detect_up, FALLING); //перепрограммировать прерывание на другой обработчик
}
void connectionWiFi(){
mySerial.begin(115200);
delay(1000);
mySerial.println("AT+CIOBAUD=9600");
mySerial.begin(9600);
Serial.begin(9600);
Serial.print("setup begin\r\n");
Serial.print("FW Version:");
Serial.println(wifi.getVersion().c_str());
if (wifi.setOprToStation()) {
Serial.print("to station ok\r\n");
} else {
Serial.print("to station err\r\n");
}
if (wifi.joinAP(SSID, PASSWORD)) {
Serial.print("Join AP success\r\n");
Serial.print("IP: ");
Serial.println(wifi.getLocalIP().c_str());
} else {
Serial.print("Join AP failure\r\n");
}
Serial.print("setup end\r\n");
if (wifi.registerUDP("0",0, HOST_PORT,2)) {
Serial.print("register udp ok\r\n");
} else {
Serial.print("register udp err\r\n");
}
}
void setup() {
D3_Out;
D3_Low;//установить на выходах низкий уровень сигнала
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, detect_up, LOW); // настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
StopTimer1(); //остановить таймер
connectionWiFi();
}
void loop() {
uint8_t buffer[128] = {0};
uint32_t len = wifi.recv(buffer, sizeof(buffer),10000);
if (len > 0) {
packet = "";
//Serial.print("Received:[");
for(uint32_t i = 0; i < len; i++) {
packet += (char)buffer[i];
}
//Serial.print(packet);
level = packet.toInt();
Serial.print(level);
//Serial.print("]\r\n");
}
Dimmer1 = level;
}