Hi.
my program worked fine, but when I added routine for sensors reading (ntc 100k) stepper motor started to pause.
My code:
#include <LiquidCrystal.h>
#include <DFR_LCD_Keypad.h>
#include <AccelStepper.h>
#include <NTC_Thermistor.h>
void LCD();
void motor();
void updateLCD();
void senzor();
byte de[8] = {
B01000,
B00100,
B00010,
B11111,
B11111,
B00010,
B00100,
B01000
};
byte le[8] = {
B00010,
B00100,
B01000,
B11111,
B11111,
B01000,
B00100,
B00010
};
byte gon[8] = {
B10010,
B01001,
B10010,
B01001,
B10010,
B00000,
B11111,
B11111
};
byte goff[8] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00000,
B11111,
B11111
};
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
DFR_LCD_Keypad keypad(A0, &lcd);
AccelStepper mot1(1, 2, 3); // pin 2 = step, pin 3 = direction
int last_key, key;
int nhitrost = 20;
float ntemp = 0;
float temp1 = 0;
int smer = 0;
//const int stepPin = 2;
const int dirPin = 11;
const int ssr = 12;
unsigned long lastLcdUpdate;
unsigned long lastSenzorUpdate;
#define SENSOR1_PIN A1
#define SENSOR2_PIN A2
#define SENSOR3_PIN A3
#define REFERENCE_RESISTANCE 4660
#define NOMINAL_RESISTANCE 100000
#define NOMINAL_TEMPERATURE 25
#define B_VALUE 3950
NTC_Thermistor* thermistor1 = NULL;
NTC_Thermistor* thermistor2 = NULL;
NTC_Thermistor* thermistor3 = NULL;
void setup()
{
mot1.setMaxSpeed(1500);
mot1.setSpeed(0);
lcd.begin(16, 2);
lcd.createChar(1, de);
lcd.createChar(2, le);
lcd.createChar(3, gon);
lcd.createChar(4, goff);
pinMode(dirPin, OUTPUT);
lcd.setCursor(0, 0);
lcd.print("FilaBruh V2.4");
lcd.setCursor(0, 1);
lcd.print("BENO & R.P.3D");
delay (6000);
lcd.clear();
thermistor1 = new NTC_Thermistor(
SENSOR1_PIN,
REFERENCE_RESISTANCE,
NOMINAL_RESISTANCE,
NOMINAL_TEMPERATURE,
B_VALUE,
1,
0
);
thermistor2 = new NTC_Thermistor(
SENSOR2_PIN,
REFERENCE_RESISTANCE,
NOMINAL_RESISTANCE,
NOMINAL_TEMPERATURE,
B_VALUE,
1,
0
);
thermistor3 = new NTC_Thermistor(
SENSOR3_PIN,
REFERENCE_RESISTANCE,
NOMINAL_RESISTANCE,
NOMINAL_TEMPERATURE,
B_VALUE,
1,
0
);
lastLcdUpdate = millis();
}
void loop()
{
last_key = keypad.get_last_key();
key = keypad.read_key();
if (key != last_key) {
switch (key) {
case KEY_RIGHT:
nhitrost = (nhitrost + 10);
if (nhitrost >= 1210) nhitrost = 20;
mot1.setSpeed(nhitrost);
break;
case KEY_LEFT:
nhitrost = (nhitrost - 10);
if (nhitrost < 20) nhitrost = 20;
mot1.setSpeed(nhitrost);
break;
case KEY_UP:
ntemp = (ntemp + 1);
if (ntemp >= 260) ntemp = 260;
break;
case KEY_DOWN:
ntemp = (ntemp - 1);
if (ntemp < 0) ntemp = 0;
break;
case KEY_SELECT:
smer = smer == 1 ? 0 : 1;
break;
case KEY_NONE:
default:
break;
}
senzor();
updateLCD();
}
if (millis() - lastSenzorUpdate > 1000)
{
senzor();
}
if (millis() - lastLcdUpdate > 1000)
{
updateLCD();
}
mot1.runSpeed();
}
void senzor()
{
lastSenzorUpdate = millis();
// Serial.print ("senzor ");
//Serial.println (lastSenzorUpdate);
const double celsius1 = thermistor1->readCelsius();
const double celsius2 = thermistor2->readCelsius();
const double celsius3 = thermistor3->readCelsius();;
temp1 = ((celsius1 + celsius2 + celsius3) / 3);
}
void updateLCD()
{
lastLcdUpdate = millis();
lcd.clear();
lcd.setCursor (0, 0);
lcd.print ("nT=");
lcd.setCursor (3, 0);
lcd.print (ntemp, 0);
lcd.setCursor(0, 1);
lcd.print ("nH=");
lcd.print (nhitrost);
lcd.setCursor(14, 1);
lcd.print ("S");
lcd.setCursor(7, 0);
lcd.print ("Tg=");
lcd.setCursor(10, 0);
lcd.print (temp1, 0);
lcd.setCursor(14, 0);
lcd.print ("G");
if (smer == 0) {
lcd.setCursor(15, 1);
lcd.write (1);
digitalWrite(dirPin, HIGH);
}
if (smer == 1) {
lcd.setCursor(15, 1);
lcd.write (2);
digitalWrite(dirPin, LOW);
}
if (ntemp <= (temp1 + 2 )) {
lcd.setCursor(15, 0);
lcd.write (4);
digitalWrite(ssr, LOW);
}
if ((ntemp - 2) >= temp1) {
lcd.setCursor(15, 0);
lcd.write (3);
digitalWrite(ssr, HIGH);
}
}
Any suggestions, please?