Beste allemaal, na het aanpassen van mijn code het het proberen van het toevoegen van een watchdog timer krijg ik dus de volgende foutmelding.
retrieve output: pipe: The handle is invalid
Ik ben hier heel eerlijk en zeg er dus bij dat ik eigenlijk te vroeg vooruit gesprongen ben en begonnen ben met code te kopiëren aanpassen en werkend te krijgen om ook iets functioneels met mijn arduino te doen dan alleen maar wat lampjes aan en uit te krijgen en wat geluid hier en daar te produceren. Waarschijnlijk had ik daarmee het een en ander wat sneller geleerd maar het ligt niet in mijn straatje. Is niet lui zijn maar meer zo van eerst proberen daarna de handleiding lezen. Gelukkig is de arduino daar wel redelijk bestand tegen.
maar nu dus niet!
Dit is mijn code die ik erop heb staan op het moment:
/* Photocell simple testing sketch.
Connect one end of the photocell to 5V, the other end to Analog 0.
Then connect one end of a 10K resistor from Analog 0 to ground
Connect LED from pin 11 through a resistor to ground
For more information see http://learn.adafruit.com/photocells */
// dit deel voor de sleep
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
volatile int f_wdt=1;
int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the sensor divider
int LEDROOD = 11; // connect Red LED to pin 11 (PWM pin)
int LEDGEEL = 10; // connect Red LED to pin 10 (PWM pin)
//slaapcode
ISR(WDT_vect)
{
if(f_wdt == 0)
{
f_wdt=1;
}
}
void enterSleep(void)
{
set_sleep_mode(SLEEP_MODE_PWR_SAVE); //EDIT: could also use SLEEP_MODE_PWR_DOWN for lowest power consumption.
sleep_enable();
// Now enter sleep mode.
sleep_mode();
// The program will continue from here after the WDT timeout
sleep_disable(); // First thing to do is disable sleep.
// Re-enable the peripherals.
power_all_enable();
}
void setup(void) {
// We'll send debugging information via the Serial monitor
Serial.begin(9600);
/* Clear the reset flag. */
MCUSR &= ~(1<<WDRF);
/* In order to change WDE or the prescaler, we need to
* set WDCE (This will allow updates for 4 clock cycles).
*/
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* set new watchdog timeout prescaler value */
WDTCSR = 1<<WDP0 | 1<<WDP3; /* 8.0 seconds */
/* Enable the WD interrupt (note no reset). */
WDTCSR |= _BV(WDIE);
}
void loop(void) {
photocellReading = analogRead(photocellPin);
Serial.print("Analog reading = ");
Serial.println(photocellReading); // the raw analog reading
if (photocellReading >= 400) {
Serial.println("afstand groot"); // distance greater than 75 cm
Serial.println(photocellReading);
digitalWrite(LEDROOD, HIGH);
}
else {
Serial.println("afstand ok");
Serial.println(photocellReading);
digitalWrite(LEDROOD, LOW);
}
if (photocellReading <= 100) { // distance less then 25 cm
Serial.println("afstand klein");
Serial.println(photocellReading);
digitalWrite(LEDROOD, HIGH);
delay(500);
digitalWrite(LEDROOD, LOW);
delay(500);
digitalWrite(LEDROOD, HIGH);
delay(500);
digitalWrite(LEDROOD, LOW);
delay(500);
enterSleep();
}
else {
digitalWrite(LEDGEEL, HIGH);
}
//delay before next reading
delay(5000);
}
Duidelijk mag zijn dat ik van de watchdog geen flauw idee heb en het daar waarschijnlijk nis is gegaan. Is er iemand die mij een handje kan helpen hier?
Een tik op mijn vingers is waarschijnlijk niet misplaatst en die zal ik dan ook gemoedelijk accepteer, hopelijk met daarna een duwtje in de juiste richting