Led vertraagd uitschakelen
9 berichten
• Pagina 1 van 1
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Led vertraagd uitschakelen
Hallo Wie kan me opweg helpen om vb een led vertraagd te laten uitschakelen zonder gebruik te maken van de" delay "functie
Heeft iemand een voorstel wat ik in de plaats van delay kan gebruiken om mijn led vertraagd uit te schakelen.
ik heb al eens geexpirementeerd met "#metro.h" maar is me niet gelukt.
of eventueel een voorbeeldje???
alvast bedankt voor de reactie.
Heeft iemand een voorstel wat ik in de plaats van delay kan gebruiken om mijn led vertraagd uit te schakelen.
ik heb al eens geexpirementeerd met "#metro.h" maar is me niet gelukt.
of eventueel een voorbeeldje???
alvast bedankt voor de reactie.
- Code: Alles selecteren
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
delay (2000);
// turn LED off:
digitalWrite(ledPin, LOW);
}
}
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Led vertraagd uitschakelen
- Code: Alles selecteren
// Do not remove the include below
#include "test.h"
#define DELAY_TIME 2000L // delay time before switching led off
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
unsigned long ctr = 0L;
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}
void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
//
// set the timer
//
ctr = millis() + DELAY_TIME;
}
//
// is the timer running
//
if (ctr != 0 ) {
if (millis() > ctr) {
// turn LED off:
digitalWrite(ledPin, LOW);
ctr = 0;
}
}
}
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Re: Led vertraagd uitschakelen
Dag ,
Nico bedankt voor de tip (voorbeeld) maar als ik deze wil testen geeft hij een fout bij het uploaden.
Fout:
In file included from Led_vertraagd_uitschakelen.ino:1:
C:\Users\Laptop K-K\Documents\Arduino\libraries\Test/Test.h:11:24: error: WConstants.h: No such file or directory
ik heb nochthans "#include "test.h" " toegevoegd aan mijn bibliotheek en het programma heropgestart.
Heb er iemand een vermoeden wat ik heb fout gedaan.
Nico bedankt voor de tip (voorbeeld) maar als ik deze wil testen geeft hij een fout bij het uploaden.
Fout:
In file included from Led_vertraagd_uitschakelen.ino:1:
C:\Users\Laptop K-K\Documents\Arduino\libraries\Test/Test.h:11:24: error: WConstants.h: No such file or directory
ik heb nochthans "#include "test.h" " toegevoegd aan mijn bibliotheek en het programma heropgestart.
Heb er iemand een vermoeden wat ik heb fout gedaan.
Re: Led vertraagd uitschakelen
die moet dus in de map libraries en dan een map test aanmaken en daar moet dan test.h inkomen.
een andere manier is attach library
kijk maar naar de foutregel in jouw eigen bericht
een andere manier is attach library
kijk maar naar de foutregel in jouw eigen bericht
paul deelen
shooter@home.nl
shooter@home.nl
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Re: Led vertraagd uitschakelen
Dag,
Kan iemand me een tip geven waarom het me niet lukt met dit stukje code om een led vertraagd te laten uitschakelen?
ik zou dit graag onder de knie krijgen...
alvast bedank ...
Kan iemand me een tip geven waarom het me niet lukt met dit stukje code om een led vertraagd te laten uitschakelen?
ik zou dit graag onder de knie krijgen...
alvast bedank ...
- Code: Alles selecteren
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 9; // the number of the LED pin
// Variables will change:
int buttonState = 0; // variable for reading the pushbutton status
long previousMillis = 0L; // will store last time LED was updated
unsigned long currentMillis = millis();
long interval = 2000L; // interval (milliseconds)
void setup() {
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
}
void loop()
{
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// if it is, the buttonState is HIGH:
//if (buttonState == HIGH) {
if (digitalRead(buttonPin)==HIGH){
// turn LED off:
digitalWrite(ledPin, HIGH);
// set the timer
previousMillis = currentMillis + interval;
}
//is the timer running
if (previousMillis !=0 ){
if (currentMillis > previousMillis){
// turn LED off:
digitalWrite(ledPin, LOW);
previousMillis = 0 ;
}
}
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Led vertraagd uitschakelen
currentMillis vul je een keer bij opstarten en daarna niet meer.
Als je currentMillis gewoon de nek omdraait en woon als je een counter wil vergelijk met NU dan gewoon millis() uitvoeren. Het klopt dat je programma het niet doet.
Verder weet ik niet hoe je de LEDS hebt geschakeld. Maar als de LED tussen de pin en GND hangt dan moet je een HIGH schrijven naar de datapin om hem aan te zetten en LOW om hem uit te zetten. En let op de polriteit van de LED.
Daarnaast is het ook van belang hoe je de button hebt aangesloten. Als je een schakelaar hebt die als hij AAN is naar GND sluit, dan moet je OF een weerstand (iets van 4K7- 10K) tussen de datapin en VC aansluiten. Wat ook meestal werkt is pinMode(buttonPin, INPUT_PULLUP); digitalWrite(buttonPin, HIGH). In beide gevallen blijft de datapin ZEKER hoog totdat je de schakelaar indrukt.
Omgekeerd als je een schakelaar hebt die de datapin met VCC verbindt, dan moet je een weerstand verbinden tussen de datapin en GND (wederom iets van 4.7K - 10K).
De reden om dit te doen is om er zeker van de zijn dat je een bekende waarde hebt als hij UIT cq AAN staat. Als je de pin laat "zweven" dan kun je een onverwachte waarde krijgen totdat je de schakelaar hebt ingedrukt.
Verder zou ik bij schakelaars rekening houden met het trillen van de contacten. Asl je een schakelaar aanzet, dan veren de contacten wat na. Wat ik zelf meestal doe is na het lezen van de pin en deze is "AAN" dan wacht ik iets van 10mS en lees nog een keer.
Als je currentMillis gewoon de nek omdraait en woon als je een counter wil vergelijk met NU dan gewoon millis() uitvoeren. Het klopt dat je programma het niet doet.
Verder weet ik niet hoe je de LEDS hebt geschakeld. Maar als de LED tussen de pin en GND hangt dan moet je een HIGH schrijven naar de datapin om hem aan te zetten en LOW om hem uit te zetten. En let op de polriteit van de LED.
Daarnaast is het ook van belang hoe je de button hebt aangesloten. Als je een schakelaar hebt die als hij AAN is naar GND sluit, dan moet je OF een weerstand (iets van 4K7- 10K) tussen de datapin en VC aansluiten. Wat ook meestal werkt is pinMode(buttonPin, INPUT_PULLUP); digitalWrite(buttonPin, HIGH). In beide gevallen blijft de datapin ZEKER hoog totdat je de schakelaar indrukt.
Omgekeerd als je een schakelaar hebt die de datapin met VCC verbindt, dan moet je een weerstand verbinden tussen de datapin en GND (wederom iets van 4.7K - 10K).
De reden om dit te doen is om er zeker van de zijn dat je een bekende waarde hebt als hij UIT cq AAN staat. Als je de pin laat "zweven" dan kun je een onverwachte waarde krijgen totdat je de schakelaar hebt ingedrukt.
Verder zou ik bij schakelaars rekening houden met het trillen van de contacten. Asl je een schakelaar aanzet, dan veren de contacten wat na. Wat ik zelf meestal doe is na het lezen van de pin en deze is "AAN" dan wacht ik iets van 10mS en lees nog een keer.
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Led vertraagd uitschakelen met webpagina
Dag,
Het is me ondertussen gelukt om simpel weg een led aan te schakelen en die na x aantal tijd te laten uitschakelen met de "elapsedMillis.h" timer.
Hoe pak ik dit aan om hetzelfde te realiseren via een webpagina.
Het is me ondertussen ook gelukt om led's aan en uit te schakelen via de druktoetsen van een webpagina.
Ik zit wat vast omdat het me niet lukt om bv een led aan te schakelen via een druktoets van een webpagina en deze na x aantal tijd te laten uitschakelen.
Kan iemand me op weg helpen ,mijn code eens te bekijken en zeggen wat ik verkeerd doe of wat ik moet doen .
een stukje code hier , onderaan staat mijn ganse code
Ganse code
Het is me ondertussen gelukt om simpel weg een led aan te schakelen en die na x aantal tijd te laten uitschakelen met de "elapsedMillis.h" timer.
Hoe pak ik dit aan om hetzelfde te realiseren via een webpagina.
Het is me ondertussen ook gelukt om led's aan en uit te schakelen via de druktoetsen van een webpagina.
Ik zit wat vast omdat het me niet lukt om bv een led aan te schakelen via een druktoets van een webpagina en deze na x aantal tijd te laten uitschakelen.
Kan iemand me op weg helpen ,mijn code eens te bekijken en zeggen wat ik verkeerd doe of wat ik moet doen .
een stukje code hier , onderaan staat mijn ganse code
- Code: Alles selecteren
void SetLEDs(void)
{
elapsedMillis timer0;
#define interval0 6000 // the interval in mS
boolean timer0Fired;
//LED 1 (pin 7) VERWARMING_LIVING
if (StrContains(HTTP_req, "LED1=1")) { //webdrukknop VERWARMING_LIVING
timer0Fired = false;
timer0 = 0; // clear the timer at the end of startup
LED_state[0] = 1; // VERWARMING_LIVING ingeschakeld
digitalWrite(7, HIGH);
}
else if ((StrContains(HTTP_req, "LED1=0"))||((!timer0Fired) && (timer0 > interval0))){ //webdrukknop VERWARMING_LIVING
LED_state[0] = 0; // VERWARMING_LIVING uitgeschakeld
digitalWrite(7, LOW);
}
Ganse code
- Code: Alles selecteren
/*--------------------------------------------------------------
Program: Domotica_server
Description: Arduino web server that displays 4 analog inputs,
7 outputs
The web page is stored on the micro SD card.
Hardware: Arduino Uno and official Arduino Ethernet
shield. Should work with other Arduinos and
compatible Ethernet shields.
2Gb micro SD card formatted FAT16.
A2 to A5 analog inputs,
pins 2, 3 and 5,6,7,8,9 for the switches outputs(LEDs).
Software: Developed using Arduino 1.0.5 software
Should be compatible with Arduino 1.0 +
SD card contains web page called index.htm
--------------------------------------------------------------*/
#include <SPI.h>
#include <Ethernet.h>
#include <SD.h>
#include <elapsedMillis.h>
// size of buffer used to capture HTTP requests
#define REQ_BUF_SZ 60
// MAC address from Ethernet shield sticker under board
//byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x94, 0x59 }; //
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0x0D, 0xC7 };
byte gateway[] = { 192, 168, 0, 1 }; //
byte subnet[] = { 255, 255, 255, 0 }; //
IPAddress ip(192, 168, 0, 20); // IP address, may need to change depending on network
EthernetServer server(80); // create a server at port 80
File webFile; // the web page file on the SD card
char HTTP_req[REQ_BUF_SZ] = {0}; // buffered HTTP request stored as null terminated string
char req_index = 0; // index into HTTP_req buffer
boolean LED_state[7] = {0}; // stores the states of the LEDs
void setup()
{
// disable Ethernet chip
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
Serial.begin(9600); // for debugging
// initialize SD card
Serial.println("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("ERROR - SD card initialization failed!");
return; // init failed
}
Serial.println("SUCCESS - SD card initialized.");
// check for index.htm file
if (!SD.exists("index.htm")) {
Serial.println("ERROR - Can't find index.htm file!");
return; // can't find index file
}
Serial.println("SUCCESS - Found index.htm file.");
// switches on pins 2, 3 and 5
pinMode(0, INPUT);
pinMode(1, INPUT);
// LEDs
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
//pin 4 for SD card
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
// pin 10,11,12,13 for ethernet
// A0 = pin16 ->is hier digitaal ingesteld
// A1 analoge ingang 1
// A2 analoge ingang 2
// A3 analoge ingang 3
// A4 analoge ingang 4
// A5 analoge ingang 5
Ethernet.begin(mac, ip); // initialize Ethernet device
server.begin(); // start to listen for clients
}
void loop()
{
EthernetClient client = server.available(); // try to get client
if (client) { // got client?
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) { // client data available to read
char c = client.read(); // read 1 byte (character) from client
// limit the size of the stored received HTTP request
// buffer first part of HTTP request in HTTP_req array (string)
// leave last element in array as 0 to null terminate string (REQ_BUF_SZ - 1)
if (req_index < (REQ_BUF_SZ - 1)) {
HTTP_req[req_index] = c; // save HTTP request character
req_index++;
}
// last line of client request is blank and ends with \n
// respond to client only after last line received
if (c == '\n' && currentLineIsBlank) {
// send a standard http response header
client.println("HTTP/1.1 200 OK");
// remainder of header follows below, depending on if
// web page or XML page is requested
// Ajax request - send XML file
if (StrContains(HTTP_req, "ajax_inputs")) {
// send rest of HTTP header
client.println("Content-Type: text/xml");
client.println("Connection: keep-alive");
client.println();
SetLEDs();
// send XML file containing input states
XML_response(client);
}
else { // web page request
// send rest of HTTP header
client.println("Content-Type: text/html");
client.println("Connection: keep-alive");
client.println();
// send web page
webFile = SD.open("index.htm"); // open web page file
if (webFile) {
while(webFile.available()) {
client.write(webFile.read()); // send web page to client
}
webFile.close();
}
}
// display received HTTP request on serial port
Serial.print(HTTP_req);
// reset buffer index and all buffer elements to 0
req_index = 0;
StrClear(HTTP_req, REQ_BUF_SZ);
break;
}
// every line of text received from the client ends with \r\n
if (c == '\n') {
// last character on line of received text
// starting new line with next character read
currentLineIsBlank = true;
}
else if (c != '\r') {
// a text character was received from client
currentLineIsBlank = false;
}
} // end if (client.available())
} // end while (client.connected())
delay(1); // give the web browser time to receive the data
client.stop(); // close the connection
} // end if (client)
}
// checks if received HTTP request is switching on/off LEDs
// also saves the state of the LEDs
void SetLEDs(void)
{
elapsedMillis timer0;
#define interval0 6000 // the interval in mS
boolean timer0Fired;
//LED 1 (pin 7) VERWARMING_LIVING
if (StrContains(HTTP_req, "LED1=1")) { //webdrukknop VERWARMING_LIVING
timer0Fired = false;
timer0 = 0; // clear the timer at the end of startup
LED_state[0] = 1; // VERWARMING_LIVING ingeschakeld
digitalWrite(7, HIGH);
}
if ((!timer0Fired) && (timer0 > interval0)){ //webdrukknop VERWARMING_LIVING
LED_state[0] = 0; // VERWARMING_LIVING uitgeschakeld
digitalWrite(7, LOW);
}
// LED 2 (pin 8) VERWARMING_BADKAMER
if (StrContains(HTTP_req, "LED2=1")){ //webdrukknop VERWARMING_BADKAMER
LED_state[1] = 1; // VERWARMING_BADKAMER ingeschakeld
digitalWrite(8, HIGH);
}
else if (StrContains(HTTP_req, "LED2=0")){ //webdrukknop VERWARMING_BADKAMER
LED_state[1] = 0; // VERWARMING_BADKAMER uitgeschakeld
digitalWrite(8, LOW);
}
// LED 3 (pin 9)BOILER
int Boilerknop = 0;
Boilerknop = digitalRead(16); // read the input pin A2 alarm drukknop
if ((StrContains(HTTP_req, "LED3=1"))||((LED_state[0] == 0)&&(Boilerknop == HIGH))){ //webdrukknop BOILER
LED_state[2] = 1; // BOILER ingeschakeld
digitalWrite(9, HIGH);
}
else if ((StrContains(HTTP_req, "LED3=0"))||((LED_state[0] == 1)&&(Boilerknop == HIGH))){ //webdrukknop BOILER
LED_state[2] = 0; // BOILER uitgeschakeld
digitalWrite(9, LOW);
}
}
// send the XML file with analog values, switch status
// and LED status
void XML_response(EthernetClient cl)
{
int analog_val; // stores value read from analog inputs
int count; // used by 'for' loops
cl.print("<?xml version = \"1.0\" ?>");
cl.print("<inputs>");
// read analog inputs
for (count = 2; count <= 5; count++) { // A2 to A5
analog_val = analogRead(count);
cl.print("<analog>");
cl.print(analog_val);
cl.println("</analog>");
}
// read switches
// checkbox LED states
// button LED states
// LED1
cl.print("<LED>");
if (LED_state[0]) {
cl.print("on");
}
else {
cl.print("off");
}
cl.println("</LED>");
// LED2
cl.print("<LED>");
if (LED_state[1]) {
cl.print("on");
}
else {
cl.print("off");
}
cl.println("</LED>");
// LED3
cl.print("<LED>");
if (LED_state[2]) {
cl.print("on");
}
else {
cl.print("off");
}
cl.println("</LED>");
cl.print("</inputs>");
}
// sets every element of str to 0 (clears array)
void StrClear(char *str, char length)
{
for (int i = 0; i < length; i++) {
str[i] = 0;
}
}
// searches for the string sfind in the string str
// returns 1 if string found
// returns 0 if string not found
char StrContains(char *str, char *sfind)
{
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len) {
return 0;
}
while (index < len) {
if (str[index] == sfind[found]) {
found++;
if (strlen(sfind) == found) {
return 1;
}
}
else {
found = 0;
}
index++;
}
return 0;
}
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Led vertraagd uitschakelen
logisch:
Dit gaat sowieso fout :
De 3 regels na de functie definitie zijn local. Met andere woorden die worden elke keer opnieuw gecreëerd als de functie wordt aangeroepen. Dus heb je hem net gezet bij het aanroepen van die functie, ben je de setting weer kwijt zodra de functie is afgelopen.
Probeer het eens door ze voor de allereerste functie te zetten. Bijvoorbeeld net na de include statements. En gelijk verwijderen uit de functie zelf anders gaat het nog steeds niet goed.
Dit gaat sowieso fout :
- Code: Alles selecteren
void SetLEDs(void) {
elapsedMillis timer0;
#define interval0 6000 // the interval in mS
boolean timer0Fired;
De 3 regels na de functie definitie zijn local. Met andere woorden die worden elke keer opnieuw gecreëerd als de functie wordt aangeroepen. Dus heb je hem net gezet bij het aanroepen van die functie, ben je de setting weer kwijt zodra de functie is afgelopen.
Probeer het eens door ze voor de allereerste functie te zetten. Bijvoorbeeld net na de include statements. En gelijk verwijderen uit de functie zelf anders gaat het nog steeds niet goed.
- KRISKRAS9660
- Berichten: 22
- Geregistreerd: 02 Dec 2013, 05:52
Re: Led vertraagd uitschakelen
merci Nico voor de tip.
het is me uiteindelijk gelukt...
het is me uiteindelijk gelukt...
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 19 gasten