#include <LiquidCrystal.h>
LiquidCrystal lcd(13,12,11,10,9,8);
#define SET0(REG,BIT) REG &= ~(1<<BIT)
#define SET1(REG,BIT) REG |= (1<<BIT)
#define TEST(REG,BIT) (REG&(1<<BIT))
bool test1 = true;
bool test2 = true;
void setup()
{
lcd.begin(16,2);
Serial.begin(9600);
SET0(DDRD,2);
SET1(PORTD,2);
SET0(DDRD,3);
SET1(PORTD,3);
DDRC |= 0b00111111;
SET1(ADCSRA,ADEN); // zapnutie ADC
SET1(ADCSRA,ADPS2); // voľba preddeličky 128
SET1(ADCSRA,ADPS1);
SET1(ADCSRA,ADPS0);
}
void loop()
{
if( TEST(PIND,2) == 0 && test1 == false)
{
int pocetKrokov;
pocetKrokov = 0;
SET0(ADMUX,MUX0); // voľba kanála ADC0
SET0(ADMUX,MUX1);
SET0(ADMUX,MUX2);
SET0(ADMUX,MUX3);
SET1(ADCSRA,ADSC); // začatie konverzie
while(TEST(ADCSRA,ADIF)==0); // testovanie dokončenia
int vysledok = ADCL; // načítanie dolného registra
vysledok = vysledok | (ADCH<<8); // pripočítanie horného
int nova = map(vysledok,0,1023,0,200);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print(nova);
// for(int i=0;i<nova;i++)
// {
// steps(1);
// }
while (pocetKrokov < nova)
{
pocetKrokov++;
steps(1);
}
test1 = true;
}
else if( TEST(PIND,3) == 0 && test2 == false)
{
int pocetKrokov;
pocetKrokov = 0;
SET1(ADMUX,MUX0); // voľba kanála ADC1
SET0(ADMUX,MUX1);
SET0(ADMUX,MUX2);
SET0(ADMUX,MUX3);
SET1(ADCSRA,ADSC); // začatie konverzie
while(TEST(ADCSRA,ADIF)==0); // testovanie dokončenia
int vysledok = ADCL; // načítanie dolného registra
vysledok = vysledok | (ADCH<<8); // pripočítanie horného
SET1(ADCSRA,ADIF);
int nova = map(vysledok,0,1023,0,10);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(nova);
// for(int i=0;i<nova;i++)
// {
// steps(2);
// }
while (pocetKrokov < nova)
{
pocetKrokov++;
steps(2);
}
test2 = true;
Serial.println(nova);
}
else if(TEST(PIND,2) != 0 && test1 || TEST(PIND,3) != 0 && test2)
{
test1 = false;
test2 = false;
}
}
void steps (int krok)
{
if (krok == 1)
{
SET1(PORTC,2);
SET1(PORTC,3);
delay(50);
SET0(PORTC,3);
// PORTD |= 1<<6;
// PORTD |= 1<<7;
// delay(50);
// PORTD &= ~(1<<7);
}
else if (krok == 2)
{
PORTC |= 1<<4;
PORTC |= 1<<5;
delay(100);
PORTC &= ~(1<<5);
}
}