Go Down

Topic: arduino met relay control en Timer restart how to do? (Read 4 times) previous topic - next topic

ReSiStAnCe


ben nog even terug gegaan naar jou code

ik kreeg daarbij een foutmelding
iets met scope.

heb deze nu zonder compile errors maar als ik hem dan upload naar het board schakeld led13 de onboard led niet uit na 5 sec

--

Code: [Select]
void setup()
{

unsigned long startime = 0;
unsigned long endtime = 0;
int relaispin = 13; // relais aan pin 10
int inpin = 3; // input aan pin 9
}

void loop()
{
  unsigned long starttime = 0;
unsigned long endtime = 0;
  int relaispin = 13;
  int inpin = 3;
  pinMode(relaispin, OUTPUT);
  pinMode(inpin, INPUT);
if (inpin = 1 ) { // input hoog
digitalWrite(relaispin, HIGH);         // relais schakelen
starttime = millis(); // huidige 'tijd'
endtime = starttime + 5000;     // gewenste vertragingstij = 40minuten * 60 * 1000
}
if (millis() >= endtime) { //tijd verstreken?
digitalWrite(relaispin, LOW);    //relais afschakelen
}
}


Je declareerd 2 keer hetzelfde. In setup zeg je dat startime en endtime unsigned long zijn met een waarde '0'
Dan doe je hetzelfde nog eens in de 'main' loop.(maar deze keer starttime)
Dat betekend dus wel dat wanneer de loop terug begint (dus na " if (millis() >= endtime).. etc " deze 2 waardes terug op nul gezet worden.

BTW: probeer eens de code-knop # als je code post. Makkelijker om te lezen.



LG046

starttime of startime was een type fout uit jou code neem ik aan?
moet neem ik aan starTTime zijn met 2 t's.

wat ik wilde doen is de teller opnieuw naar 0 zetten eigenlijk..
als ik namelijk starttime + 5000 ( voorbeeld 5sec ) doet hij bij mij niks bij blijft gewoon doorlopen en stopt niet na 5 sec..
als ik de starttime dus weg haal stopt hij bij mij na 5000 sec.

LG046

#17
Nov 03, 2012, 07:45 pm Last Edit: Nov 03, 2012, 08:22 pm by LG046 Reason: 1
nou

nog steeds geen succes

heb de timer
de time
en timealarm als gebrobeert

waarom kan die arduino niet gewoon zoals de duinomite een functie settimer = 0 doen en dan later if timer > 20000 DO something....
alles zo onnodig complex...


ik heb een gesloten verbinding tussen ground en pin2 deze word extern gebroken bijvoorbeeld dmv een druk knop of iets anders.

zolang die pin2 niet veranderd mag pin 3 HIGH zijn.

op het moment dat die pin2 veranderd moet pin3 low worden en zodra pin2 weer veranderd moet pin3 weer HIGH worden en zo om en om.

op het moment dat  voor het eerste pin2 veranderd moet een timer gaan lopen van 40 min waarbij na 40 min het programme stop. dus zeg maar gaan naar END() waar een oneindige loop in zit.

pas las de arduino word gereset of power cylce begint het weer van voor af aan.

moet toch mogelijk zijn of niet?

edit

als ik nou de  Alarm.timerOnce  binnen in een loop(){ zou kunnen zetten zou het kunnen werken
maar dat heb ik al probeert.. dan werkt het niet
er gebeurd helemaal niks.

heb binnnen de loop staan Alarm.timerOnce(1, END);

maar na 10sec gebeurd er niks hij gaat  niet naar void END toe.

Jantje

Dit lijkt me toch niet zo moeilijk.
Onderstaand niet geteste code als een voorzet.
Het is een combinatie van de code die je hier kan vinden http://arduino.cc/en/Reference/AttachInterrupt
en een timer conditie
met vriendelijke groet
Jantje

Code: [Select]

int pin = 3;
volatile int state = HIGH;
int prefState = state;
unsigned long TimerStart=0;

void blink()
{
  state = !state;
}

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
if(prefState != state ) // de knop is vernderd
{
prefState = !prefState; //Zet prefState gelijk aan state
if (TimerStart==0) //is dit de eerste keer dat de schakelaar van stand veranderd?
{
TimerStart=millis(); //Zo ja start de timer
}
  digitalWrite(pin, prefState); //zet de pin goed
}
if ( (TimerStart!=0) && ((TimerStart+40*60*100) < millis()) ) // de timer is meer dan 40 minuten geleden gestart
{
while(true);//wacht voor eeuwig en altijd
}
}
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

LG046

#19
Nov 04, 2012, 03:52 pm Last Edit: Nov 04, 2012, 04:11 pm by LG046 Reason: 1
het is natuurlijk niet af zoals je zegt een voorzet maar ik heb er mee zitten spelen en het werkt bijna

( ik heb de pin13 onboard led gebruiks als idicator dus pin3 naar pin13 gezet )

hij doet het soms wel en soms niet.

de ene keer als ik een gesloten loop heb ( dus pin 2 van de interupt 0 ) niet gebroken dan gaat led13 uit maar na een paar keer verbinding maken en breken is het ineens andersom..
bij het breken gaat de led juist aan en bij maken van verbinding uit...?

ik heb eeb weerstand erbij gezet maar maakt niks uit
kan ik de internal pullup niet gebruiken?  ( heb het ook al gebrobeerd no effect maar vraag het toch even. )

het werkt leuk als hij maar 1 x hoeft te veranderen en dan 40 min in dei staat moet staan vooraleer hij er helemaal mee stopt
maar gedurende die 40min zal de interupt keer op keer en een flink aantal keren achtererlkaa steeds worden getriggerd.
ik dacht al een debounce toe te voegen? delay(100) ( heb maar wat meer gepakt? ) maar ook geen effect

Go Up