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.
Zuschneiden der Grundplatte
Ankleben des Servos an unser Styroporrad
Anbringen des Rades an das Grundgerüst aus Holz
Die hälfte der Konstruktion steht
Die gesamte Elektronik wird im Innern verstaut
Anlöten der Druckknöpfe
Anfang des Countdowns (rot)
Ende des Countdowns (grün)
#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 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);
}
[/sourcecode]