vreemde serial.print

IDE gerelateerde berichten
Berichten: 10
Geregistreerd: 13 Dec 2015, 14:19

vreemde serial.print

Berichtdoor Kobusking » 20 Jan 2016, 22:49

Ik ben bezig met de oriëntatie voor een weerstation. Hiervoor wil ik dat mijn UNO elke 5 minuten sluimert dmv watchdogtimer.
Op zich werkt het prima, alleen krijg ik een vreemde serial.print.
In eerste instantie krijg ik de melding dat het systeem start, iets meer dan twee seconden later zou ik de meting moeten krijgen, vervolgens gaat het systeem bijna 5 minuten uit.
Maar bij de eerste meting krijg ik alleen "Luchtvochti" te zien zonder verdere metingen.
Na het opnieuw wakker worden wordt deze regel aangevuld en komt de "Luchtvochti" voor de volgende meting al in beeld....
Los van elkaar werken de scripts prima, maar gecombineerd blijf ik dit rare fenomeen krijgen. Wie weet raad.
Voor het systeem gebruik ik de DHT11, een BMP180 en een zoals al gezegd een funduino UNO.

Voor de duidelijkheid zal ik de code ook bijvoegen en de afbeelding van de serial.print
cpp code
#include <avr/sleep.h>;
#include <avr/wdt.h>;
#include <Adafruit_BMP085.h>
#include "DHT.h"
#include <Wire.h>

// You will need to create an SFE_BMP180 object, here called "pressure":
Adafruit_BMP085 bmp;

#define DHTPIN A2 // what digital pin we're connected to
int LED = 13;

// Uncomment whatever type you're using!
#define DHTTYPE DHT11 // DHT 11

//initialize DHT
DHT dht(DHTPIN, DHTTYPE);

// watchdog interrupt
ISR(WDT_vect)
{
wdt_disable(); // disable watchdog
}

void myWatchdogEnable(const byte interval)
{
MCUSR = 0; // reset various flags
WDTCSR |= 0b00011000; // see docs, set WDCE, WDE
WDTCSR = 0b01000000 | interval; // set WDIE, and appropriate delay

wdt_reset();
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_mode(); // now goes to Sleep and waits for the interrupt
}

void setup()
{
Serial.begin(9600);
Serial.println("DHT11 & bmp180 test!");
Serial.println("inclusief WatchdogTimer\n");

pinMode(LED, OUTPUT);

delay(2500); //delay to startup sensors

dht.begin();
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP180 sensor, check wiring!");
while (1) {}
}
} // end of setup

void loop()
{
// put your main code here, to run repeatedly:
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(false);

// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
return;
}

// Compute heat index in Fahrenheit (the default)
float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(t, h, false);

//compute airpressure
float airPressure = bmp.readPressure()/100;

//calculate average temperature bmp180/DHT11
float temp = (hic + bmp.readTemperature())/2;

digitalWrite(LED, HIGH);
Serial.print("Luchtvochtigheid = ");
Serial.print(h, 1);
Serial.println(" %\t");
Serial.print("Temperatuur = ");
Serial.print(temp, 1);
Serial.println(" *C");
Serial.print("Luchtdruk = ");
Serial.print(airPressure, 1);
Serial.println(" hPa\n");
digitalWrite(LED, LOW);

// sleep for a total of 296 seconds
int i;
for (i = 0; i < 37; i++)
{
myWatchdogEnable (0b100001); // 8 seconds
}
} // end ofloop

// sleep bit patterns:
// 1 second: 0b000110
// 2 seconds: 0b000111
// 4 seconds: 0b100000
// 8 seconds: 0b100001


Afbeelding

Advertisement

Berichten: 10
Geregistreerd: 13 Dec 2015, 14:19

Re: vreemde serial.print

Berichtdoor Kobusking » 20 Jan 2016, 22:54

Laat maar een delay tussen de serial.print en de WDT-opdracht was de oplossing...
Sorry, volgende keer eerst iets beter zoeken :D

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: vreemde serial.print

Berichtdoor shooter » 20 Jan 2016, 23:30

jij gooit je processor plat, voordat de serial klaar is met zijn berichten.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 13 Dec 2015, 14:19

Re: vreemde serial.print

Berichtdoor Kobusking » 20 Jan 2016, 23:46

Ging er vanuit dat een nieuwe taak pas uitgevoerd zou worden na het afronden van de vorige taak, in dit geval de serie.print. :-)

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: vreemde serial.print

Berichtdoor shooter » 21 Jan 2016, 10:42

een aantal taken kan zeker naast elkaar lopen,
intern wordt een buffer gebruikt voor de serial en als er weer een puls moet komen wordt een interne interupt gebruikt die even het volgende bitje klaar zet.
jij gebruikt dat ook al, met je interupt timer.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 13 Dec 2015, 14:19

Re: vreemde serial.print

Berichtdoor Kobusking » 21 Jan 2016, 20:30

Ben net begonnen met arduino, dus moet nog veel, heel veel leren ;)

Gebruikers-avatar
Berichten: 26
Geregistreerd: 22 Dec 2015, 13:40
Woonplaats: Zandvoort

Re: vreemde serial.print

Berichtdoor marc verlooy » 19 Mrt 2016, 15:38

is het niet vreemd om \h tussen de aanhalingstekens te hebben staan? Dit zou best tot rare effecten kunnen leiden.. Probeer ze eens weg te halen...

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: vreemde serial.print

Berichtdoor nicoverduin » 19 Mrt 2016, 17:03

Waar zie jij \h?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino IDE

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten