Hello, I wrote this code and it does what I want but it will stop working after some hours. I need this code to run as long as needed. It is to raise and lower sharpies onto 3D printing filament at different intervals. I gather it is from the use of Delay instead of millis, but I dont know enough about programming to do that on my own.
Is there a way to add a piece of code to the end to clear the memory (due to filling up from the use of delay i guess?)
Or any guidance to change it to the use of millies without rewriting the entire code?
Any help is much appreciated!
#include <Servo.h>
// constants won't change
const int SERVO_PIN_A = 9;
const int SERVO_PIN_B = 10;
const int SERVO_PIN_C = 11;
const int SERVO_PIN_D = 3;
const int button = 5;
const int angleA = 0;
const int angleB = 90;
const int time1 = 1000;
const int time2 = 2000;
const int time3 = 3000;
const int min = 0;
const int max = 1023;
const int ledR = 0;
const int ledY = 1;
const int ledG = 2;
const int ledW = 4;
Servo servo_A; // create servo object to control a servo
Servo servo_B;
Servo servo_C;
Servo servo_D;
void setup() {
servo_A.attach(SERVO_PIN_A); // attaches the servo on pin 9 to the servo object
servo_B.attach(SERVO_PIN_B); // attaches the servo on pin 9 to the servo object
servo_C.attach(SERVO_PIN_C); // attaches the servo on pin 9 to the servo object
servo_D.attach(SERVO_PIN_D); // attaches the servo on pin 9 to the servo object
pinMode(ledR, OUTPUT);
pinMode(ledY, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledW, OUTPUT);
randomSeed(analogRead(0));// seads ranodm number from analog pin from 0 to 1023)
}
void loop() {
int sensorReading = analogRead(A0); //maps pin to pot
int range = map(sensorReading, min, max, 0, 4); //maps pot into sections
switch (range) {
case 0:
digitalWrite(ledG, HIGH);
digitalWrite(ledY, LOW);
digitalWrite(ledR, LOW);
digitalWrite(ledW, LOW);
servo_A.write(angleB);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time1);
servo_A.write(angleA);
servo_B.write(angleB);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time1);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleB);
servo_D.write(angleA);
delay(time1);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleB);
delay(time1);
break;
case 1:
digitalWrite(ledG, LOW);
digitalWrite(ledY, HIGH);
digitalWrite(ledR, LOW);
digitalWrite(ledW, LOW);
servo_A.write(angleB);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time2);
servo_A.write(angleA);
servo_B.write(angleB);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time2);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleB);
servo_D.write(angleA);
delay(time2);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleB);
delay(time2);
break;
case 2:
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, HIGH);
digitalWrite(ledW, LOW);
servo_A.write(angleB);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time3);
servo_A.write(angleA);
servo_B.write(angleB);
servo_C.write(angleA);
servo_D.write(angleA);
delay(time3);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleB);
servo_D.write(angleA);
delay(time3);
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleB);
delay(time3);
break;
case 3:
digitalWrite(ledG, LOW);
digitalWrite(ledY, LOW);
digitalWrite(ledR, LOW);
digitalWrite(ledW, HIGH);
servo_A.write(angleB);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleA);
delay(random(100, 20000)); //random between min and max milliseconds
servo_A.write(angleA);
servo_B.write(angleB);
servo_C.write(angleA);
servo_D.write(angleA);
delay(random(100, 2000));
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleB);
servo_D.write(angleA);
delay(random(100, 2000));
servo_A.write(angleA);
servo_B.write(angleA);
servo_C.write(angleA);
servo_D.write(angleB);
delay(random(100, 2000));
break;
}
}
