#include <mega32.h> //Prijungti mk Atmega32 biblioteka
#asm
.equ __lcd_port=0x18 ;PORTB  // Inicializuoti porta B LCD  prijungimui
#endasm 
//#include "stdio.h"
//#include <pgmspace.h>
//assert.h - диагностика программ
//ctype.h - преобразование и проверка символов
#include <float.h> // - работа с вещественными данными
//limits.h - предельные значения целочисленных данных
//math.h - математические вычисления
//setjump.h - возможности нелокальных переходов
//stdarg.h - поддержка переменного числа параметров
//stddef.h - дополнительные определения
//stdio.h - средства ввода-вывода
//stdlib.h - функции общего назначения (работа с памятью)
//string.h 
//#include <float.h>
//#include <math.h>
//#include "stdint.h"
#include <math.h> 
#include <ULTRA.h>  //ultragarsas
#include <robot.h>      // neuroniniai tinklai
#include <speaker.h>
#include <gccdefi.h> //gcc eeprom-o kreipimosi perdarymas i codevision C++
#include <stdlib.h>  //
#include <lcd.h> //Prijungti LCD biblioteka
#include <delay.h>
#define ADC_VREF_TYPE 0x40   //    0x40
#define true 1   //  kartais c++ nesupranta
#define false 0   //  kartais c++ nesupranta
 //*******^^^^^^^^^^   Kintamieji   ****************************************
//char flash volatile  _text1[]={"labas ash essu robotas"};
//char flash volatile   _text2[]={"Meniu"};
bit ADC_complete;     //analogas-kodas keitiklio busena kai ADC_complete==1, skaitine reiksme gADC_result jau yra...
unsigned int gADC_result;      // analogas-kodas keitiklio reiksme      
unsigned char iii;     //skaitliukams 
unsigned char iiii;     //masyvo el.skaitliukas 
unsigned char jjjj;     //skaitliukams
//unsigned char jj;     //masyvo el.skaitliukas
unsigned char irdiodas;     //infraredo daviklio nr. irdiodas==0-PORTD.0=1dav. sv diodas, PORTD.1=2dav.., PORTD.2=3dav.., PORTD.3=4dav.. kartu su vieno variklio fazem
float tmpfl;
unsigned char txtfl[7];
float bat;    // baterijos lygio kintamasis, jei truks vietos pakeisti i unsidned int ir ftoa i itoa 
unsigned char LCDNUST;    //esama lcd pranesimo busena
unsigned char BUSENA;     //esama roboto darbo rezimo busena nusakantis kintamasis
unsigned int temp;     //siukslynas 16 bitu   
unsigned char mechdav;    
unsigned char ugdav;
unsigned char tmp;    //siukslynas 8 bitu
unsigned char dav;  // davikliu bendra reiksme IR+Ugarsas+Mech. dav
unsigned char irdav;    //infraredo darbinio rezimo busenos kint. (i kuria puse judeti)
unsigned char davsenas; // darbinio rezimo busenos kint., tipo histereze nuo daznu suveikimu
unsigned char irjautrumas;    //infraredo jautrumo kint.
unsigned char irskaitliukas;  //infraredo ciklu skaitliukas, tipo IR busena gali keistis tik po atitinkamo ciklu skaiciaus
bit irtrigeris;  //ar laikyti esama IR davikliu reiksme
bit davtrigeris;
unsigned int apkr;     //varikliu apkrovimo busenos kint.
unsigned char *txt;    //tekstinis kintamasis
unsigned char uzlaikymasf; // ~(100*3)us -variklio faziu  uzlaikymas
unsigned char uzlaikymas1; //   infraredo ir adc uzlaikymas
unsigned int uzlaikymas2; // ilgas uzlaikymas 1sek.
//unsigned char davnr;     // daviklio numeris:00000001- priekis, 00000010- kaire, 00000100- desine,  00001000-  galas
unsigned int delta;      // IR daviklio kintamasis, nusakantis atstuma iki objekto
unsigned int skaitliukas;  //laiko matavimo ir ciklu skaitliukas (6000 apie minute)
unsigned char skaitliukas1;       //laiko matavimo ir ciklu skaitliukas
unsigned char kl;        //nuspausto klaviso reiksme
bit PROGRAMAVIMAS;       //programavimo rezimas kai PROGRAMAVIMAS=1
bit PABEGIMAS;           //PABEGIMAS rezimas kai PABEGIMAS=1
bit KLAJOJIMAS;          //...=1
bit LAUKIMAS;            //...=1
bit SVIESA;
// ****************   LCD pranesimai **********************************
unsigned char *_str0="               ";
unsigned char *_str="Labas"; 
unsigned char *_str1="Pirmyn";
unsigned char *_str2="Kaire";
unsigned char *_str3="Desine";
unsigned char *_str4="Atgal";
unsigned char *_str5="Galas kaire";
unsigned char *_str6="Atgal desinen";
unsigned char *_str7="Atgal kairen";
unsigned char *_str8="Vietoj desinen";
unsigned char *_str9="Algoritmas 1";
unsigned char *_str10="STOP";
unsigned char *_str98="Baterija";
unsigned char *_str99="Didele apkrova";
unsigned char *_str00="Neaprasytas";
// ********************************  Frazes **********************************
/*
unsigned char eeprom *_txt1="dd~uuu`oooo`klk kk~eee~lll`iea";
unsigned char eeprom *_txt2="k`k~ooo nn~ooo`r,r,r`iy";        
unsigned char eeprom *_txt3="ll`aaa`b~aaa`sz";
unsigned char eeprom *_txt4="ss`ee~n~k~a";
unsigned char eeprom *_txt5="b`aa`ttt~ee`r,r,r`iy`ja";
unsigned char eeprom *_txt6="pppp~~yi`r,r,r~m`m~yyy`nnnn";
unsigned char eeprom *_txt7="kk~~aaa`iy`j~r,r,r~eeee`nnn";
unsigned char eeprom *_txt8="dd~~ee`&&&&`yi~n`n~eeee`nnn";
unsigned char eeprom *_txt9="aa~t`t`t~g`g~aaaa`lllll";
unsigned char eeprom *_txt10="nn~eee`aaa~pp~r,r,r`aaa`&&&`yy~t`t~aa`sz";
unsigned char eeprom *_txt11="nn~eee`aaa~pp~r,r,r`aaa`&&&`yy~t`t~aa`sz";
unsigned char eeprom *_txt12="aa~vv~aa~r,r,r`iy`ja";
unsigned char eeprom *_txt13="i`n~f~r,r`aa`r,r`ee`d~aa`ss";
unsigned char eeprom *_txt14="aa~vv~aa~r,r,r`iy`ja";
unsigned char eeprom *_txt15="m,m,m~e`ee`n`n`n~yj`uuu";
unsigned char eeprom *_txt17="k~l~aa`y~d~aaa v`y`ss`ooo g~eeaa`r,r`ooo";
unsigned char eeprom *_txt18="sz~t`t`t~ooo~pppp";
unsigned char eeprom *_txt19="p~r,r`oo`g`r,r`aa~m`m~aa`v~yi~m~aa`sz";

*/

// *************************   Ivykiu masyvas **********************************
unsigned char Duomsk[64];  //ivykiu masyvas(isimena skaitliukas reiksme), tipo roboto veiksmu atmintis
unsigned char Duomsk1[64];  //ivykiu masyvas(isimena skaitliukas1 reiksme), tipo roboto veiksmu atmintis
unsigned char Duombusena[64];  //ivykiu masyvas(isimena BUSENA reiksme), tipo roboto veiksmu atmintis

// **************  Paprogramiu aprasas  *********************************************
  void pirmyn();
  void atgal();
  void aplinkkairen ();
  void aplinkdesinen ();
  void Drezimas();         //darbo rezimo dekodavimas pagal davikliu reiksmes
  void Displejus();       //LCD teksto isvedimas
  void Baterija();        //Baterijos itampos reiksmes gavimas
  void Apkrova();        //varikliu apkrovos reiksmes gavimas
  void IRdavnust();     //  infrared davikliu inicializacija
  void UGdaviklis();    // ultragarsiniodaviklio apklausa 
  void poll_sensor();  // infrared davikliu apklausa 
  void garsas();      //pyptelejimas
  void garsas1();     //pyptelejimas
  void garsas2();       //pyptelejimas
  void klini();         // klaviaturos inicializavimas
  void meniu1();          // Parametru parodymas
  void meniu();          // programavimas
  void klava();          //Klaviaturos apklausa
  void delay_x(char);      //kintamas uzlaikymas varikliams
  void lcd_cls(void);     //LCD trinimas, mano LCD kazkoks kreivas todel reikia
  void inicializacija(void);  // portu ir darbo rezimu inicializacija
//  void irfiltras(void);       //paprograme skirta infraredo davikliu darbo pagerinimui
//  void dekodavimas(void);
//  void reset(void);        //programinis resetas ir steko isvalymas
//int poll_sensor();      //IR dav. apklausimo f-ja  
//  int klava();          //klaviaturos apklausimo f-ja  
// ****************   Pagrindine programa   ***********************************
void main(void)
{inicializacija();

//************************************************************************************
//******************  Pagrindine programos dalis (begalinis ciklas)  *****************
//************************************************************************************
while (1)
{
 if (skaitliukas1>=255){skaitliukas1=0;}
    
if (skaitliukas>=6000){
    skaitliukas=0;
    Baterija();

    if (bat < 13){  // Baterijos lygiui didesnis prioritetas- rasome skaiciu stabdome tolesni vykdyma
      PORTC.6=0;
      PORTC.7=0;
      PORTD=0;
      BUSENA=98;
      PlayStr_f((char*)("ss`ee~n~k~a b`aa`ttt~ee`r,r,r`iy`ja") );      
     while (bat < 13){   // maziau nei 13V
     if (bat==0)break;  //Jei nera baterijos, tai derinimas ar tik USB maitinimas
            lcd_cls();
            Baterija();
            lcd_puts(_str98);
            delay_ms(1);
            lcd_gotoxy(1,1);                                        
            tmpfl = bat;
            ftoa(tmpfl,2,txtfl);
            lcd_puts(txtfl);
            lcd_puts(" V"); 
       delay_ms(uzlaikymas2);
       }

   irdav=63;   //jei jau baterija ikrauta- paleidziam variklius 63- pirmyn
  }
 LCDNUST=4;
 }

 if (BUSENA==99){  // Apkrovos didesnis prioritetas- rasome skaiciu stabdome tolesni vykdyma
   PORTC.6=0;  // isjungi varikli 1
    PORTC.7=0;  //isjungi varikli 2    // 
    tmp=BUSENA;
    BUSENA=99;
    Displejus();
  PlayStr_f((char*)("aa~p~~k~r,r,r~ooo`v~aa") );
   delay_ms(uzlaikymas2);
    //BUSENA=tmp;
     //if (BUSENA==2)irdav=60 ; //jei buvo pirmyn tada -atgal
     //if (BUSENA==4)irdav=63; //jei buvo atgal tada -pirmyn
     irdav=59; // atgal kairen. Jei 55, tai atgal desinen. Dar reiks darasyti
     }   
 
    if (LCDNUST!=BUSENA){ // ar keisti displejaus parodyma ir registruoti i masyva busenos pasikeitima 
        Displejus();        // keiciam displejaus parodyma pagal busena.t.y. iejimu reiksmes
        if (iiii==64){ iiii=0;}        // ar nevirsyjo duomenu skaitliukas savo reiksme, jei pradedam pildyt masyva naujai
        Duomsk[iiii]=skaitliukas;  //
        Duomsk1[iiii]=skaitliukas1;//
        Duombusena[iiii]=BUSENA;    //
        iiii=iiii+1;}
 // ************ Ar klavisas nuspaustas  ***************************
    if (PINC.4==0){
        PORTD=0;    //stabdyti varikliu fazes 
        PORTC.6=0;  //stabdyti varikli 1 
        PORTC.7=0;  //stabdyti varikli 2         
        meniu1(); }  //meniu -parametru parodymas
                   
Drezimas();          // dekoduojam darbo rezima pagal iejimo davikliu reiksmes
skaitliukas=skaitliukas+1;          //programos skaitliukas
skaitliukas1=skaitliukas1+1;;
  }// while Main begalinio ciklo pabaiga 
}  // Main pabaiga  

//*************** PAGRINDINES PROGRAMOS PABAIGA  ***********************

//*************************************************************************
//************************   Paprogrames   ********************************
//*************************************************************************
void pirmyn(void)
 {  irdiodas=0;    
      delay_x(uzlaikymasf-1); //pakeisti kompiliuojant i MEGA    
      Apkrova();
      PORTD=0b00110011;;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();
      irdiodas=irdiodas+1; 
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA    
      Apkrova();
      PORTD=0b01100110;;
      delay_x(uzlaikymasf);     //pakeisti kompiliuojant i MEGA
      poll_sensor();
      irdiodas=irdiodas-1;            //kontroliuojamas tik priekis
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA    
      Apkrova();
      PORTD=0b11001100;;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();         //kontroliuojamas tik priekis
      UGdaviklis();
      irdiodas=irdiodas+1;
      delay_x(uzlaikymasf);; //pakeisti kompiliuojant i MEGA    
      Apkrova();
      PORTD=0b10011001;;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();
     // irdav=irdav|0b11111100;   //experimentas kontroliuojamas tik priekis
 }

void atgal (void)
 { irdiodas=3;          
      delay_x(uzlaikymasf-1); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b11001100;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();  // irdav &  
      irdiodas=irdiodas-1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b01100110;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();  // irdav &  
      irdiodas=irdiodas+1;            //kontroliuojamas tik galas
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b00110011;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();  ////kontroliuojamas tik galas 
      irdiodas=irdiodas-1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b10011001;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();  // irdav &
     // irdav=irdav|0b11110011; //experimentas  kontroliuojamas tik galas 
} 

void aplinkkairen (void)
 {irdiodas=0;  
      delay_x(uzlaikymasf-1); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b11000011;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
      irdiodas=irdiodas+1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b01100110;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
      irdiodas=irdiodas+1;                 //
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b00111100;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();          //kontroliuojamas tik prieki
      irdiodas=irdiodas+1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b100110001;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
}

void aplinkdesinen (void)
 { irdiodas=3;         
      delay_x(uzlaikymasf-1); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b10011001;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
      irdiodas=irdiodas-1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b00111100;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
      irdiodas=irdiodas-1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b01100110;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
      irdiodas=irdiodas-1;
      delay_x(uzlaikymasf); //pakeisti kompiliuojant i MEGA
      Apkrova();
      PORTD=0b11000011;
      delay_x(uzlaikymasf);      //pakeisti kompiliuojant i MEGA
      poll_sensor();      
} 
//***** Darbo rezimo nustatymas, iejimu klavisu apklausimas ********** 
void Drezimas (void){   
mechdav = PINC; //porto C apklausa, kurie mechaniniai davikliai nuspausti         

//*************************  KLAJOJIMAS  ********************************************        
  if (KLAJOJIMAS == true){
    dav = (((davsenas&(irdav & mechdav)) & 0b00111111)|0b00110000); //sumuojam mechaninius ir IR davikliu reiksmes       
    irdav=255;    // paruosti reiksme FF

    //************************************************************************
             if (davtrigeris==false){                
                uzlaikymasf=100;                 
                davsenas=255; }                              
                      
             if (dav!=davsenas) {
                davtrigeris=true;
                davsenas=dav&davsenas;} 
                                                                    
            if (davtrigeris==true){
                uzlaikymasf=150; 
                irskaitliukas=irskaitliukas+1;
                if (irskaitliukas>50){
                irskaitliukas=0;
                davtrigeris=false;
                davsenas=255; }
                }                
                                                                       
        PORTC.6=1;  //leidimas 1 var
        PORTC.7=1;  //leidimas 2 var
        
       switch (dav){ 
        case 63: {BUSENA =1;   // Pirmyn 
        pirmyn();
        break;}
        
        case 51: {BUSENA =1;   // Pirmyn                 
        pirmyn(); 
                  if (irskaitliukas>30){
                    if (tmp<128){aplinkkairen();
                    BUSENA =7;
                    davsenas=58;} 
                    else  {aplinkdesinen ();
                    BUSENA =8;
                    davsenas=53;}}                            
        break;}
        
        case 62: {BUSENA =2;    // Kairen 
        atgal();
        atgal();
        PORTC.7=0;
        atgal();
        atgal();
        break;}
        
        case 61: {BUSENA =3;    // Desinen 
        atgal();
        atgal();
        PORTC.6=0;
        atgal();
        atgal();                       
        break;} 
        
        case 60: {BUSENA =4;     // Atgal
        atgal();
                if (irskaitliukas>30){
                    if (tmp<128){aplinkkairen();
                    BUSENA =7;
                    davsenas=58;} 
                    else  {aplinkdesinen ();
                    BUSENA =8;
                    davsenas=53;}}
                
        break;} 
        
        case 59: {BUSENA =5;    //  Atgal kairen                 
        pirmyn();         
        PORTC.7=0;
        pirmyn();
        pirmyn();
        break;}
        
        case 55: {BUSENA =6;    // Atgal desinen
        pirmyn(); 
        PORTC.6=0;
        pirmyn();
        pirmyn(); 
        break;}
        
        case 58: {BUSENA =7;    // Vietoj  kairen
        aplinkkairen();
        break;}
        
        case 53: {BUSENA =8;    // Vietoj desinen 
        aplinkdesinen ();
        break;}
         
        case 47: {BUSENA =9;       // Algoritmas 1
        break;} 
        
       // case 98: {BUSENA =98;     // Senka baterija
        //break;}
        //case 256: {BUSENA =1;     // Didele apkrova
        //break;}
        
        default: {// BUSENA =0;     //neaprasytas rezimas, tipo kas liko, tai del Miko
                //irskaitliukas=30;
                //davtrigeris=false;
                //davsenas=255;
                    tmp=rand();
                
                    if (tmp<128){aplinkkairen();
                    BUSENA =7;
                    davsenas=58;} 
                    else  {aplinkdesinen ();
                    BUSENA =8;
                    davsenas=53;}
            break;        
        }        
        }
        
   }   //KLAJOJIMAS  end
   
 //**********************************  PABEGIMAS  ********************************************                           
  if (PABEGIMAS == true){      
    dav = (((davsenas&(irdav & mechdav)) & 0b00111111)|0b00110000); //sumuojam mechaninius ir IR davikliu reiksmes       
    irdav=255; 

    //************************************************************************
             if (davtrigeris==false){                
                uzlaikymasf=120;                 
               davsenas=255;               
                }
                      
                if (dav!=davsenas) {
                davtrigeris=true;
               davsenas=dav&davsenas; 
               }
                                                     
            if (davtrigeris==true){
                uzlaikymasf=250; 
                irskaitliukas=irskaitliukas+1;
                if (irskaitliukas>60){
                irskaitliukas=0;
                davtrigeris=false;
                davsenas=255; }
                
                
                }
                                                       
        PORTC.6=1;  //leidimas 1 var
        PORTC.7=1;  //leidimas 2 var
        
       switch (dav){ 
        case 63: {BUSENA =1;   // Pirmyn 
        pirmyn();
        break;}
        
        case 51: {BUSENA =1;   // Pirmyn                 
        pirmyn();                            
        break;}
        
        case 62: {BUSENA =2;    // Kairen 
        atgal();
        PORTC.7=0;
        atgal();
        break;}
        
        case 61: {BUSENA =3;    // Desinen 
        atgal();
        PORTC.6=0;
        atgal();                       
        break;} 
        
        case 60: {BUSENA =4;     // Atgal
        atgal();
        break;} 
        
        case 59: {BUSENA =5;    //  Atgal kairen                 
        pirmyn();         
        PORTC.7=0;
        pirmyn();
        break;}
        
        case 55: {BUSENA =6;    // Atgal desinen
        pirmyn(); 
        PORTC.6=0;
        pirmyn(); 
        break;}
        
        case 58: {BUSENA =7;    // Vietoj  kairen
        aplinkkairen();
        break;}
        
        case 53: {BUSENA =8;    // Vietoj desinen 
        aplinkdesinen ();
        break;}
         
        case 47: {BUSENA =9;       // Algoritmas 1
        break;} 
        
       // case 98: {BUSENA =98;     // Senka baterija
        //break;}
        //case 256: {BUSENA =1;     // Didele apkrova
        //break;}
        
        default: {// BUSENA =0;     //neaprasytas rezimas, tipo kas liko tai
                //irskaitliukas=30;
                //davtrigeris=false;
                //davsenas=255;
            if (((dav^0b00001111)&0b00001111)==0)  //XOR 
                {BUSENA =7; 
                aplinkkairen();
                davsenas=58;
                //davtrigeris=true;
                break;} 
            if (((dav^0b00000011)&0b00001111)==0)  //XOR 
                {BUSENA =8; 
                aplinkdesinen ();
                davsenas=53;
                //davtrigeris=true;
                break;}       
            if (((dav^0b00001100)&0b00001111)==0)  //XOR 
                {BUSENA =7; 
                aplinkkairen();
                davsenas=58;
                //davtrigeris=true; 
                break;}
                BUSENA =8; 
                aplinkdesinen ();
                davsenas=53;
            break;        
        }        
        }       
   }//PABEGIMAS pab 
//*************************   SVIESA   ***********************************************    
  if (SVIESA == true){
      dav = (((davsenas&( mechdav)) & 0b00111111)|0b00110000); //sumuojam tik mechaninius be IR davikliu reiksmiu       
    //irdav=255;   //siuo atv nereikia
    //************************   Asizvalgom ************************************************
               if (skaitliukas1<=20){
                    tmp=rand();             
                    if (tmp<128){aplinkkairen();
                    BUSENA =7;
                    davsenas=58;} 
                    else  {aplinkdesinen ();
                    BUSENA =8;
                    davsenas=53;}
                    temp=(max(temp, delta)-20);
                     }
    
  
     //*****************************   IESKOM *******************************************
                if (skaitliukas1==21){

                   while (temp<delta)             
                    if (tmp>128){aplinkkairen();
                    } 
                    else  {aplinkdesinen ();
                    }
                     }
     
     
     //************************************************************************
             if (davtrigeris==false){                
                uzlaikymasf=120;                 
               davsenas=255;               
                }
                      
                if (dav!=davsenas) {
                davtrigeris=true;
               davsenas=dav&davsenas; 
               }
                                                     
            if (davtrigeris==true){
                uzlaikymasf=200; 
                irskaitliukas=irskaitliukas+1;
                if (irskaitliukas>60){
                irskaitliukas=0;
                davtrigeris=false;
                davsenas=255; }
                
                
                }
                                                       
        PORTC.6=1;  //leidimas 1 var
        PORTC.7=1;  //leidimas 2 var
        
       switch (dav){ 
        case 63: {BUSENA =1;   // Pirmyn 
        pirmyn();
        break;}
        
        case 51: {BUSENA =1;   // Pirmyn                 
        pirmyn();                            
        break;}
        
        case 62: {BUSENA =2;    // Kairen 
        atgal();
        PORTC.7=0;
        atgal();
        break;}
        
        case 61: {BUSENA =3;    // Desinen 
        atgal();
        PORTC.6=0;
        atgal();                       
        break;} 
        
        case 60: {BUSENA =4;     // Atgal
        atgal();
        break;} 
        
        case 59: {BUSENA =5;    //  Atgal kairen                 
        pirmyn();         
        PORTC.7=0;
        pirmyn();
        break;}
        
        case 55: {BUSENA =6;    // Atgal desinen
        pirmyn(); 
        PORTC.6=0;
        pirmyn(); 
        break;}
        
        case 58: {BUSENA =7;    // Vietoj  kairen
        aplinkkairen();
        break;}
        
        case 53: {BUSENA =8;    // Vietoj desinen 
        aplinkdesinen ();
        break;}
         
        case 47: {BUSENA =9;       // Algoritmas 1
        break;} 
        
       // case 98: {BUSENA =98;     // Senka baterija
        //break;}
        //case 256: {BUSENA =1;     // Didele apkrova
        //break;}
        
        default: {// BUSENA =0;     //neaprasytas rezimas, tipo kas liko tai
                //irskaitliukas=30;
                //davtrigeris=false;
                //davsenas=255;
            if (((dav^0b00001111)&0b00001111)==0)  //XOR 
                {BUSENA =7; 
                aplinkkairen();
                davsenas=58;
                //davtrigeris=true;
                break;} 
            if (((dav^0b00000011)&0b00001111)==0)  //XOR 
                {BUSENA =8; 
                aplinkdesinen ();
                davsenas=53;
                //davtrigeris=true;
                break;}       
            if (((dav^0b00001100)&0b00001111)==0)  //XOR 
                {BUSENA =7; 
                aplinkkairen();
                davsenas=58;
                //davtrigeris=true; 
                break;}
                BUSENA =8; 
                aplinkdesinen ();
                davsenas=53;
            break;        
        }        
        }
       
 }  //SVIESA pabaiga 
      
}  //Drezimas  pab
    //***************  Displejaus parodymo isrinkimas ******************
void Displejus (void)
{  
        PORTC.6=0; //stabdyti varikli 1 
        PORTC.7=0;  //stabdyti varikli 2
        lcd_cls();             
      switch (BUSENA)
       { 
       case 1: {lcd_puts(_str1);  // "Vaziuojam  pirmyn     " 
       PlayStr_f((char*)("pp~~y`r,r~m`m~yy`nn") );
       LCDNUST =1;
       break;}
       case 2: {lcd_puts(_str2);   // "Kairen          "
        LCDNUST =2;
        PlayStr_f((char*)("k~aa`y`j~rrr~eee" ) );
        break;}
       case 3: {lcd_puts(_str3);   // "Desinen         "
        LCDNUST =3;
        PlayStr_f((char*)("d~ee`&&&`yy~nn~eee" ) );
        break;}
        case 4: {lcd_puts(_str4);  // "Atgal           "
        LCDNUST =4;
        PlayStr_f((char*)("aa~t`t~g`g~aa`lll") );
        break;} 
       case 5: {lcd_puts(_str5);   //  "Atgal kairen    "
       LCDNUST =5;
       PlayStr_f((char*)("aa~t`t~g`g~aa`lll") );
        PlayStr_f((char*)("k~~aa`y`j~r,r~eeennn") );
       break;}
       case 6: {lcd_puts(_str6);   //  "Atgal desinen   "
        LCDNUST =6;
        PlayStr_f((char*)("aa~t`t~g`g~aa`lll") );
        PlayStr_f((char*)("d~~ee`&`&`&`y~n`n~eeennn") );        
        break;}
       case 7: {lcd_puts(_str7);   // "Vietoj  kairen  "
        LCDNUST =7;
        PlayStr_f((char*)("vv~yjeee~t`toooyj") );
        PlayStr_f((char*)("k~~aa`y`j~r,r~eeennn") );
        break;}
        case 8: {lcd_puts(_str8);  // "Vietoj desinen  "
        LCDNUST =8;
        PlayStr_f((char*)("vv~yjeee~t`toooyj") );
        PlayStr_f((char*)("d~~ee`&`&`&`y~n`n~eeennn") );
        break;} 
       case 9: {lcd_puts(_str9);   // "Algoritmas 1    "
       LCDNUST =9;
       break;}
       case 98: {lcd_puts(_str98);  // "Senka baterija  "      
       LCDNUST =98;              
       break;}
       case 99: {lcd_puts(_str99);  // "Didele apkrova  "
        LCDNUST =99;
        break;} 
       default: {
        lcd_puts(_str00); 
        PlayStr_f((char*)("n~ee`aa~p~r,r`aa`&&`y~t~aa`sz") );        
         break;}       
        }         
}
//*********************  Apkrova ******************************************
void Apkrova (void)
{ADMUX=(ADC_VREF_TYPE & 20) | 04; //perjungiam adc i PA4
 ADCSRA|=0x40; 
 delay_us(100);
while(ADC_complete!=1);
apkr=(gADC_result);// Apkrovos reiksme
ADC_complete=0;		//сбрасываем флаг
if(apkr > 1) BUSENA=99;
}
//*********************  Baterija ******************************************
void Baterija (void)
{ADMUX=(ADC_VREF_TYPE & 20)|05; //perjungiam adc i PA5
ADCSRA|=0x40;
while(ADC_complete!=1);
bat=(float)(gADC_result)/45;// baterjos
ADC_complete=0;		//сбрасываем флаг

}
//*********************  Ultragarsinis daviklis *********************************
void UGdaviklis (void)
{PORTB.3=0;
ADMUX=(ADC_VREF_TYPE & 20)|06; //perjungiam adc i PA6
ADCSRA|=0x40;
while(ADC_complete!=1){
for (tmp=1; tmp <= 20; tmp=tmp+1)  
        { 
// PORTC.5=1;   //uzkomentavau nes pjaunasi su mega8 INT0
//         delay_us(15);  //uzkomentavau nes pjaunasi su mega8 INT0
//         PORTC.5=0;  //uzkomentavau nes pjaunasi su mega8 INT0
 //           delay_us(15);  //uzkomentavau nes pjaunasi su mega8 INT0
        }        
  }
  ADC_complete=0; 
delta=gADC_result;
if (delta>200)  ugdav=0b00111110;   
}
//*********************  IR davikliu inicializavimas ******************************
void IRdavnust (void)
{
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 20;//// ADC Voltage Reference: AVCC pin
ADCSRA=0x8F;  //  //gale trys bitai:101 tai ADC_F=F/16 , 110 tai ADC_F=F/32 , 111 tai ADC_F=F/64(предделитель, ст бит - разрешение или запрешен  8B originale)
// Global enable interrupts
 #asm("sei")
}
//*********************  ADC pertraukimo aptarnavimas ****************************************** 
interrupt [ADC_INT] void adc_isr(void) //обработчик прерывания по завершению преобразования АЦП
{unsigned int adc_data;
adc_data=ADCW;
gADC_result=adc_data; //отсылаем считанное значение в глобальную переменную и устанавливаем флаг
ADC_complete=1;}
//*********************  IR davikliu apklausa ****************************************** 
void poll_sensor(void)  //
{ADMUX=(ADC_VREF_TYPE & 20)|irdiodas; //perjungiam i PAi-taji pagal variklio fazes k
if (SVIESA == false){
PORTB.3=1;            //leidimas sviesos diodams
delay_us(10);        //laukiam pakol nusistoves svietimas
ADCSRA|=0x40;         //paleisti adc
while(ADC_complete!=1); //ar adc pabaige
delta=gADC_result;
ADC_complete=0;		//numetam adc velevele

PORTB.3=0;		//isjungti IR LED
delay_us(5);     //laukiam pakol nusistoves ...
}
 else {delta=0;}
ADCSRA|=0x40;    //paleisti adc
while(ADC_complete!=1);  //ar adc pabaige
delta=abs(gADC_result-delta);//;   skirtumas  tarp apsviesto ir tamsaus IR led
ADC_complete=0;		//numetam adc velevele

if (delta>irjautrumas){
//****judejimo krypties priskyrimas nuo optiniu davikliu****
 if (irdiodas==0) irdav=irdav &  0b00111110;  //BUSENA=2; kombinacijuose visos kitos judejimo kryptys
 if (irdiodas==1) irdav=irdav &  0b00111101;  //BUSENA=3; kombinacijuose visos kitos judejimo kryptys
 if (irdiodas==2) irdav=irdav &  0b00111011;  // BUSENA=5; kombinacijuose visos kitos judejimo kryptys
 if (irdiodas==3) irdav=irdav &  0b00110111;  // BUSENA=6; kombinacijuose visos kitos judejimo kryptys 
 }
}
//*********************  Meniu1 parametru parodymas  ******************************************
void meniu1(void)  
{         
zym1:         lcd_cls();
         lcd_puts("MENIU");
         garsas();
         delay_ms(uzlaikymas2/2);
         PlayStr_f((char*)"mm~e`e`n`n~yj`uu");        
         delay_ms(uzlaikymas2/4);
        garsas1();
        while (PINC.4==0){
        } ; 
       delay_ms(100); 
       klava(); // Klaviaturos apklausa                       
switch (kl)
 {      case 106: {   // nuspaudus 1kl. parodo baterijos talpa
          PlayStr_f((char*)"b`aa`t`t~ee`r,r`iy`ja");
            while(1){
                     lcd_cls();
                    Baterija();
                    lcd_puts(_str98);
                    delay_ms(1);
                    lcd_gotoxy(1,1);                                        
                    tmpfl = bat;
                    ftoa(tmpfl,2,txtfl);
                    lcd_puts(txtfl);
                    lcd_puts(" v");
                    delay_ms(uzlaikymas2);                    
                    if (PINC.4==0)break;
                    garsas1();
                    }
                    break;} 
       case 101: {  irdiodas=0;  // nuspaudus 2kl. ir1
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss"); 
                while(1){
                    lcd_cls();
                    lcd_puts("IR1=");
                    PORTD=0b00000001;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    if (PINC.4==0)break;
                    garsas1();}
                    break;}
       case 98: {    irdiodas=1;   // nuspaudus 3kl. ir2
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");       
                while(1){                     
                    lcd_cls();
                    lcd_puts("IR2=");
                    PORTD=0b00000010;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);   
                    delay_ms(uzlaikymas2);
                    if (PINC.4==0)break;
                    garsas1();}
                    break;}
       case 130: {   irdiodas=2;     // nuspaudus 4kl. ir3
                     PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");
                 while(1){ 
                    lcd_cls();
                    lcd_puts("IR3=");
                    PORTD=0b00000100;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    if (PINC.4==0)break;
                    garsas1();}  
                    break;}
        case 86: {  irdiodas=3;         // nuspaudus 5kl. ir4
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");
                while(1){
                    lcd_cls();
                    lcd_puts("IR4=");
                    PORTD=0b00001000;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    if (PINC.4==0)break;
                    garsas1();}
                    break;} 
       case 155: {  PlayStr_f((char*)"aa~p~~k~r,r~ooo`v~aa");// nuspaudus 6kl. apkrova
                while(1){ lcd_cls();
                    lcd_puts("Apkrova=");
                    PORTC.6=1; //paleisti varikli 1 
                    PORTC.7=1;  //paleisti  varikli 2 
                    pirmyn();
                    atgal();
                    PORTC.6=0; //stabdyti varikli 1 
                    PORTC.7=0;  //stabdyti varikli 2                                        
                    lcd_gotoxy(0,1);
                    itoa(apkr,txt);
                    lcd_puts(txt);
                    lcd_puts("mA");                    
                    delay_ms(uzlaikymas2);
                    if (PINC.4==0)break;
                    garsas1();}
                     break;}
       case 136:{ 
             while(1){       // nuspaudus 7kl. instrumentinis
             klini();
             if (LCDNUST!=BUSENA) Displejus();                                             
             if (PINC.4==0) break; // ************ Ar klavisas nuspaustas  ***************************
              Drezimas();                 
                     }
                break;}
       case 114:{                       // nuspaudus 8kl. ir1 be pasvietimo                    
                    irdiodas=0;
                    SVIESA=1;
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss"); 
                while(1){
                    lcd_cls();
                    lcd_puts("IR1=");
                    PORTD=0b00000001;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    SVIESA=0;
                    if (PINC.4==0)break;
                    garsas1();}  
                break;}
        case 52: {                      // nuspaudus 9kl. ir2 be pasvietimo           
                    SVIESA=1;                       
                    irdiodas=1;  
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");       
                while(1){                     
                    lcd_cls();
                    lcd_puts("IR2=");
                    PORTD=0b00000010;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);   
                    delay_ms(uzlaikymas2);
                    SVIESA=0;
                    if (PINC.4==0)break;
                    garsas1();}
            break;} 
       case 61:{             // nuspaudus 10kl. ir3 be pasvietimo
                    SVIESA=1;
                    irdiodas=2;     
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");
                 while(1){ 
                    lcd_cls();
                    lcd_puts("IR3=");
                    PORTD=0b00000100;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    SVIESA=0;
                    if (PINC.4==0)break;
                    garsas1();}
            break;}
       case 71:{              // nuspaudus 11kl. ir4 be pasvietimo
                    SVIESA=1;
                    irdiodas=3;    
                    PlayStr_f((char*)"i`n~f~r,r`aa`r,r`ee`d~aa`ss");
                 while(1){ 
                    lcd_cls();
                    lcd_puts("IR4=");
                    PORTD=0b00001000;
                    poll_sensor();
                    PORTD=0;
                    lcd_gotoxy(0,1);
                    itoa(delta,txt);
                    lcd_puts(txt);                    
                    delay_ms(uzlaikymas2);
                    SVIESA=0;
                    if (PINC.4==0)break;
                    garsas1();}                    
            break;}
       case 82: 
       {    while(1)
             {  lcd_cls();
               
                delay_ms(uzlaikymas2);
                if (PINC.4==0)break;
                garsas1();}
             break;}
       case 94: {
            while(1){
                 lcd_cls();
                 
                delay_ms(uzlaikymas2);
                if (PINC.4==0)break;
                garsas1();}
            break;}         
        case 107: {
            
                main(); // resetas

            break;} 
        case 121:{
                 lcd_cls(); 
                lcd_puts("PROG.Rez.");  // 
                PlayStr_f((char*)("p~r,r`oo`g`r,r`aa~m`m~aa`v~yi~m~aa`sz") );                               
                delay_ms(uzlaikymas2/4);
                garsas1();
                 meniu();  //meniu- parametru programavimas
                BUSENA=2; // nepamenu kodel, reiks issiaiskinti!!!!!!!!!!!!!!!!!
            break;} 
        default: {
                 lcd_cls();
                lcd_puts("Klaida");              
                PlayStr_f((char*)("k~l~aa`y~d~aaa") ); //
                delay_ms(uzlaikymas2/2);
               goto zym1;  
            break;
        }
         }         
garsas();
while (PINC.4==0){
delay_ms(200);
}
while (PINC.4==1);
delay_ms(200);
 while (PINC.4==0);
PlayStr_f((char*) "a`&&& r,r,r`ooo`b~ooo`t~a`sz");
//PlayStr_f((char*) *_txt4);
garsas();  
delay_ms(uzlaikymas2);
}
//*********************  PROGRAMAVIMO REZIMAS  ******************************************
void meniu(void)  // 
{PROGRAMAVIMAS=1;
LCDNUST=100;
     lcd_cls();
     lcd_puts("PROG.Nr."); 
while(PROGRAMAVIMAS==1)
{      klava();                 
switch (kl){                     // 1
       case 106: { 
            lcd_cls();
            lcd_puts("NEURO");  // 
            delay_ms(uzlaikymas2);
            PINB.3=1;
            PORTC.6=1;  //variklio 1 leidimas
            PORTC.7=1;   //variklio 2 leidimas                          
            main1();     //neuroniniu tinklu programa
            PINB.3=0;
            PORTC.6=0;  //variklio 1 draudimas
            PORTC.7=0;   //variklio 2 draudimas             
            garsas2();
            main();     // grizti i pagrindine programa
        break;} 
       case 101: {
                          
        while(kl!=121){          // 2
            lcd_cls();
            lcd_puts("IR=");  //    ir jautrumas
            lcd_gotoxy(4,0);
            itoa(irjautrumas,txt);
            lcd_puts(txt);
            delay_ms(uzlaikymas2/8);
            garsas2();        
            klava();            
            if (kl==71)irjautrumas=irjautrumas-1;
            if (kl==82)irjautrumas=irjautrumas+1;
            if (kl==94)irjautrumas=irjautrumas-10;
            if (kl==107)irjautrumas=irjautrumas+10;
            if (irjautrumas<=0) irjautrumas=1;
            if (irjautrumas>=254) irjautrumas=254;
            //if (kl==121) break;                         
            }
            delay_ms(uzlaikymas2/8);
       break;}
       case 98: {               // 3
        
        while(kl!=121){
            lcd_cls();
            lcd_puts("Gr=");            
            lcd_gotoxy(4,0);
            itoa(uzlaikymasf,txt);
            lcd_puts(txt);
            delay_ms(uzlaikymas2/8);
            garsas2();        
            klava();            
            if (kl==71)uzlaikymasf=uzlaikymasf-1;
            if (kl==82)uzlaikymasf=uzlaikymasf+1;
            if (kl==94)uzlaikymasf=uzlaikymasf-10;
            if (kl==107)uzlaikymasf=uzlaikymasf+10;            
            if (uzlaikymasf<=0) uzlaikymasf=1;
            if (uzlaikymasf>=254) uzlaikymasf=254;
            //if (kl==121) break;
         } // 
            delay_ms(uzlaikymas2/8);
            break;}
       case 130: {                   // 4
            lcd_cls();
            lcd_puts("Sviesa");   // 
            delay_ms(uzlaikymas2);
            PABEGIMAS=0;           //PABEGIMAS rezimas kai PABEGIMAS=1
            KLAJOJIMAS=0;          //...=1
            LAUKIMAS=0;            //...=1
            SVIESA=1;
            PROGRAMAVIMAS=0;      
        break;}
        case 86: {                     // 5
            lcd_cls();
            lcd_puts("Laukia");   // 
            delay_ms(uzlaikymas2);
            PABEGIMAS=0;           //PABEGIMAS rezimas kai PABEGIMAS=1
            KLAJOJIMAS=0;          //...=1
            LAUKIMAS=1;            //...=1
            SVIESA=0;
            PROGRAMAVIMAS=0;
            break;} 
       case 155: {                      // 6
       
            lcd_cls();
            lcd_puts("Klaidzioja");   // 
            delay_ms(uzlaikymas2);
            PABEGIMAS=0;           //PABEGIMAS rezimas kai PABEGIMAS=1
            KLAJOJIMAS=1;          //...=1
            LAUKIMAS=0;            //...=1
            SVIESA=0;
            PROGRAMAVIMAS=0;
          break;}
       case 136: {                    // 7
            lcd_cls();
            lcd_puts("Pabegimas");   // 
            delay_ms(uzlaikymas2);
            PABEGIMAS=1;           //PABEGIMAS rezimas kai PABEGIMAS=1
            KLAJOJIMAS=0;          //...=1
            LAUKIMAS=0;            //...=1
            SVIESA=0;
           PROGRAMAVIMAS=0;
        break;}
       case 114: {                    //  8
        lcd_cls();
       lcd_puts("nesugalvojau");   
       delay_ms(uzlaikymas2);
        PROGRAMAVIMAS=0;
        break;}
        case 52: {
         lcd_cls();
        lcd_puts("nesugalvojau");  // 
       delay_ms(uzlaikymas2);
         PROGRAMAVIMAS=0;
        break;} 
       case 61: {
        lcd_cls();
       lcd_puts("nesugalvojau");   // 
       delay_ms(uzlaikymas2);
       PROGRAMAVIMAS=0;
       break;}
       case 71: {
        lcd_cls();
       lcd_puts("nesugalvojau");  // 
       delay_ms(uzlaikymas2);
        PROGRAMAVIMAS=0;            
       break;}
       case 82: {
        lcd_cls();
       lcd_puts("nesugalvojau");  // 
       delay_ms(uzlaikymas2);
       PROGRAMAVIMAS=0;
        break;}
       case 81: {
         lcd_cls();      
       lcd_puts("nesugalvojau");  // 
       delay_ms(uzlaikymas2);
       PROGRAMAVIMAS=0;
        break;} 
        
        case 107: {
            lcd_cls();
            lcd_puts("UG daviklis");  // 
            delay_ms(uzlaikymas2);                          
            ULTRA();     //ultragarso programa
            PROGRAMAVIMAS=0;
            //main();     // grizti i pagrindine programa  
        
        break;} 
        case 121: {
         lcd_cls();
        lcd_puts("PROG. Pabaiga");
        delay_ms(uzlaikymas2);  // 
        PROGRAMAVIMAS=0;
        
        break;} 
        default: { 
        lcd_cls();
        lcd_puts("PROG.Nr.");
        }
       }
  garsas();
}


while (PINC.4==0){
delay_ms(200);
}
while (PINC.4==1);
delay_ms(200);
 while (PINC.4==0);
garsas();  

}
//*********************  Klaviaturos apklausa ******************************************
void klava(void)
{   klini(); 
    kl=16;
    LCDNUST=100;
//    lcd_gotoxy(0, 0);
while (PINC.4==1){};
  delay_ms(10);
  for (tmp=1; tmp <=19; tmp=tmp+1)  
    { PORTC.5=0;
    delay_us(10);
    PORTC.5=1;
    delay_us(10);
    PORTC.5=0;    
    if (PINC.4==0)  kl=kl+tmp;}    
      // lcd_gotoxy(0,0);
      //lcd_puts(_str0); //_str0 tai tuscias laukas   del codevision klaidos
      //lcd_clear();
      //itoa(kl,txt); // kAIP INSTRUMENTAS kl SKAICIUI ATRINKTI
      //lcd_puts(txt); // kAIP INSTRUMENTAS kl SKAICIUI ATRINKTI
       //lcd_gotoxy(0,0);
       garsas1();               
  }
    
//*********************  Klaviaturos inicializacija (gali jos ir nebuti, nes yra sintezas ir kl. garsai)******************************************
void klini(void)  // 
    {
        for (tmp=1; tmp <= 16; tmp=tmp+1)  // Pradine klaviaturos inicializacija
         { PORTC.5=1;
        delay_us(10);
         PORTC.5=0;
            delay_us(10);
       }
    } 

// *********************  Klaviaturos garsai *******************************    
  void garsas(void)  // 
     {
        for (tmp=1; tmp <= 100; tmp=tmp+1)  
         { PORTC.5=1;
         delay_us(100);
         PORTC.5=0;
            delay_us(100);
        }
    }  
    
void garsas1(void)  // 
     {
        for (tmp=1; tmp <= 200; tmp=tmp+1)  
         { PORTC.5=1;
         delay_us(200);
         PORTC.5=0;
            delay_us(200);
        }
    }  
    
void garsas2(void)  // 
     {
        for (tmp=1; tmp <= 254; tmp=tmp+1)  
         { PORTC.5=1;
         delay_us(150);
         PORTC.5=0;
            delay_us(150);
        }
    } 
 // *********************  Uzlaikymas varikliu fazem *******************************   
 void delay_x(char usx50)   
 { 
 while (usx50>0)
 {
    delay_us(50);
    usx50=usx50-1 ;}
 }
// *********************  LCD istrynimas, cia tik mano displejui jis jau toks ******************************* 
 void lcd_cls(void)
 {       lcd_clear();
       delay_us(200);   
      lcd_gotoxy(0,0);
       delay_us(200);}

 void inicializacija(void)
{
//********^^^^^^^^^^**** Portu nustatymai **********************************

// ****************** Portas A  ************************************
PORTA=0x00;            //IR iejimai  PORTA.0,1,2,3. apkrova PORTA.4, PORTA.5 baterija 
DDRA=0x00;
ADMUX=ADC_VREF_TYPE;
//ADCSRA=0x87;   //gale trys bitai:5 tai ADC_F=F/16 , 6 tai ADC_F=F/32 , 7 tai ADC_F=F/64
//****************** Portas B ************************************
PORTB=0x00;         // LCD, USB (bootloader-iui) , IR diodu leidimas PORTB.3
DDRB=0xff;          // PB, kaip iejimas
//******************  Portas C ************************************
PORTC=0b00011111;   //kada skiltis=0 tada suveikes  mechaninis dav. situose skiltyse 0b00001111
DDRC=0b11100000;
// *********        Portas D   ***************************
PORTD=0b00000000;      //0b0000[1111 1mo variklio fazes] , 0b[1111 antro var. fazes]0000
DDRD=0b11111111;    //PD,kaip isejimai
//*************** Pasisveikinimas  ******************************
lcd_init(16); // 
lcd_puts(_str); //
//PlayStr_f((char*) "ll`aa`b~aa`sz a`&&& e~sz`u r,r,r`oo`b~oo`t~a`sz"); //kartu ir klaviaturos inicializacija
      
//********* PRADINIAI ROBOTO DUOMENYS   ***********************
uzlaikymasf=30;        //~200*50us variklio faziu  uzlaikymas
uzlaikymas1=1;      //1ms pranesimu uzlaikymas
uzlaikymas2=1000;   //1 sekundes uzlaikymas
LCDNUST =0;
BUSENA = 1;
IRdavnust();              //ADC inicializavimas porto A nustatymas
delta=0;
irdav=255;              //kada skiltis =0 tada suveikes   0bxxxx[0000 sitos skiltys]
tmp=16;
kl=0;
iiii=0;
KLAJOJIMAS=true;  //pagal nutylejima pradinis rezimas
irjautrumas=120;
davsenas=0b00111111;
skaitliukas=6000;  // apytiksliai minutes trukme, skaitliukas, pagal kuri bus kaupiami duomenys
skaitliukas1=0;     // skaitliukas, pagal kuri bus kaupiami duomenys
while (PINC.4==1){
} 
garsas();//kartu ir klaviaturos inicializacija  
delay_ms(uzlaikymas2);     //

}
// ******************  FILTRAS, kad busena nesikaitaliuotu daznai  ************************************  
//  void irfiltras(void)
//{ 

//}
// ******************  Dekoduojam busena   ************************************

//void dekodavimas(void)
//{

//}



/*       
// ****************** Programinis RESETAS  ************************************
  void reset(void) 
{//steko parametru atnaujinimas  
#asm
;STACK POINTER INITIALIZATION
	LDI  R30,LOW(0x85F)
	OUT  SPL,R30
	LDI  R30,HIGH(0x85F)
	OUT  SPH,R30

;DATA STACK POINTER INITIALIZATION
	LDI  R28,LOW(0x260)
	LDI  R29,HIGH(0x260)
  
  #endasm
  }
  */