#define MAX 210 #define MIN 200 #define AUF_AB ( 1<<0 ) #define SCHRITTWEITE 1 uint8_t flagRegister = 0; uint16_t ocr3a = MAX; void setup() { Serial.begin( 9600 ); } // Ende void setup() void loop() { /////////////////////////////////////////////////////////////////////////////// // Zwischen MIN und MAX pendeln // uint16_t x; x = ocr3a; // Aufwaertszaehlen solange MAX nicht erreicht und Flag auf Aufwaerts steht if( x < MAX && flagRegister & AUF_AB ) { ocr3a += SCHRITTWEITE; ///* Serial.print ( "x < MAX = " ); Serial.println( ocr3a ); //*/ } // MAX-Wert ist erreicht Flag auf Abwaerts stellen else if( x >= MAX && flagRegister & AUF_AB ) { flagRegister ^= AUF_AB; // Aufwaertzaehlen blockieren ///* Serial.print ( "x >= MAX = " ); Serial.print ( ocr3a ); Serial.print ( "\t" ); Serial.print ( "flagRegister = " ); Serial.println( flagRegister, BIN ); //*/ } // Abwaertszaehlen solange MIN nicht erreicht und Flag auf Abwaerts steht if( x > MIN && ~flagRegister & AUF_AB ) { ocr3a -= SCHRITTWEITE; //schrittweite; ///* Serial.print ( "x > MIN = " ); Serial.println( ocr3a ); //*/ } // MIN-Wert ist erreicht Flag auf Aufwaerts stellen else if( x <= MIN && ~flagRegister & AUF_AB ){ flagRegister ^= AUF_AB; // Abwaertszaehlen blockieren ///* Serial.print ( "x <= MIN = " ); Serial.print ( ocr3a ); Serial.print ( "\t" ); Serial.print ( "flagRegister = " ); Serial.println( flagRegister, BIN ); //*/ } } // Ende void loop()