|
Pozdravljeni,
Sem začetnik pri uporabi razvojne plošče arduino in mi ga rad uporabil kot časovni rele.
Ko bi pritisnil gumb (npr. pin 2) bi se začel odštevati nastavljen čas. Po preteku tega časa bi se postavil izhod (npr. pin 12) na stanje 1.
Omenjen program bi uporabil za krmiljenje garažnih vrat in bi se tako npr. pol ure po odprtju sama nazaj zaprla.
Prosim za pomoč
|
|
|
Najbolj enostavna varianta je, da uporabiš funkcijo millis(): https://www.arduino.cc/en/Reference/Mill....
Ko pritisneš gumb, si zapomniš trenutno čas.
Nato pa samo periodično preverjaš, če je nastavljen čas in če je minilo že dovolj časa, potem nastaviš izhod na ustreznem pin-u.
Edino kar moraš paziti, je, da se funkcija millis po približno 50 dneh resitira, tako da če je prebrana vrednost manjša od shranjene, moraš to upoštevati.
|
|
|
Uspelo mi je narediti program, ki deluje, vendar imam en problem. Časovnik aktivira ob vklopu končnega stikala in začne s štetjem časa, vendar se ob sprostitvi končnega stikala ne ustavi ampak šteje naprej. Jaz bi rad, da se ob sprostitvi končnega stikala časovnik resetira in čaka na ponovno aktivacijo.
Zgodi se mi namreč, da v primeru, če znotraj časa, ki je nastavljen na časovniku jaz ročno zaprem vrata potem po nastavljenem času pošlje pulz na motor in mi jih odpre.
Pomoje bi potreboval samo nek ukaz, ki bi vedno ob sprostitvi stikala resetiral časovnik. Prosim za pomoč.
|
|
|
Še moj trenutni program:
//Global Variables const byte BUTTON=2; // our button pin const byte LED=12; // LED
unsigned long buttonPushedMillis; // when button was released unsigned long ledTurnedOnAt; // when led was turned on unsigned long turnOnDelay = 2500; // wait to turn on LED unsigned long turnOffDelay = 3600000; // turn off LED after this time bool ledReady = false; // flag for when button is let go bool ledState = false; // for LED is on or not. void setup() { pinMode(BUTTON, INPUT_PULLUP); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); } void loop() { // get the time at the start of this loop() unsigned long currentMillis = millis(); // check the button if (digitalRead(BUTTON) == LOW) { // update the time when button was pushed buttonPushedMillis = currentMillis; ledReady = true; } // make sure this code isn't checked until after button has been let go if (ledReady) { //this is typical millis code here: if ((unsigned long)(currentMillis - buttonPushedMillis) >= turnOnDelay) { // okay, enough time has passed since the button was let go. digitalWrite(LED, HIGH); // setup our next "state" ledState = true; // save when the LED turned on ledTurnedOnAt = currentMillis; // wait for next button press ledReady = false; } } // see if we are watching for the time to turn off LED if (ledState) { // okay, led on, check for now long if ((unsigned long)(currentMillis - ledTurnedOnAt) >= turnOffDelay) { ledState = false; digitalWrite(LED, LOW); delay(4000); // waits for four second digitalWrite(LED, HIGH); // sets the LED on
} } }
|
|
|
Jaz ti lahko pomagam ampak bi te prosil, da malo razložiš kako imaš (boš imel) to povezano v garaži, predvsem kaj boš uporabil za "gumb" in kako pošlješ vratom signal da se zaprejo/odprejo.
|
|
|
Sem že med tem časom uredil. Uporabil sem knjižnico plclib.h in sem ga programiral kot PLC. Mnogo bolj preprosto in funkcionira.
Vseeno hvala!
|
|
Prikazujem 1 od skupno 1 strani |
|