Hi,
I am currently working on a small project. I have a Stepper Motor, push button, A4988 driver for motor, MOSFET module, potentiometer, DS18B20 sensor module, incremental rotary encoder and for controller Arduino UNO.
I am having an issue when I try to read temperature from DS18B20 it interrupts stepper motor for a fraction of a second. It is not such a big issue but I am wondering if can I fix it.
Thanks in Advance.
This is my code:
#include <Rotary.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress;
Rotary rotary = Rotary(2, 3);
int pushButton = 6;
int buttonState, speedVar, counter, startTime, endTime, x, delayInMillis;
int stepPin = 5;
int dirPin = 4;
int speedPin = A0;
int enablePin = 7;
int MOSFETpin = 8;
int MOSFETpin2 = 9;
int spMeja = 150;
int zgMeja = 250;
float razlika, temperature;
unsigned long lastTempRequest = 0;
void setup() {
// put your setup code here, to run once:
pinMode(pushButton, INPUT);
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(speedPin, INPUT);
pinMode(enablePin, OUTPUT);
pinMode(MOSFETpin, OUTPUT);
pinMode(MOSFETpin2, OUTPUT);
digitalWrite(enablePin, HIGH);
digitalWrite(dirPin,HIGH);
attachInterrupt(0, rotate, CHANGE);
attachInterrupt(1, rotate, CHANGE);
sensors.begin();
sensors.setResolution(0,9);
sensors.setWaitForConversion(false);
sensors.requestTemperatures();
delayInMillis = 5000;
lastTempRequest = millis();
Serial.begin(2000000);
}
void loop() {
if(digitalRead(pushButton) == 1){
counter = 0;
buttonState = 1;
digitalWrite(enablePin, LOW);
}
while (buttonState == 1){
if (millis() - lastTempRequest >= delayInMillis){
temperature = sensors.getTempCByIndex(0);
Serial.println(temperature, 1);
sensors.requestTemperatures();
lastTempRequest = millis();
}
for(x = 0; x < 200; x++) {
speedVar = map(analogRead(speedPin), 0, 1023, 700, 16000);
if (x == 0) {
startTime = millis();
}
digitalWrite(stepPin,HIGH);
delayMicroseconds(speedVar);
digitalWrite(stepPin,LOW);
delayMicroseconds(speedVar);
if (x == 199){
endTime = millis();
razlika = endTime - startTime;
float seconds = razlika / 1000;
float minutes = seconds / 60;
long int rpm = 1/minutes;
Serial.println(rpm);
}
}
}
}
void rotate() {
unsigned char result = rotary.process();
if (result == DIR_CW) {
counter++;
//Serial.println(counter);
} else if (result == DIR_CCW) {
counter--;
//Serial.println(counter);
}
if (counter > spMeja && counter < zgMeja) {
digitalWrite(MOSFETpin, HIGH);
//digitalWrite(MOSFETpin2, HIGH);
}
else {
digitalWrite(MOSFETpin, LOW);
//digitalWrite(MOSFETpin2, LOW);
}
if (counter == 600){
counter = 0;
}
}