volatile char *AD_MUX = (char*)0x7C;
volatile char *ADC_SRB = (char*)0x7B;
volatile char *ADC_SRA = (char*)0x7A;
volatile short *ADC_LH = (short*)0x78;
short prev;
char count = 1;
void setup() {
Serial.begin(9600);
init_timer();
init_port();
lcd_init();
}
void init_timer(){
volatile char *TCCR1_A = 0x80;
volatile char *TCCR1_B = 0x81;
volatile short *TCNT_1 = 0x84;
volatile short *OCR1_A = 0x88;
volatile char *TIMSK_1 = 0x6F;
*TCCR1_A = 0;
*TCCR1_B = 0x0C;
*TCNT_1 = 0;
*OCR1_A = 60000;
*TIMSK_1 = 0x03;
}
ISR(ADC_vect){
// Serial.println(*ADC_LH);
if(prev==1000 && *ADC_LH==0){
// incr_cursor();
write_lcd(" ");
count++;
// Serial.println(count,DEC);
// Serial.println("Right");
}else if(prev==1000 && *ADC_LH==1023){
decr_cursor();
write_lcd(" ");
// count--;
// Serial.println(count,DEC);
// Serial.println("left");
}
// if(count==0){
// second_line();
// write_lcd(' ');
// }
prev = *ADC_LH;
}
ISR(TIMER1_COMPA_vect){
adc_read();
}
void init_port(){
volatile char *ddr1 = (char*)0x107;
*ddr1 = 0x0FF;
volatile char *ddr2 = (char*)0x10A;
*ddr2 = 0x0F;
}
void control_lcd(char data){
volatile char *out = (char*)0x10B;
*out = data;
}
void data_lcd(char data){
volatile char *out = (char*)0x108;
*out = data;
}
void lcd_init(){
data_lcd(0x38);
enable();
data_lcd(0x80);
enable();
data_lcd(0x0F);
enable();
}
void write_lcd(char data){
data_lcd(data);
register_enable();
}
void register_enable(){
control_lcd(0x02);
delay1();
control_lcd(0x03);
delay1();
}
void enable(){
control_lcd(0x01);
delay1();
control_lcd(0x00);
delay1();
}
void adc_read(){
*AD_MUX = 0b11000000;
*ADC_SRA = 0b11011111;
}
void incr_cursor(){
data_lcd(0x38);
enable();
data_lcd(0x06);
enable();
// data_lcd(0x0F);
// enable();
}
void decr_cursor(){
data_lcd(0x38);
enable();
data_lcd(0x04);
enable();
// data_lcd(0x0F);
// enable();
}
void second_line(){
data_lcd(0x38);
enable();
data_lcd(0xC0);
enable();
}
void delay1(){
volatile long i;
for(i=0;i<1000;i++);
}
void loop() {
// put your main code here, to run repeatedly:
}