Hello i have a multiple plants watering robot with some sensors but the only problem is that the program is kinda slow so i just wanna know if i can optimise it.I am new to arduino so i dont know exactly what i can improve and what i cant so i wanted to put this question so i will not ruin my program.
Heres the program:
#include <Adafruit_NeoPixel.h>
#include <LcdProgressBar.h>
#include "LiquidCrystal.h"
#include <avr/power.h>
#include <dht.h>
dht DHT;
byte lcdNumCols = 16;
#define DHT11_PIN 2
int trans = 13;
int buzzerPin = 3;
int flame = 12;
int FLAME = HIGH;
int PIN = 6;
int NUMPIXELS = 8;
int vbr = 0;
int rel = 11;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
LcdProgressBar lpg(&lcd, 1, lcdNumCols);
unsigned long duration = 4000; // 2000 milliseconds, 2 seconds
unsigned long startedMillis = 0;
void setup() {
Serial.begin(9600);
lcd.begin(2, lcdNumCols);
lcd.setCursor(0, 0);
lcd.print("Welcome!");
delay(100);
initLpg();
pinMode(buzzerPin, OUTPUT);
pinMode(vbr, INPUT);
pinMode(flame, INPUT);
pinMode(trans, INPUT);
pinMode(rel, OUTPUT);
digitalWrite(rel, HIGH);
pixels.begin();
pixels.setBrightness(50);
}
void initLpg() { //sectiunea loading screen
startedMillis = millis();
lpg.setMinValue(startedMillis);
lpg.setMaxValue(startedMillis + duration);
lpg.draw(startedMillis);
}
int nr = 40, umed;
void loop() {
digitalWrite(buzzerPin, HIGH);
digitalWrite(rel, HIGH);
if (nr > 0) {
while (nr > 0) {
unsigned long currentMillis = millis();
lpg.draw(currentMillis);
delay(100);
nr--;
}
}
umed = analogRead(A1);
int umedsh = 800 - umed;
Serial.println(umedsh);
if (umedsh < 450 && digitalRead(trans) == HIGH) {
digitalWrite(rel, LOW);
delay(2000);
digitalWrite(rel, HIGH);
}
//sectiunea senzor temp si umiditate
int chk = DHT.read11(DHT11_PIN);
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(DHT.temperature);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(DHT.humidity);
lcd.print("%");
//sectiunea senzor flacara
FLAME = digitalRead(flame);
pixels.clear();
if (FLAME == LOW) {
digitalWrite(buzzerPin, LOW);
pixels.setPixelColor(0, pixels.Color(255, 0, 0));
pixels.setPixelColor(1, pixels.Color(255, 0, 0));
pixels.setPixelColor(2, pixels.Color(255, 0, 0));
pixels.setPixelColor(3, pixels.Color(255, 0, 0));
pixels.setPixelColor(4, pixels.Color(255, 0, 0));
pixels.setPixelColor(5, pixels.Color(255, 0, 0));
pixels.setPixelColor(6, pixels.Color(255, 0, 0));
pixels.setPixelColor(7, pixels.Color(255, 0, 0));
//pixels.show();
} else {
digitalWrite(buzzerPin, HIGH);
pixels.setPixelColor(0, pixels.Color(0, 255, 0));
pixels.setPixelColor(1, pixels.Color(0, 255, 0));
pixels.setPixelColor(2, pixels.Color(0, 255, 0));
pixels.setPixelColor(3, pixels.Color(0, 255, 0));
pixels.setPixelColor(4, pixels.Color(0, 255, 0));
pixels.setPixelColor(5, pixels.Color(0, 255, 0));
pixels.setPixelColor(6, pixels.Color(0, 255, 0));
pixels.setPixelColor(7, pixels.Color(0, 255, 0));
}
pixels.show();
//sectiunea senzor vibratie
long VBR = pulseIn(vbr, HIGH);
if (digitalRead(vbr) == HIGH && digitalRead(trans) == HIGH) {
//digitalWrite(buzzerPin,LOW);
pixels.setPixelColor(0, pixels.Color(0, 0, 255));
pixels.setPixelColor(1, pixels.Color(0, 0, 255));
pixels.setPixelColor(2, pixels.Color(0, 0, 255));
pixels.setPixelColor(3, pixels.Color(0, 0, 255));
pixels.setPixelColor(4, pixels.Color(0, 0, 255));
pixels.setPixelColor(5, pixels.Color(0, 0, 255));
pixels.setPixelColor(6, pixels.Color(0, 0, 255));
pixels.setPixelColor(7, pixels.Color(0, 0, 255));
pixels.show();
delay(2000);
} else {
digitalWrite(buzzerPin, HIGH);
pixels.setPixelColor(0, pixels.Color(0, 255, 0));
pixels.setPixelColor(1, pixels.Color(0, 255, 0));
pixels.setPixelColor(2, pixels.Color(0, 255, 0));
pixels.setPixelColor(3, pixels.Color(0, 255, 0));
pixels.setPixelColor(4, pixels.Color(0, 255, 0));
pixels.setPixelColor(5, pixels.Color(0, 255, 0));
pixels.setPixelColor(6, pixels.Color(0, 255, 0));
pixels.setPixelColor(7, pixels.Color(0, 255, 0));
}
digitalWrite(buzzerPin, HIGH);
pixels.show();
}