Hallo zusammen,
ich bin ein nicht so all zu erfahrener Arduino Mitstreiter aber ich hab mich trotzdem mal an ein großes Projekt gewagt und zwar:
Will ich eine Halterung für die Solarzelle meines Vaters konstruieren damit sich die Solarzelle der Sonne mitdrehen kann. Desweitern Plane ich auch aus Sicherheitsgründen eine Abdeckung die Runterfährt und somit die Solarzelle schützt sobald ein starker Wind weht oder es Regnet. Und genau da ist das Problem wo ich nicht mehr weiter komme mit der Programmierung weil ich einfach keine Ahnung habe wie man in diesem Fall den Delay umgehen kann damit er nicht mein ganzen Code aufhält.
Meine Konkrete frage wäre jzt kann mir jmd helfen die delay´s in diesem Code durch wahrscheinlich Millis zu ersetzten?
Das wäre mega nett und ich wäre euch Tausendmal Dankbar
-stahl999
int D = 0;
int C = 0;
//---Servo---
#include <Servo.h>
Servo myservo;
int angle = 90;
//---Wind---
const int m_time = 3;
int wind_ct = 0;
float wind = 0.0;
unsigned long time = 0;
//---Motor---
int RichtungsPin13 = 13;
int PausenPin8 = 8;
int Speed11 = 11;
void setup()//-----------------------------------------------------------------------------------------
{
Serial.begin(9600);
time = millis();
//---Servo---
pinMode(3, OUTPUT);
myservo.attach(44);
//-M- = Motor
pinMode(RichtungsPin13,OUTPUT);
pinMode(PausenPin8,OUTPUT);
}
void loop()//-----------------------------------------------------------------------------------------
{
//---Servo---
int rightEye = analogRead(4);
int leftEye = analogRead(5);
int diff = (rightEye - leftEye);
if (diff > 30) {
angle = angle+2;
}
if (diff < -30) {
angle = angle-2;
}
if (angle > 200) {
angle = 200;
}
if (angle < 2) {
angle = 2;
}
myservo.write(angle);
//--------------------------------------------------
meassure();
Serial.print(wind); //Speed in Km/h
Serial.print(" km/h - ");
Serial.print(wind / 3.6); //Speed in m/s
Serial.print(" m/s");
Serial.print(" ");
Serial.print(" D:");
Serial.print(D);
Serial.print(" C:");
Serial.println(C);
//--------------------------------------------------
if (wind > 0.2){
C = C+1;
}
//--------------------------------------------------
//Klappe soll zufahren
if(C==1){
angle = 90;
delay(1000);
digitalWrite(RichtungsPin13,HIGH);
digitalWrite(PausenPin8,LOW);
analogWrite(Speed11,255);
delay(3000);
D = 1;
} else{
digitalWrite(PausenPin8,HIGH);
}
//--------------------------------------------------
//Klappe soll auffahren
// Hier soll auf 5min Hochgezählt werden und danach soll der Motor die Klappe schließen jedoch wird der 5min timer wieder genullt wenn inner halb der 5sec der wind wieder > 0.2 ist.
Kurz nochmal zusammengefasst soll hier wenn die windstärke für 5min nicht stärker als definiert ist die Klappe wieder hochfahren
,das gleich soll auch mit dem Regensenor passieren den muss ich jedoch erst noch kaufen irgenwelche tipps?
digitalWrite(RichtungsPin13,LOW);
digitalWrite(PausenPin8, value);
analogWrite(Speed11,255);
delay(3000);
C = 0;
D = 0;
} else {
digitalWrite(PausenPin8,HIGH);
}
}
//--------------------------------------------------
//---Wind---
void countWind() {
wind_ct ++;
}
void meassure() {
wind_ct = 0;
time = millis();
attachInterrupt(1, countWind, RISING);
detachInterrupt(1);
wind = (float)wind_ct / (float)m_time * 2.4;
}
(Oh und ich sollte vlt erwähnen das nicht alle teile des Code´s von mir sind ich hab mir auch Funktionen aus dem Internet zusammengesucht.)