12. November 2010
Die Aufgabe war, irgend ein Countdown zu erstellen. Er musste nichts mit Zeit zu tun haben. Wir entschlossen uns, ein Rad mit einem Farbverlauf von rot zu grün als Countdown zu erstellen. Als Antrieb wählten wir einen Servo. Um das ganze möglichst stabil zu bauen, gingen wir in die Werkstatt und erstellten aus Holz, Karton und Styropor unser Gebilde. Das Rad haben wir mit einem Papier mit Verlauf beklebt. Hinter dem Model befinden sich 2 Knöpfe für 2 Funktionen. Der untere lässt das Rad in 10 Schritten drehen. Beim Oberen dreht das Rad ruckfrei 180°.// Sweep // by BARRAGAN <http://barraganstudio.com> // This example code is in the public domain. #define BUT1 5 // Button 1 #define BUT2 3 // Button 2 #define LED 13 // Licht für Rad #define LEDSLEEP 11 // Licht für Schlafzustand #include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of eight servo objects can be created boolean button1 = LOW; boolean button2 = LOW; int pos = 0; // variable to store the servo position int zaehler = 1; boolean up = 1; void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object Serial.begin( 9600 ); pinMode(BUT1, INPUT); pinMode(BUT2, INPUT); pinMode(LED, OUTPUT); pinMode(LEDSLEEP, OUTPUT); digitalWrite(LED, HIGH); digitalWrite(BUT1, HIGH); // Activate internal Pullups digitalWrite(BUT2, HIGH); // Activate internal Pullups } void loop() { button1 = digitalRead(BUT1); // read a button connected to pin 4 button2 = digitalRead(BUT2); // read a button connected to pin 3 Serial.print("button1"); Serial.println(button1, DEC); Serial.print("button2"); Serial.println(button2, DEC); if (button1 == LOW){ // in order to decide in which direction digitalWrite(LED, HIGH); analogWrite(LEDSLEEP, 0); myservo.write(180); // tell servo to go to position in variable 'pos' for(pos = 180; pos>=0; pos-=18) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(1000); if (pos == 0){ for (int i = 1; i < 6; i++){ digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); delay(200); } } //ende if // waits 15ms for the servo to reach the position } //ende for } //ende if else if (button2 == LOW){ // in order to decide in which direction digitalWrite(LED, HIGH); analogWrite(LEDSLEEP, 0); myservo.write(180); // tell servo to go to position in variable 'pos' for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees { Serial.println(pos, DEC); myservo.write(pos); // tell servo to go to position in variable 'pos' delay(20); if (pos == 0){ for (int i = 1; i < 6; i++){ digitalWrite(LED, LOW); delay(200); digitalWrite(LED, HIGH); delay(200); } } //ende if // waits 15ms for the servo to reach the position } //ende for } //ende if else if (button1 == HIGH && button2 == HIGH ){ sleep(); } } void sleep(){ if (zaehler > 254){ up = 0; } // wenn unten zähl rauf if(zaehler < 10){ up = 1; } if (up == 1){ zaehler += 1; } if (up == 0){ zaehler -= 1; } digitalWrite(LED, LOW); analogWrite (LEDSLEEP, zaehler); }