Hi,
I'm working on a project, the idea is to have a stepper motor lock/unlock my door.
However, now in my developing phase I've runned into a Soft WDT reset issue.
void lockDoor() {
while(digitalRead(lockedSensor) != LOW) {
stepper.turnClockwise(2);
}
Serial.println("Door locked!");
}
This is my lock door function, the idea is to have the motor stop turning once the button (lockedSensor) is pressed.
But right now, when the stepper motor have turned about 180 degree's I get a Soft wdt reset...
This is the error:
Soft WDT reset
ctx: cont
sp: 3ffef160 end: 3ffef370 offset: 01b0
>>>stack>>>
3ffef310: 3fffdad0 000003e7 3ffee2e8 402023db
3ffef320: 3ffe863c 3ffee320 00000000 4020241f
3ffef330: 402018fa 000003e8 3ffee320 40202632
3ffef340: 3fffdad0 3ffee320 00000000 4020269c
3ffef350: feefeffe 00000000 3ffee33c 402014e8
3ffef360: feefeffe feefeffe 3ffee350 402021e4
<<<stack<<<
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v3ffe8468
~ld
Please help?
main code:
#include "Arduino.h"
#include "WiFiClient.h"
#include "ESP8266WiFi.h"
#include "Stepper28byj48.h"
Stepper28byj48 stepper(D5, D6, D7, D8);
const int led = D0;
const int button = D2;
const int lockedSensor = D1;
int switchstate = 0; //State of the "checkIfLocked" button
void setup() {
Serial.println("Initializing...");
Serial.begin(115200);
pinMode(button, INPUT_PULLUP);
}
void lockDoor() {
while(digitalRead(lockedSensor) != LOW) {
stepper.turnClockwise(2);
}
Serial.println("Door locked!");
}
void loop() {
Serial.println("Close door in:");
for(int i=3; i>0;i--) {
Serial.print(i);
Serial.print("..");
delay(1000);
}
Serial.println("");
lockDoor();
}
Stepper library:
#include "Arduino.h"
#include "Stepper28byj48.h"
Stepper28byj48::Stepper28byj48(uint8_t pin1, uint8_t pin2, uint8_t pin3, uint8_t pin4) {
IN1 = pin1;
IN2 = pin2;
IN3 = pin3;
IN4 = pin4;
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
direction = true;
steps = 0;
stepsLeft = 0;
}
void Stepper28byj48::setDirection(){
if(direction==1){ steps++;}
if(direction==0){ steps--; }
if(steps>7){steps=0;}
if(steps<0){steps=7;}
}
void Stepper28byj48::stepper(int xw){
for (int x=0;x<xw;x++){
switch(steps){
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
setDirection();
}
}
void Stepper28byj48::resetStepper() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void Stepper28byj48::runStepper(int degree) {
long calculateSteps = 4095 / 360;
calculateSteps *= degree;
stepsLeft = calculateSteps;
while(stepsLeft > 0){
currentMillis = micros();
if(currentMillis - lastTime >= 1000){
stepper(1);
lastTime = micros();
stepsLeft--;
}
}
resetStepper();
}
void Stepper28byj48::runStepper() {
stepsLeft = 4095;
while(stepsLeft > 0){
currentMillis = micros();
if(currentMillis - lastTime >= 1000){
stepper(1);
lastTime = micros();
stepsLeft--;
}
}
resetStepper();
Serial.println("Turned one cycle");
}
void Stepper28byj48::turnClockwise(int degree) {
direction = true;
runStepper(degree);
}
void Stepper28byj48::turnClockwise() {
direction = true;
runStepper();
}
void Stepper28byj48::turnAntiClockwise(int degree) {
direction = false;
runStepper(degree);
}
void Stepper28byj48::turnAntiClockwise() {
direction = false;
runStepper();
}