Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Sewuraavassa

...

esimerkissä

...

ohjelman

...

toiminta

...

on

...

jaettu

...

osiin,

...

jotta

...

ohjelman

...

luettavuus

...

olisi

...

parempi.

...

Yleensä

...

eri

...

loogiset

...

toiminnot

...

kannattaa

...

jakaa

...

omiin

...

funktioihinsa.

Code Block



{code}
#pragma config(Sensor, S4,     RGB,                 sensorCOLORFULL)
#pragma config(Sensor, S2,     kosketus1,           sensorTouch)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

//esitellaan funktio, jolla kysellaan halusta ajella robotilla
int OnkoRobottiStartattuKosketusanturista();
void RobotinAjo();

//paaohjelma, jonka nimi on aina main
task main()
{
  ClearTimer(T1);
    while(1)//ikuinen silmukka alkaa tasta
    {
      //wait1Msec(1);//odotellaan vahan aikaa, talla ei taida olla mitaan merkitysta
      if(1==OnkoRobottiStartattuKosketusanturista())//testataan koko ajan kayttajan halua ajaa robottia
      {
        RobotinAjo();
      }
      else//tanne tullaan kun flipflop==0 ja pysaytetaan robotti, eli jos painetaan toisen kerran kosketusanturia
      {
          motor[motorC] = 0;
            motor[motorB] = 0;
      }
    }//ikuinen silmukka loppuu tahan
}

void RobotinAjo()
{
  static bool viimeksiAjettiinValkoisellaAlueella;
  static bool viimeksiAjettiinMustallaAlueella;
  static int askel;//0 = aja suoraan, 1 = kaanny teipin paassa, staattiset muuttujat alustuvat ohjelman käynnistyessä automaattisesti nolliksi  
  //siksi askeleet alkavat nollasta eivätkä ykkosesta
   if(askel==0)
  {
        if(SensorValue(RGB)== 6) //WHITECOLOR) valkoinen havaittu, yritetaan takaisin mustalle
            {
              if(viimeksiAjettiinMustallaAlueella==true)
              {
                ClearTimer(T1);
              }
                viimeksiAjettiinMustallaAlueella=false;//nollataan toisen suunnan laskuri
                viimeksiAjettiinValkoisellaAlueella=true;
                  motor[motorC] = 0;
                  motor[motorB] = 80;
            }
            if(SensorValue(RGB) == 1) //BLACKCOLOR) musta havaittu, yritetaan takaisin valkoiselle
            {
              if(viimeksiAjettiinValkoisellaAlueella==true)
              {
                ClearTimer(T1);
              }
                viimeksiAjettiinValkoisellaAlueella=false;//nollataan toisen suunnan laskuri
                  viimeksiAjettiinMustallaAlueella=true;
                  motor[motorC] = 80;
                  motor[motorB] = 0;
            }
            //testataan: paattyiko teippi eli jos maaraaikaan mennessa ei loytynyt teipin paa niin vaihdetaan askeleelle kaksi eli kaannytaan takaisin
            if(time1[T1]>500)
            {
              viimeksiAjettiinValkoisellaAlueella=false;
              viimeksiAjettiinMustallaAlueella=false;
              askel=1;
              motor[motorC] = -40;
                motor[motorB] = 40;//moottori peruuttaa
            }
        }
        if(askel==1)//kaannytaan paikoillaan ympari
        {
            if(SensorValue(RGB) == 1) //BLACKCOLOR) tultiinko takaisin mustalle alueella
            {
              askel=0;//kun musta teippi loytyi niin vaihdetaan takaisin askeleelle yksi
              ClearTimer(T1); // nollataan ajastin seuraavaa suoraan ajoa varten
            }
        }
}

//Talla funktiolla tutkitqaan takimmaisen kosketusanturin toimintaa
//joka toisella panalluksella funktio palauttaa nollan ja robotin pitaisi pysahtya
int OnkoRobottiStartattuKosketusanturista()
{
    static int flipflop;//esitellaan muuttuja staattisena, jotta se muistaa edellisen kerran tilansa
    static int flipAskel;//0=odotellaan napin painallusta 1=nappi painettu alas 2=nappi paastetty ylos 3=nappi toisen kerran alas
    int kosketus2Value=0;
    kosketus2Value = SensorValue(kosketus1);
    if(kosketus2Value==1&&flipAskel==0)//eka painallus alas
    {
      flipflop=1;
      flipAskel=1;
    }
    if(kosketus2Value==0&&flipflop==1)//eka paasto
    {
      flipAskel=2;
    }
    if(kosketus2Value==1&&flipAskel==2)//toka kerta alas
    {
      flipflop=0;
      flipAskel=3;
    }
    if(kosketus2Value==0&&flipAskel==3)//toka kerta ylos
    {
      flipAskel=0;
    }
    return flipflop;
}
{code}