Hallo
Bild hier
(http://www.youtube.com/watch?v=8cTLP5knsfk)
Das ist die Ausgabe von diesem Programm:
Code:
#include "RP6RobotBaseLib.h"
void eigenefunktion(void)
{
// testzeile +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if (getStopwatch3() < 800)
{
setLEDs(63);
//PORTC |= IO_PC7;
//PORTC |= IO_PC5;
}
else if (getStopwatch3() < 800+800)
//testzeile
{
setLEDs(0);
//PORTC &= ~IO_PC7;
//PORTC &= ~IO_PC5;
}
else if (getStopwatch3() < 800+800+800)
{
setLEDs(63);
//PORTC |= IO_PC7;
//PORTC |= IO_PC5;
}
else if (getStopwatch3() < 800+800+800+1000)
{
setLEDs(0);
//PORTC &= ~IO_PC7;
//PORTC &= ~IO_PC5;
}
else setStopwatch3(0);
}
// testzeile +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int main(void)
{
initRobotBase();
setLEDs(0);
//DDRC |= IO_PC7 | IO_PC6 | IO_PC6 | IO_PC4
//PORTC &= ~IO_PC7;
//PORTC &= ~IO_PC6;
//PORTC &= ~IO_PC5;
//PORTC &= ~IO_PC4;
setStopwatch3(0);
startStopwatch3();
while(true)
{
eigenefunktion();
}
return 0;
}
und wird auf einem RP6-Base ausgeführt. Einzige Änderung gegenüber der ersten Version sind die geänderten StopWatch-Werte.
Die else-Zweige in den Abfragen werden doch erst ausgeführt, wenn die vorhergehende Prüfung auf "kleiner als" false ergab. "Case" würde mir hier auch besser gefallen...
Gruß
mic
[Edit]
Mit "case" sieht's nicht wirklich besser aus:
Code:
#include "RP6RobotBaseLib.h"
void eigenefunktion(void)
{
uint8_t step;
uint16_t temp;
temp = getStopwatch3();
step = (temp < 800) << 0 \
| (temp < 800+800) << 1 \
| (temp < 800+800+800) << 2 \
| (temp < 800+800+800+1000) << 3 \
| (temp >= 800+800+800+1000) << 4;
//writeInteger(step, 2);
//writeString_P("\n\r");
switch (step)
{
case(16-1): setLEDs(32+4); break;
case(16-2): setLEDs(0b10010); break;
case(16-4): setLEDs(9); break;
case(16-8): setLEDs(0); break;
case(16): setStopwatch3(0); break;
}
}
int main(void)
{
initRobotBase();
setLEDs(0);
setStopwatch3(0);
startStopwatch3();
while(true)
{
eigenefunktion();
}
return 0;
}
Lesezeichen