Wiec tak program na chwile obecna przelicza zadana dawkę nawozu na ruchy serwa wykorzystując przy tym wydajność pompy czyli ile podaje przy pojedynczym ruchu serwa.
Już od jakiegoś czasu próbuje rozwinąć program ale chyba chce za dużo i wychodzą mi jakieś bzdury , napisze co chce osiągnąć:
1. podłączenie 3(UP & DOWN & OK) przycisków które służyły by do zaprogramowania ilości płynu na każdej z pomp przy pierwszym uruchomieniu programu, a nie tak jak jest teraz ze wartości są wpisane na sztywno.
2. podłączenie układu RTC który wyświetlał by czas na ekranie LCD(16x4) i realizowanie programu np raz na 24h według RTC
Wiec zwracam się z prośbą o pomoc w powyższej sprawie pozdrawiam
obecny kod:
Kod: Zaznacz cały
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
float dawka1 = 3; // dawka 1 pompy w ml
float dawka2 = 2; // dawka 2 pompy w ml
float dawka3 = 2; // dawka 3 pompy w ml
float dawka4 = 4; // dawka 4 pompy w ml
float poj1 = 0.4; // ilosc pompowanej cieczy na 1 ruch (1 pompy w ml)
float poj2 = 0.5; // ilosc pompowanej cieczy na 1 ruch (2 pompy w ml)
float poj3 = 0.5; // ilosc pompowanej cieczy na 1 ruch (3 pompy w ml)
float poj4 = 0.4; // ilosc pompowanej cieczy na 1 ruch (4 pompy w ml)
int servo1_min = 0;
int servo1_max = 180;
int servo2_min = 0;
int servo2_max = 180;
int servo3_min = 0;
int servo3_max = 180;
int servo4_min = 0;
int servo4_max = 180;
int poz = 0;
int poz2 = 0;
int stat = 1;
int ruch = 0;
int ruchy = 0;
int ruchy2 = 0;
void setup()
{
servo1.attach(2);
servo2.attach(3);
servo3.attach(4);
servo4.attach(5);
servo1.write(servo1_min);
servo2.write(180-servo2_min);
servo3.write(servo3_min);
servo4.write(180-servo4_min);
delay(1000);
}
void loop()
{
// przeliczanie dawek na ilosc ruchow serw w pompach / wysyla dane do serwa
if (stat == 1) {ruchy = (dawka1 / poj1)+1;poz2 = map(poz,0,180,servo1_min,servo1_max) ;servo1.write(poz2);}
if (stat == 2) {ruchy = dawka2 / poj2;poz2 = map(poz,0,180,servo2_min,servo2_max) ;servo2.write(180-poz2);}
if (stat == 3) {ruchy = dawka3 / poj3;poz2 = map(poz,0,180,servo3_min,servo3_max) ;servo3.write(poz2);}
if (stat == 4) {ruchy = dawka4 / poj4;poz2 = map(poz,0,180,servo4_min,servo4_max) ;servo4.write(180-poz2);}
// zlicza ruchy pompy
if(poz == 0){ruchy2= ruchy2 + 1;}
// powoduje ruch serva
if (poz == 0 ) { ruch = 0;} else if (poz == 180) {ruch = 1;}
if (ruch == 0 & stat > 0) { poz = poz++;} else if (ruch == 1 & stat > 0) { poz = poz--;}
if (ruchy == ruchy2){stat=stat+1;ruchy2 = 0;}
if (stat == 5){stat = 0 ;}
delay(4);
}