From 9a3c6adf8d72b1c0d4d5506b1ac1d83db6539fc1 Mon Sep 17 00:00:00 2001 From: harald42 Date: Tue, 12 Apr 2016 10:34:40 +0200 Subject: [PATCH] add mcu_sleep routines --- apps/arduino/arduino-process.c | 30 ++++++++++++++++++++- apps/arduino/arduino-process.h | 7 +++++ examples/osd/arduino-climate3/sketch.pde | 8 +++--- examples/osd/arduino-dallastemp/sketch.pde | 6 ++--- examples/osd/arduino-distance/sketch.pde | 8 +++--- examples/osd/arduino-dooralert/sketch.pde | 6 ++++- examples/osd/arduino-htu21/sketch.pde | 29 +++++++++----------- examples/osd/arduino-merkurboard/sketch.pde | 9 +++---- examples/osd/arduino-wateralert/sketch.pde | 5 ++-- 9 files changed, 71 insertions(+), 37 deletions(-) diff --git a/apps/arduino/arduino-process.c b/apps/arduino/arduino-process.c index ff26d6abd..d3041e602 100644 --- a/apps/arduino/arduino-process.c +++ b/apps/arduino/arduino-process.c @@ -54,6 +54,34 @@ #include "adc.h" #include "hw-arduino.h" +extern volatile uint8_t mcusleepcycle; +volatile uint8_t mcusleepcycleval; + +/*-------------- enabled sleep mode ----------------------------------------*/ +void +mcu_sleep_init(void) +{ + mcusleepcycleval=mcusleepcycle; +} +void +mcu_sleep_on(void) +{ + mcusleepcycle= mcusleepcycleval; +} +/*--------------- disable sleep mode ---------------------------------------*/ +void +mcu_sleep_off(void) +{ + mcusleepcycle=0; +} +/*---------------- set duty cycle value ------------------------------------*/ +void +mcu_sleep_set(uint8_t value) +{ + mcusleepcycleval= value; + mcusleepcycle = mcusleepcycleval; +} + PROCESS(arduino_sketch, "Arduino Sketch Wrapper"); #ifndef LOOP_INTERVAL @@ -65,8 +93,8 @@ PROCESS_THREAD(arduino_sketch, ev, data) static struct etimer loop_periodic_timer; PROCESS_BEGIN(); - adc_init (); + mcu_sleep_init (); setup (); /* Define application-specific events here. */ etimer_set(&loop_periodic_timer, LOOP_INTERVAL); diff --git a/apps/arduino/arduino-process.h b/apps/arduino/arduino-process.h index 23b00ede4..bea6708f8 100644 --- a/apps/arduino/arduino-process.h +++ b/apps/arduino/arduino-process.h @@ -51,6 +51,13 @@ #include "contiki.h" +/*--------------- enable sleep mode ---------------------------------------*/ +void mcu_sleep_on(void); +/*--------------- disable sleep mode ---------------------------------------*/ +void mcu_sleep_off(void); +/*---------------- set sleep value ------------------------------------*/ +void mcu_sleep_set(uint8_t value); + extern void loop (void); extern void setup (void); extern void arduino_init (void); diff --git a/examples/osd/arduino-climate3/sketch.pde b/examples/osd/arduino-climate3/sketch.pde index fd1bee2c0..9f9cb22d7 100644 --- a/examples/osd/arduino-climate3/sketch.pde +++ b/examples/osd/arduino-climate3/sketch.pde @@ -17,12 +17,10 @@ extern "C" { - +#include "arduino-process.h" #include "rest-engine.h" #include "sketch.h" -extern volatile uint8_t mcusleepcycle; // default 16 - // Data wire is plugged into port 2 on the Arduino #define ONE_WIRE_BUS 3 #define TEMPERATURE_PRECISION 9 @@ -130,7 +128,7 @@ void setup (void) // LOOP_INTERVAL (20 * CLOCK_SECOND) void loop (void) { - mcusleepcycle=0; // dont sleep + mcu_sleep_off(); // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus // printf("Requesting temperatures..."); @@ -156,5 +154,5 @@ void loop (void) printf("Temp: %s",htu21d_temp_s); printf("\t\tHum: %s\n",htu21d_hum_s); - mcusleepcycle=32; // sleep, wakeup every 32 cycles + mcu_sleep_on(); } diff --git a/examples/osd/arduino-dallastemp/sketch.pde b/examples/osd/arduino-dallastemp/sketch.pde index 0aaff48e2..37f5c4413 100644 --- a/examples/osd/arduino-dallastemp/sketch.pde +++ b/examples/osd/arduino-dallastemp/sketch.pde @@ -15,7 +15,7 @@ extern "C" { - +#include "arduino-process.h" #include "rest-engine.h" #include "sketch.h" @@ -161,7 +161,7 @@ void setup (void) // LOOP_INTERVAL (10 * CLOCK_SECOND) void loop (void) { - mcusleepcycle=0; // dont sleep + mcu_sleep_off(); // call sensors.requestTemperatures() to issue a global temperature // request to all devices on the bus printf("Requesting temperatures..."); @@ -171,7 +171,7 @@ void loop (void) // print the device information printData(insideThermometer,0); printData(outsideThermometer,1); - mcusleepcycle=32; // sleep, wakeup every 32 cycles + mcu_sleep_on(); // debug only } diff --git a/examples/osd/arduino-distance/sketch.pde b/examples/osd/arduino-distance/sketch.pde index 2233e0a7b..11d268b1c 100644 --- a/examples/osd/arduino-distance/sketch.pde +++ b/examples/osd/arduino-distance/sketch.pde @@ -11,11 +11,11 @@ */ extern "C" { +#include "arduino-process.h" #include "sketch.h" #include "rest-engine.h" #include "net/netstack.h" -extern volatile uint8_t mcusleepcycle; // default 16 extern resource_t res_battery, res_distance; #define LED_PIN 4 /* LED Pin */ @@ -39,8 +39,8 @@ void setup (void) void loop (void) { - mcusleepcycle=0; // dont sleep - - mcusleepcycle=16; // sleep, wakeup every 32 cycles + mcu_sleep_off(); + + mcu_sleep_on(); } diff --git a/examples/osd/arduino-dooralert/sketch.pde b/examples/osd/arduino-dooralert/sketch.pde index 67603c19a..d7de583c8 100644 --- a/examples/osd/arduino-dooralert/sketch.pde +++ b/examples/osd/arduino-dooralert/sketch.pde @@ -11,6 +11,7 @@ */ extern "C" { +#include "arduino-process.h" #include "rest-engine.h" extern resource_t res_door, res_battery; @@ -29,9 +30,12 @@ void setup (void) rest_init_engine (); rest_activate_resource (&res_door, "s/door"); rest_activate_resource (&res_battery, "s/battery"); + // NETSTACK_MAC.off(1); } void loop (void) { - + mcu_sleep_off(); + + mcu_sleep_on(); } diff --git a/examples/osd/arduino-htu21/sketch.pde b/examples/osd/arduino-htu21/sketch.pde index 93dc1d1c3..2336e111f 100644 --- a/examples/osd/arduino-htu21/sketch.pde +++ b/examples/osd/arduino-htu21/sketch.pde @@ -14,12 +14,9 @@ #include "Adafruit_HTU21DF.h" extern "C" { - - +#include "arduino-process.h" #include "rest-engine.h" -extern volatile uint8_t mcusleepcycle; // default 16 - Adafruit_HTU21DF htu = Adafruit_HTU21DF(); extern resource_t res_htu21dtemp, res_htu21dhum, res_battery; @@ -51,19 +48,19 @@ void setup (void) // LOOP_INTERVAL (10 * CLOCK_SECOND) void loop (void) { - mcusleepcycle=0; // dont sleep - htu21d_temp = htu.readTemperature(); - htu21d_hum = htu.readHumidity(); - mcusleepcycle=32; // sleep, wakeup every 32 cycles - dtostrf(htu21d_temp , 6, 2, htu21d_temp_s ); - dtostrf(htu21d_hum , 6, 2, htu21d_hum_s ); - // remove space - if(htu21d_temp_s[0]==' '){ - memcpy (htu21d_temp_s,htu21d_temp_s+1,strlen(htu21d_temp_s)+1); - } - if(htu21d_hum_s[0]==' '){ + mcu_sleep_off(); + htu21d_temp = htu.readTemperature(); + htu21d_hum = htu.readHumidity(); + mcu_sleep_on(); + dtostrf(htu21d_temp , 6, 2, htu21d_temp_s ); + tostrf(htu21d_hum , 6, 2, htu21d_hum_s ); + // remove space + if(htu21d_temp_s[0]==' '){ + memcpy (htu21d_temp_s,htu21d_temp_s+1,strlen(htu21d_temp_s)+1); + } + if(htu21d_hum_s[0]==' '){ memcpy (htu21d_hum_s,htu21d_hum_s+1,strlen(htu21d_hum_s)+1); - } + } // debug only // printf("Temp: %s",htu21d_temp_s); diff --git a/examples/osd/arduino-merkurboard/sketch.pde b/examples/osd/arduino-merkurboard/sketch.pde index 0f60b8dad..c5b3bc3db 100644 --- a/examples/osd/arduino-merkurboard/sketch.pde +++ b/examples/osd/arduino-merkurboard/sketch.pde @@ -11,11 +11,10 @@ */ extern "C" { +#include "arduino-process.h" #include "rest-engine.h" #include "net/netstack.h" -extern volatile uint8_t mcusleepcycle; // default 16 - extern resource_t res_leds, res_battery, res_cputemp; uint8_t door_pin = 3; uint8_t door_status = 0; @@ -39,7 +38,7 @@ void setup (void) void loop (void) { - mcusleepcycle=0; - - mcusleepcycle=16; + mcu_sleep_off(); + + mcu_sleep_on(); } diff --git a/examples/osd/arduino-wateralert/sketch.pde b/examples/osd/arduino-wateralert/sketch.pde index b8a6d559a..22aaa864f 100644 --- a/examples/osd/arduino-wateralert/sketch.pde +++ b/examples/osd/arduino-wateralert/sketch.pde @@ -11,6 +11,7 @@ */ extern "C" { +#include "arduino-process.h" #include "rest-engine.h" extern volatile uint8_t mcusleepcycle; // default 16 @@ -37,12 +38,12 @@ void setup (void) void loop (void) { - mcusleepcycle=0; // dont sleep + mcu_sleep_off(); moisture_voltage = analogRead(moisture_pin); if(moisture_voltage < 800){ digitalWrite(BUZZER_PIN, LOW); }else{ digitalWrite(BUZZER_PIN, HIGH); } - mcusleepcycle=32; // sleep, wakeup every 32 cycles + mcu_sleep_on(); }