#include <LiquidCrystal.h>
#include <Servo.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))
Servo servo;
int vysledok;
void setup() {
// put your setup code here, to run once:
lcd.begin(16,2);
SET1(ADCSRA,ADEN); // zapnutie ADC
SET0(ADCSRA,ADATE); // spúšťanie príkazom
SET1(ADCSRA,ADIE); // negenerovanie prerušenia
SET1(ADCSRA,ADPS2); // voľba preddeličky 128
SET1(ADCSRA,ADPS1);
SET1(ADCSRA,ADPS0);
SET1(ADMUX,ADLAR); // zarovnanie nahor
SET0(ADMUX,MUX0); // voľba kanála ADC0
SET0(ADMUX,MUX1);
SET0(ADMUX,MUX2);
SET0(ADMUX,MUX3);
SET1(SREG,7); // globálne povolenie prerušenia
servo.attach(7);
servo.write(0);
}
void loop() {
SET1(ADCSRA,ADSC); // začatie konverzie
// while( TEST(ADCSRA,ADIF)==0 ); // testovanie dokončenia
// vysledok = ADCH; // načítanie dolného registra
// put your main code here, to run repeatedly:
int percenta = map(vysledok,0,255,0,100);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(vysledok);
lcd.setCursor(0,1);
lcd.print(percenta);
lcd.print("%");
delay(10);
}
ISR(ADC_vect)
{
vysledok = ADCH; // načítanie dolného registra
int servoRotacia = map(vysledok,0,255,0,180);
servo.write(servoRotacia);
}