uitgang schakelen door ds18b20

Hardware die niet past in bovenstaande onderwerpen
Berichten: 47
Geregistreerd: 24 Nov 2014, 19:47

uitgang schakelen door ds18b20

Berichtdoor corolla_g6 » 02 Feb 2015, 20:45

ik ben bezig met een grote sketch maar ik wil eerst in het klein proberen,

de bedoeling is dat onder een bepaalde temperatuur het relais hoog gaat, maar volgens de software doe ik niks ''fout''

hoop dat jullie mij kunnen helpen.

cpp code
#include <OneWire.h>
#include "Wire.h"
#include <LiquidCrystal.h>

#define outWaterOrnament 47

OneWire ds(8);

float celsius ;
float VorstTempUit = 17;

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

void setup() {


lcd.begin(20, 4);

Serial.begin(9600);
}


void loop() {







if (VorstTempUit <= celsius) {
digitalWrite(outWaterOrnament, LOW);
} else {
digitalWrite(outWaterOrnament, HIGH);
}


byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
//float celsius;

if ( !ds.search(addr)) {

ds.reset_search();
delay(250);
return;
}


for( i = 0; i < 8; i++) {

}

if (OneWire::crc8(addr, 7) != addr[7]) {

return;
}

switch (addr[0]) {
case 0x10:
type_s = 1;
break;
case 0x28:
type_s = 0;
break;
case 0x22:
type_s = 0;
break;
default:
return;
}



ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end

delay(1000); // maybe 750ms is enough, maybe not


present = ds.reset();
ds.select(addr);
ds.write(0xBE);


for ( i = 0; i < 9; i++) {
data[i] = ds.read();

}

int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3;
if (data[7] == 0x10) {

raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);

if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms

}
celsius = (float)raw / 16.0;
lcd.setCursor(5, 2);
lcd.print(celsius);





delay(1000);




}

Advertisement

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

Re: uitgang schakelen door ds18b20

Berichtdoor nicoverduin » 02 Feb 2015, 23:56

En celcius geeft de juiste temperatuur?
Overigens zou ik als ik een float een waarde neerzet, dit doen met
cpp code
float VorstTempUit = 17.0;

tip: als je een pin als output wil gebruiken, moet je wel de pinMode opgeven als OUTPUT in de setup().
Dat je compile technisch geen fouten hebt betekent alleen dat de syntax goed is. Niet dat je programma goed is.

Tenslotte het is goed voor de andere lezers, als je wat commentaar toevoegd zodat een ander ook begrijpt wat je wilt doen en maakt oplossen vaak veel eenvoudiger...
Kost je niets extra, programma wordt er niet groter van, nodigt een andere lezer om te begrijpen wat je doet, en als je over een jaar nog eens zelf naar dit programma kijkt, begrijp je zelf ook wat je toen bedacht
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: uitgang schakelen door ds18b20

Berichtdoor shooter » 03 Feb 2015, 09:48

(float) haakjes staan verkeerd
bij de if hetzelfde geen {}
de berekening moet ik nog nakijken.
paul deelen
shooter@home.nl

Berichten: 47
Geregistreerd: 24 Nov 2014, 19:47

Re: uitgang schakelen door ds18b20

Berichtdoor corolla_g6 » 03 Feb 2015, 19:00

nicoverduin schreef:En celcius geeft de juiste temperatuur?
Overigens zou ik als ik een float een waarde neerzet, dit doen met
cpp code
float VorstTempUit = 17.0;

tip: als je een pin als output wil gebruiken, moet je wel de pinMode opgeven als OUTPUT in de setup().
Dat je compile technisch geen fouten hebt betekent alleen dat de syntax goed is. Niet dat je programma goed is.

Tenslotte het is goed voor de andere lezers, als je wat commentaar toevoegd zodat een ander ook begrijpt wat je wilt doen en maakt oplossen vaak veel eenvoudiger...
Kost je niets extra, programma wordt er niet groter van, nodigt een andere lezer om te begrijpen wat je doet, en als je over een jaar nog eens zelf naar dit programma kijkt, begrijp je zelf ook wat je toen bedacht


echt stom nu zie ik het dat ik dat was vergeten, komt omdat ik even snel alles gekopieerd heb in een nieuwe sketch, normaal doe ik dat als eerste natuurlijk..... nu werkt het en heb hem ook ingevoerd in waar ik het nodig had, en het werkt.. 17 of 17.0 maakte voor de werking niet uit

alleen nu heb ik iets anders... ik probeerde een nieuwe sketch in de mega te laden en nu lukt het niet meer... lijkt of hij vastgelopen is? kan je dit resetten of is het gewoon over? heb met een andere mega geprobeerd en daar draait het programma nu goed op...

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

Re: uitgang schakelen door ds18b20

Berichtdoor nicoverduin » 03 Feb 2015, 19:26

Wat doet het niet meer......?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 47
Geregistreerd: 24 Nov 2014, 19:47

Re: uitgang schakelen door ds18b20

Berichtdoor corolla_g6 » 03 Feb 2015, 19:33

ik denk dat het tijdens het uploaden fout is gegaan, toen is hij gestopt en nu bij het uploaden blijft hij hangen, of hij zegt dat de com poort al bezet is.

laptop en arduino opnieuw opgestart heeft geen effect... met een andere arduino geprobeert en dat doet hij wel..

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

Re: uitgang schakelen door ds18b20

Berichtdoor nicoverduin » 03 Feb 2015, 20:03

Kennelijk is er nog iets dat die com poort bezet houdt. Soms kun jet op lossen door de driver te verwijderen en opnieuw te installeren van die com driver.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Overige hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten