You are viewing an old version of this page. View the current version.
Compare with Current
View Page History
Version 1
Next »
#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();
//paaohjelma, jonka nimi on aina main
task main()
{
bool viimeksiAjettiinValkoisellaAlueella=false;
bool viimeksiAjettiinMustallaAlueella=false;
int askel=1;//1 = aja suoraan, 2 = kaanny teipin paassa
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
{
if(askel==1)
{
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=2;
motor[motorC] = -40;
motor[motorB] = 40;//moottori peruuttaa
}
}
if(askel==2)//kaannytaan paikoillaan ympari
{
if(SensorValue(RGB) == 1) //BLACKCOLOR) tultiinko takaisin mustalle alueella
{
askel=1;//kun musta teippi loytyi niin vaihdetaan takaisin askeleelle yksi
ClearTimer(T1); // nollataan ajastin seuraavaa suoraan ajoa varten
}
}
}
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
}
//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;
}
You must log in to comment.