Hello everybody. I am trying to build a automatic pill dispenser but i have a problem. First i ask user for time and how often to take pill and i have pill box for seven pill. Then when it is time to take that pill motor starts to turn for that pill lcd display goes off and stays off forever. Here is my code:
#include <LiquidCrystal.h>
#include <Stepper.h>
#include <DS3231.h>
DS3231 rtc(SDA, SCL);
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
const int stepsPerRevolution = 512; // change this to fit the number of steps per revolution
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 13);
const int butonSayac = 2;
const int butonEnter = 7;
int saat = 0;
int dakika = 0;
int butonDurumuSayac = LOW;
int butonDurumuSayacDakika = LOW;
int butonDurumuSayacIlac = LOW;
int butonDurumuSayacGunde = LOW;
int butonEnterDurum = LOW;
int butonEnterDurumDakika = LOW;
int butonEnterDurumIlac = LOW;
int butonEnterDurumGunde = LOW;
int saatTemp;
int dakikaTemp;
int ilacNoTemp;
int ilacTemp;
int ilacGunde = 0;
int ilacNumber = 1;
int kutuBaslangic = 1;
int kutuSecilen;
int kutuAnlik;
int i;
int kutuArray[7][4];
int ilacZamanArray[7][9];
String x;
int a,b,c;
void setup(){
pinMode(butonSayac, INPUT);
pinMode(butonEnter, INPUT);
Serial.begin(9600);
rtc.begin();
lcd.begin(16,2);
myStepper.setSpeed(60);
// The following lines can be uncommented to set the date and time
rtc.setDOW(THURSDAY); // Set Day-of-Week to SUNDAY
rtc.setTime(00, 22, 0); // Set the time to 12:00:00 (24hr format)
rtc.setDate(10, 1, 2019); // Set the date to January 1st, 2014
for(i=0;i<7;i++){
lcd.clear();
lcd.setCursor(0,0);
lcd.print(i+1);
lcd.print(".kutu: ");
lcd.setCursor(0,1);
lcd.print("Saat: ");
lcd.print(saat);
while(butonEnterDurum == LOW){
butonDurumuSayac = digitalRead(butonSayac);
if(butonDurumuSayac == HIGH){
delay(10);
saat++;
if(saat > 23){
saat = 0;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print(i+1);
lcd.print(".kutu: ");
lcd.setCursor(0,1);
lcd.print("Saat: ");
lcd.print(saat);
while(butonDurumuSayac == HIGH){
butonDurumuSayac = digitalRead(butonSayac);
}
delay(10);
}
butonEnterDurum = digitalRead(butonEnter);
delay(10);
}
while(butonEnterDurum == HIGH){
butonEnterDurum = digitalRead(butonEnter);
}
saatTemp = saat;
butonDurumuSayac = LOW;
kutuArray[i][0] = saatTemp;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Dakika: ");
lcd.print(dakika);
while(butonEnterDurumDakika == LOW){
butonDurumuSayacDakika = digitalRead(butonSayac);
if(butonDurumuSayacDakika == HIGH){
delay(10);
dakika++;
if(dakika>59){
dakika = 0;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Dakika: ");
lcd.print(dakika);
while(butonDurumuSayacDakika == HIGH){
butonDurumuSayacDakika = digitalRead(butonSayac);
}
delay(10);
}
butonEnterDurumDakika = digitalRead(butonEnter);
delay(10);
}
while(butonEnterDurumDakika == HIGH){
butonEnterDurumDakika = digitalRead(butonEnter);
////break;
}
dakikaTemp = dakika;
butonDurumuSayacDakika = LOW;
kutuArray[i][1] = dakikaTemp;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gunde kac adet:");
lcd.print(ilacGunde);
while(butonEnterDurumGunde == LOW){
butonDurumuSayacGunde = digitalRead(butonSayac);
if(butonDurumuSayacGunde == HIGH){
delay(10);
ilacGunde++;
if(ilacGunde>8){
ilacGunde = 0;
}
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Gunde kac adet:");
lcd.print(ilacGunde);
while(butonDurumuSayacGunde == HIGH){
butonDurumuSayacGunde = digitalRead(butonSayac);
}
delay(10);
}
butonEnterDurumGunde = digitalRead(butonEnter);
delay(10);
}
while(butonEnterDurumGunde == HIGH){
butonEnterDurumGunde = digitalRead(butonEnter);
//break;
}
ilacTemp = ilacGunde;
butonDurumuSayacGunde = LOW;
kutuArray[i][2] = ilacTemp;
kutuArray[i][3] = i+1;
}
delay(1000);
}
void loop(){
long nowTime = millis();
saatGuncel();
alarmCheck();
}
void alarmSet(){
for(int k=0; k<7; k++){
if(kutuArray[k][2]>0){
for(int v=0; v<kutuArray[k][2]; v++){
ilacZamanArray[k][v] = kutuArray[k][0] + v*(24/kutuArray[k][2]);
if(ilacZamanArray[k][v]>23){
ilacZamanArray[k][v]-=24;
}
}
}
ilacZamanArray[k][8] = (k+1);
}
}
void alarmCheck(){
for(int j=0; j<7; j++){
for(int z=0; z<8; z++){
//for(int y=0; y<ilacZamanArray[j][z]; y++){
if(ilacZamanArray[j][z]==a && kutuArray[j][1]==b && c==0){
motor(j+1);
}
//}
}
}
}
int motor(int m){ //for stepper
kutuSecilen = m;
kutuAnlik = kutuSecilen - kutuBaslangic;
if(kutuAnlik<0){
kutuAnlik = kutuAnlik + 7;
}
for(int l=0; l<kutuAnlik; l++){
for(int r=0; r<292; r++){
myStepper.step(1);
}
}
kutuBaslangic = kutuAnlik;
}
void saatGuncel(){ //for time
lcd.clear();
lcd.print("Date: ");
lcd.print(rtc.getDateStr());
lcd.setCursor(0,1);
lcd.print("Time: ");
x = rtc.getTimeStr();
a=rtc.getSaat(); //Get current hour
b=rtc.getDakika(); //Get current minute
c=rtc.getSaniye(); //Get current second
lcd.print(x);
//lcd.print(b);
lcd.setCursor(15,1);
lcd.print(" ");
// Wait one second before repeating :)
delay (1000);
}