#include <Arduino.h>
enum buton{durdur,baslat,hiz_artir,hiz_azalt,toplam_buton};
const uint8_t butonlar [toplam_buton] = {5,4,3,2}; //buton pinleri
enum led{bir,iki,uc,dort,toplam_led};
const uint8_t ledler[toplam_led] = {6,7,8,12}; //led pinleri
enum motor{MotorE,MotorR,MotorL,motor_toplam};
const uint8_t motorlar[motor_toplam] = {10,11,9}; // motor pinleri
enum durumlar{kademe_1,kademe_2,kademe_3,kademe_4,duruyor};
const uint8_t durum_sureleri[5] = {5,10,15,20,0}; //dk cinsinden süreler
uint8_t durum_indexi = duruyor;
const int calisma_suresi = 500; //ms cinsinden
const int durma_suresi = 300; //ms cinsinden
int hiz =50;
unsigned long hareket_gecikmesi = 0;
unsigned long hareket_zaman_sayaci = 0;
unsigned long simdiki_zaman_sayaci = 0;
void motor_dur(),motor_baslat(),hiz_artirma(),hiz_azaltma(),led_yakma(uint8_t); //Gereken fonksiyonlar
void setup() {
for(uint8_t i=0;i<toplam_led;i++)
pinMode(ledler[i],OUTPUT);
led_yakma(4); //Hepsi sönük
for(uint8_t j=0;j<toplam_buton;j++)
pinMode(butonlar[j],INPUT_PULLUP);
for (uint8_t k=0;k<motor_toplam;k++)
pinMode(motorlar[k],OUTPUT);
}
void loop() {
simdiki_zaman_sayaci = millis();
if(!digitalRead(butonlar[durdur])){
delay(150);
while(!digitalRead(butonlar[durdur]));
motor_dur();
hareket_zaman_sayaci = 0; //motor dursun
}
if(!digitalRead(butonlar[hiz_artir])){
delay(250);
while(!digitalRead(butonlar[hiz_artir]));
hiz_artirma();
}
if(!digitalRead(butonlar[hiz_azalt])){
delay(250);
while(!digitalRead(butonlar[hiz_azalt]));
hiz_azaltma();
}
if(!digitalRead(butonlar[baslat])){
delay(250);
while(!digitalRead(butonlar[baslat]));
durum_indexi++;
hareket_gecikmesi = durum_sureleri[durum_indexi%5];
hareket_zaman_sayaci = simdiki_zaman_sayaci + (hareket_gecikmesi *60*60); //dk'yı ms'ye çevirdi
led_yakma(durum_indexi%5);
}
if(simdiki_zaman_sayaci >= hareket_zaman_sayaci){
motor_dur();
led_yakma(4); //ledler sönsün
durum_indexi = duruyor;
hareket_gecikmesi = durum_sureleri[durum_indexi];
hareket_zaman_sayaci = 0;
}
else{
if(((hareket_zaman_sayaci-simdiki_zaman_sayaci)%(calisma_suresi+durma_suresi))< calisma_suresi){
motor_baslat();
}
else {
motor_dur();
}
}
}
void motor_dur(){
digitalWrite(motorlar[MotorR], LOW);
digitalWrite(motorlar[MotorL], LOW);
analogWrite(motorlar[MotorE], 0);
}
void motor_baslat(){
digitalWrite(motorlar[MotorR], HIGH);
digitalWrite(motorlar[MotorL], LOW);
analogWrite(motorlar[MotorE], hiz);
}
void hiz_artirma(){
hiz = hiz+25;
delay(100);
if(hiz>=150)
{
hiz=150;
}
Serial.println(hiz);
}
void hiz_azaltma(){
hiz=hiz-25;
delay(100);
if(hiz<=50)
hiz=50;
Serial.println(hiz);
}
void led_yakma(uint8_t ln){
for (size_t i = 0; i < toplam_led; i++)
{
digitalWrite(ledler[i],LOW);
}
if(ln<toplam_led)
digitalWrite(ledler[ln],HIGH);
}