Guys i rlly need help. I am working on this program and its about reading liquid level. I wanna have 3 sensor and everyone of them prints the level at which the liquid is and how long it takes that triggered the sensor and it all displays on LCD . With push button we turn off the system. Pls help me with this code cuz its not working.
#include <avr/io.h>
#include "AVR lib/AVR_lib.h"
#include <avr/interrupt.h>
#include <util/delay.h>
#include "LCD/lcd.h"
#include "timer/timer.h"
uint16_t sekunde=1;
ISR(TIMER0_OVF_vect){ // prekidna rutina za timer 1
TCNT1 = 0; // početna vrijednost registra
TOGGLE_PORT(PORTB,PB1);
}
ISR(INT0_vect) // prekidna rutina za INT0
{
// ako je brid rastuci
if( get_pin(PIND,PD2) == 1){
TCNT1 = 0; // t1 = 0
}
else // ako je brid padajuci
{
sekunde += TCNT1;
}
}
ISR(INT1_vect) // prekidna rutina za INT1
{
if (get_pin(PIND,PD3) == 1){
TCNT1 = 0; //
}
else // ako je brid padajuci
{
sekunde += TCNT1; //
}
}
ISR(INT2_vect) // prekidna rutina za INT2
{
if(get_pin(PINB,PB2) == 1){
TCNT1 = 0; //
}
else // ako je brid padajuci
{
sekunde += TCNT1; //
}
}
void inicijalizacija() {
lcd_init();
// oba brida generiraju prekid INT0
set_bit_reg(MCUCR,ISC00);
reset_bit_reg(MCUCR,ISC01);
set_bit_reg(GICR,INT0); // omogucanje vanjskog prekida INT0
// oba brida generiraju prekid INT1
set_bit_reg(MCUCR,ISC10);
reset_bit_reg(MCUCR,ISC11);
set_bit_reg(GICR,INT1); // omogucanje vanjskog prekida INT1
// rastuci brid generira prekid INT2 // TREBA TO PROMIJENITI
set_bit_reg(MCUCSR,ISC2);
set_bit_reg(GICR,INT2); // omogucanje vanjskog prekida INT2
//F_CPU/64
reset_bit_reg(TCCR1B,CS10);
set_bit_reg(TCCR1B,CS11);
output_port(DDRB,PB7); // pin PB7 postavljen kao izlazni(ledica)
output_port(DDRB,PB6); // pin PB6 postavljen kao izlazni(pocetni senzor)
output_port(DDRB,PB5); // pin PB5 postavljen kao izlazni(srednji senzor)
output_port(DDRB,PB4); // pin PB4 postavljen kao izlazni(zavrsni senzor)
input_port(DDRB,PB3); // PB3 postavljen kao ulazni (tipkalo)
input_port(DDRB,PB2); // PB1 postavljen kao ulazni (pocetni senzor)
input_port(DDRD,PD2); // PD2 postavljen kao ulazni (srednji senzor)
input_port(DDRD,PD3); // PD3 postavljen kao ulazni (zavrsni senzor)
set_port(PORTB,PB3,1); // ukljucivanje priteznog otpornika na PB3
set_port(PORTD,PD3,1); // ukljucivanje priteznog otpornika na PD3
set_port(PORTD,PD2,1); // ukljucivanje priteznog otpornika na PD2
set_port(PORTB,PB2,1); // ukljucivanje priteznog otpornika na PB2
sei(); // globalno omogucenje prekida
}
int main(void){
inicijalizacija();
while (1){
set_port(PORTB, PB4, 1); //postavljanje vrijednosti PB4 u 1
_delay_us(20); // trigger impuls
set_port(PORTB, PB4, 0);
_delay_ms(500);
set_port(PORTB, PB5, 1); //postavljanje vrijednosti PB5 u 1
_delay_us(20); // trigger impuls
set_port(PORTB, PB5, 0);
_delay_ms(500);
set_port(PORTB, PB6, 1); //postavljanje vrijednosti PB6 u 1
_delay_us(20); // trigger impuls
set_port(PORTB, PB6, 0);
_delay_ms(500);
lcd_clrscr();
lcd_home();
if (get_pin(PINB,PB3) == 0) { //uvjet za tipkalo
sekunde=0;
set_port(PORTB,PB7,0); //pocetno stanje ledice u 0
}
else{
if( get_pin(PINB,PB2) == 1){
lcd_print("razina 1:\n");
lcd_print("\n%u s",sekunde);
}else
if( get_pin(PIND,PD2) == 1){
lcd_print("razina 2:\n");
lcd_print("\n%u s",sekunde);
}else
if( get_pin(PIND,PD3) == 1){
lcd_print("razina 3:\n");
lcd_print("\n%u s",sekunde);
set_port(PORTB,PB7,1); //ukljuci led diodu
}
}
}
return 0;
}