Merhabalar. Forumda ve geliştirme kartları programlamasında yeniyim. Belki size kolay bir hata gelebilir ama benim günlerdir uykumu kaçıran bir sorun. Nodemcu esp8266 yardımıyla otomatik hayvan besleme programlaması yapıyorum. 28BYJ-48 step motorunu kullanıyorum. Sorunum; internet üzerinden çektiğim saat ile zamanladığım saat if komutunda çalıştığında motor istenilen konuma gelmeden bir kaç adım sonra duruyor. (Motor diğer örnek kodlamalarda çalışıyor.)Hatanın "zamanBelirleme" kısmında ki delayden dolayı olduğunu düşünüyorum ama bir çözüme ulaşamadım. Kodum şu şekildedir:
Kod:
#include <ESP8266WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <AccelStepper.h>
#define led D4
#define IN1 D1
#define IN2 D2
#define IN3 D5
#define IN4 D6
const char* ssid = "***********";
const char* pass = "**********";
const int stepsPerRevolution = 2048;
const int MamaSaati1 = 19;
const int MamaDakika1 = 56;
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
AccelStepper stepper(AccelStepper::HALF4WIRE, IN1, IN3, IN2, IN4);
void setup() {
Serial.begin(115200);
delay(100);
pinMode(led, OUTPUT);
Serial.println(ssid);
Serial.println(" Ağına Bağlanılıyor");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(led, LOW);
delay(1000);
Serial.print(".");
}
Serial.println("");
Serial.println("Ağ Bağlantısı Sağlandı..!");
Serial.print("IP Adresiniz: "); Serial.println(WiFi.localIP());
digitalWrite(led, HIGH);
timeClient.begin();
timeClient.setTimeOffset(10800);
stepper.setMaxSpeed(700);
stepper.setAcceleration(200);
stepper.moveTo(stepsPerRevolution);
}
void zamanBelirleme() {
timeClient.update();
String formattedTime = timeClient.getFormattedTime();
Serial.print("Formatted Time: ");
Serial.println(formattedTime);
int currentHour = timeClient.getHours();
int currentMinute = timeClient.getMinutes();
delay(1000);
}
void mamaZamanı() {
if ((timeClient.getHours() == MamaSaati1) && (timeClient.getMinutes() == MamaDakika1)) {
stepper.run();
}
}
void loop() {
zamanBelirleme();
mamaZamanı();
}
İf komutunun içinde şöyle bir kod daha denedim "do {stepper.run();} while (stepper.distanceToGo() !=0);"
bu komuttan sonra da nodemcu crash yiyip kendini yeniden başlatmaya başladı her başlangıçta da motor biraz ilerleyip kartın tekrar kendini yeniden başlatmasına neden oldu. Bu sorunda da aldığım hata mesajı şu şekilde :
CUT HERE FOR EXCEPTION DECODER ---------------
Soft WDT reset
>>>stack>>>
ctx: cont
sp: 3ffffdd0 end: 3fffffc0 offset: 01a0
3fffff70: 3fffdad0 00000000 3ffee5b8 402028cd
3fffff80: 3fffdad0 00000000 3ffee5b8 4020117f
3fffff90: 313a3531 30303a33 08000000 40100185
3fffffa0: 3fffdad0 00000000 3ffee794 40203950
3fffffb0: feefeffe feefeffe 3ffe85e0 40100bd1
<<<stack<<<
--------------- CUT HERE FOR EXCEPTION DECODER ---------------
ets Jan 8 2013,rst cause:2, boot mode: (3,6)
load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v00044870
~ld
Yardımlarınız için şimdiden çok teşekkürler. Kendim çözersem de örnek olmak adına buraya ileticem.