Skip to content

Instantly share code, notes, and snippets.

@jnslxndr
Created May 7, 2014 14:03
Show Gist options
  • Save jnslxndr/684360841fe46535af5a to your computer and use it in GitHub Desktop.
Save jnslxndr/684360841fe46535af5a to your computer and use it in GitHub Desktop.
Servo auf Licht
#include <Servo.h>
#define SERVO_PIN 9
#define SENSOR_PIN A0
#define IDLE 0
#define ACTIVE 1
// 1 für mehr info 0 für nix
#define DEBUG 0
Servo meinServo;
int servo_ziel = 180; // in °
int servo_idle = 0; // im idle/ruhe zustand
int licht = 0;
int genug_licht = 512;
int state = IDLE;
unsigned long nicht_lesen_bis = 0;
unsigned long lese_pause_zeit = 2000; // sek. * 1000! => millisekunden
void setup()
{
meinServo.attach(SERVO_PIN);
if (DEBUG) {
Serial.begin(9600);
Serial.println("ready");
}
}
void loop()
{
// darf ich lesen?
if ( millis() >= nicht_lesen_bis ) {
// licht lesen!
licht = analogRead(SENSOR_PIN);
// eventuell licht wert an computer schicken
if (DEBUG) {
Serial.print("Lichtwert:\t");
Serial.print(licht);
Serial.print("\t .. muss aber\t");
Serial.println(genug_licht);
}
// ist genug licht? testen wieviel! 0-1023
if ( licht >= genug_licht && state == IDLE ) {
if (DEBUG) Serial.println("genug licht und status war idle");
// ich draf nicht mehr lesen bis!
nicht_lesen_bis = millis() + lese_pause_zeit;
// der servo soll da sein
meinServo.write(servo_ziel);
// setze satus auf ACTIVE
state = ACTIVE;
}
// wenn genu
else if ( licht < genug_licht && state == ACTIVE ) {
if (DEBUG) {
Serial.print("nicht genug licht und status war active\t");
Serial.println(state);
}
// setze status IDLE
state = IDLE;
//servo zurück
meinServo.write(servo_idle);
}
// nicht genug licht, aber idle (optional)
else if ( licht < genug_licht && state == IDLE) {
// mache was anderes (im ruhestand)
if (DEBUG) {
Serial.print("nicht genug licht und status ist idle\t");
Serial.println(state);
}
}
// genug licht && status ist active (optional)
else if ( licht >= genug_licht && state == ACTIVE) {
// mache was anderes (im ruhestand)
if (DEBUG) {
Serial.print("nicht genug licht und status ist idle\t");
Serial.println(state);
}
}
} // ENDE nicht_lesen_bis!
// Etwas delay wenn Daten über Serial geschickt werden.
if (DEBUG) {
delay(20);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment