Hallo ich bin nicht fähig... ich muss einen Reedkontakt am Digitaleingang so abfragen das er nur bei jedem zweiten impuls einen ausgang für, ich sage mal 500ms auf HIGH setzt. Ziel ist mit ganz geringem aufwand die Radgröße meines Ergometers auf eine Fahrradapp anzupassen (REED 2x = einmal Impuls an den Tachoeingang am (schliesser Kontakt am Ergometer bzw. BT empfänger) oder einfacher Impuls halbieren oder anpassen halt.
Vielleicht gibts ja nen netten Menschen der mir da mal nen Sketch verfassen könnte, DANKE
ich weiß nicht genau, ob es das ist, was Du brauchst und es ist denke ich auch nicht die eleganteste Lösung, doch probieren kannst du das:
int i = 0;
void setup() {
pinMode(5, INPUT); //dort schließt du den reed-Kontakt an
pinMode(6, OUTPUT); // für deine APP, der Ausgang wird jede 2. Umdrehung auf HIGH gesetzt
digitalWrite(6, LOW);
}
void loop() {
if(5 == HIGH && i == 0){
i++;
delay(100); //hier musst du den skatch etwas anpassen, die ms müssen etwas mehr sein, als die Zeit, die dein reed Kontakt an ist.
}
if(5 == HIGH && i == 1){
digitalWrite(6, HIGH);
i = 0;
delay(500); //solange dein Ausgang 5V haben soll, ich schätze, deine 500ms sind zu viel.
digitalWrite(6, LOW);
}
}
bool merker; //global werden die Variablen ohne Angabe mit 0 angelegt - wir brauchen nur 0 oder 1 ) bool(ean)
const byte reedPin=5; //Die benutzten Anschlüsse - im Sketch mit Name anzusprechen - bis zur Pin-Nummer 255 reicht BYTE
const byte appPin=6; //keine 'magic numbers' - also feste Zahlen, wo Keiner weiß, woher Diese kommen
void setup() {
pinMode(reedPin, INPUT_PULLUP); //dort schließt du den reed-Kontakt an, anderes Ende an GND
pinMode(appPin, OUTPUT); // für deine APP, der Ausgang wird jede 2. Umdrehung auf HIGH gesetzt
}
void loop() {
if (digitalRead(reedPin)!=merker){
delay(50); //Reed-Kontakt 'entprellen'
digitalWrite(appPin,merker); //Zustand auf Ausgangs-Pin
merker=1-merker; //Zustand umdrehen
}
}