Help, basic sensor schakeling

Hallo,

ik ben al een aantal dagen bezig om mij bekend te maken met Arduino. Ik ben nu op het punt waar google weinig hulp meer biedt, misschien kunnen jullie helpen.

Ik wil met een infrarood motion sensor twee computerfans aansturen door middel van een relay. De beide fans zijn afzonderlijk aan te sturen. Er is dus 1 input van de sensor en 2 outputs van de fans.

Er zijn twee mogelijkheden. Een mogelijkheid waarin geen beweging is gezien. Deze code ziet er als volgt uit en werkt zoals verwacht;


int Fan1 = 5; int Fan2 = 6; int sensor =7;

void setup() { pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, INPUT); }

void loop() { breathing(); motion(); }

void on(){ digitalWrite(6, HIGH); }

void breathing(){ digitalWrite(5, HIGH); delay(4000); digitalWrite(5, LOW); delay(4000); }


Nu het deel waar ik niet uit kom. De tweede mogelijkheid waarin beweging is gezien.

Wanneer er beweging is gezien moeten beide fans HIGH gaan voor 3 seconden. Daarna moeten beide fans LOW gaan voor 4 seconden en daarna moeten beide weer HIGH gaan voor 3 seconden en terug gaan naar de modus waarin geen beweging is gezien. Dan moet de sensor op "pauze" gaan voor 60 seconden, waarna alles weer opnieuw begint. Daar hoort deze incomplete, half werkende code bij.


void motion(){ digitalRead (7);

digitalWrite(5, HIGH); delay(6000); digitalWrite(5, LOW); digitalWrite(6, LOW); delay(4000); digitalWrite(5, HIGH); digitalWrite(6, HIGH); }


De volledige code, voor de duidelijkheid;


int Fan1 = 5; int Fan2 = 6; int sensor =7;

void setup() { pinMode(5, OUTPUT); pinMode(6, OUTPUT); pinMode(7, INPUT); }

void loop() { breathing(); motion(); }

void on(){ digitalWrite(6, HIGH); }

void breathing(){ digitalWrite(5, HIGH); delay(4000); digitalWrite(5, LOW); delay(4000); }

void motion(){ digitalRead (7);

digitalWrite(5, HIGH); delay(6000); digitalWrite(5, LOW); digitalWrite(6, LOW); delay(4000); digitalWrite(5, HIGH); digitalWrite(6, HIGH); }


Wie kan mij verder helpen?

Groet, E

Het probleem in je code komt door het overmatig gebruik van delay(xxxx). Tijdens delay doet je Arduino niets anders dan wachten, dus als tijdens delay(xxxx) de ingang hoog gaat zal je Arduino daar niet op reageren.

verder zal ook digitalRead (7); niet veel doen.

Zorg er voor dat je eerst de voobeeldsketches begrijpt en zorg vooral dat je "blink without delay" verstaat. Dan pas ben je klaar om te doen wat je nu al probeert. Veel succes.