switch case help

Arduino specifieke Software
Berichten: 14
Geregistreerd: 09 Mrt 2013, 00:00

Re: switch case help

Berichtdoor bauer1 » 11 Dec 2013, 22:58

oke hier gaan we:
Code: Alles selecteren
//This Arduino sketch reads DS18B20 "1-Wire" digital
// temperature sensors.
// Tutorial:
// http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
int ledm =7; // led is at pin 7 (to be relay pump)
int ledr =6; // to be relay heater
int SettempX = 23;// begin temp 25C variable for settemp
int Periode = 00;
int Maischtijd1 = 120000;//60000=1 min
int Maischtijd2 = 90000;
int Maischtijd3 = 90000;
int kPinButton1 = A2;//startbutton analoog2
long Starttijd;
// Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 2
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int backLight = 13; // pin 13 will control the backlight

// Data wire is plugged into pin 8 on the Arduino
#define ONE_WIRE_BUS 8

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

DeviceAddress maischpan = {
  0x28, 0xD2, 0x9F, 0x63, 0x03, 0x00, 0x00, 0x90 };
DeviceAddress retourleiding = {
  0x28, 0x1B, 0xAB, 0x63, 0x03, 0x00, 0x00, 0x02 };

void setup(void)
{
  // Start up the library
  sensors.begin();
  // set the resolution to 10 bit (good enough?)
  sensors.setResolution(maischpan, 10);
  sensors.setResolution(retourleiding, 10);

  pinMode (ledm, OUTPUT);
  pinMode (ledr, OUTPUT);
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH); // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
  lcd.clear(); // start with a blank screen
  unsigned long Starttijd;
  Starttijd = millis();
  pinMode(kPinButton1, INPUT);
  digitalWrite(kPinButton1, HIGH); //high is std vallue port
  Serial.begin (9600);
}

void printTemperature(DeviceAddress deviceAddress)
{
  float Settemp= SettempX;
  float tempC = sensors.getTempC(deviceAddress);
  if (tempC == -127.00) {
    lcd.print("Error");
  }
  else {
    lcd.print(tempC);
  }
  {
    float tempC = sensors.getTempC(maischpan);
    if (tempC > Settemp)
    {
      digitalWrite (ledm, HIGH);
    }
    else
    {
      digitalWrite (ledm, LOW);
    }
  }
  {
    float tempC = sensors.getTempC(retourleiding);
    if (tempC > Settemp + 5) //HLT to be 5C hotter than Maisch
    {
      digitalWrite (ledr, HIGH);
    }
    else
    {
      digitalWrite (ledr, LOW);
    }
  }
}

// timer part
int buttonState = 0;
// read the state of the pushbutton value:

void loop (void)
{
  buttonState = digitalRead(kPinButton1);
  // check if the pushbutton is pressed. if it is, the buttonState is LOW:
  if (buttonState == LOW){
    Starttijd = millis();
  }
  Periode=1;
  //timer1
  {
    if (millis()> (Starttijd + Maischtijd1)){
      Periode=2;
    }
    //timer2
    {
      if (millis()> (Starttijd + Maischtijd2 + Maischtijd1)){
        Periode=3;
      }
      //timer 3
      {
        if (millis()> (Starttijd + Maischtijd2 + Maischtijd1 + Maischtijd3)){
          Periode=4;
        }
        //periode 4 alles is klaar
        // todo eindtijd stop alles
      }

      delay(5000);
      sensors.requestTemperatures();
      lcd.setCursor(0,0);
      lcd.print("maisch: ");
      printTemperature(maischpan);

      Serial.println("Periode:");
      Serial.println (Periode);
      //printTemperature(maischpan);
      lcd.setCursor(0,1);
      lcd.print("retour: ");
      printTemperature(retourleiding);
      Serial.println("settempX:");
      Serial.println (SettempX);
      Serial.println("buttonState:");
      Serial.println(buttonState);
      Serial.println("Starttijd:");
      Serial.println(Starttijd);
    }
  }


  switch (Periode) {
  case 1:
    Periode=1;
    (SettempX = 23);
    break;
    // break is optional
  case 2:
    Periode=2;
//    (SettempX = 24);
    break;
  case 3:
    Periode=3;
    (SettempX = 25);
    break;
  case 4:
    Periode=4;
    (SettempX= 100);
    digitalWrite (ledm, LOW);
    digitalWrite (ledr, LOW);
    break;
  }
}


of het nu leesbaarder is ...

ik heb geprobeerd eea compacter te maken
maar met mijn beperkte kennis heb ik alle accolades nodig
de format functie heb ik niet gevonden

nico

Advertisement

Berichten: 14
Geregistreerd: 09 Mrt 2013, 00:00

Re: switch case help

Berichtdoor bauer1 » 23 Dec 2013, 20:09

goedenavond,

wil iemand mij helpen en hier nog eens naar kijken?

dankje wel


Nico

Berichten: 14
Geregistreerd: 09 Mrt 2013, 00:00

Re: switch case help

Berichtdoor bauer1 » 30 Dec 2013, 23:23

helaas, niemand reageerde op mijn vorige vraag.
ik heb intussen gevonden waar het fout gaat maar weet niet hoe het op te lossen
aan het begin declareer ik Maischtijd1, Maischtijd2 etc en geef ze een waarde 12000

daar waar in de vergelijking millis() >(starttijd+maischtijd1) gaat het mis in plaats dat er bij de starttijd 12000 opgeteld wordt is de waarde van starttijd+12000 negatief( -11072) wat moet ik doen om er gewoon de waarde van Maischtijd1 erbij op te tellen...

Nico

Berichten: 108
Geregistreerd: 07 Aug 2013, 21:34

Re: switch case help

Berichtdoor KrisG » 31 Dec 2013, 10:32

Alles delen door pakweg 1000 ?
Kris
Als je het probleem gedetailleerd genoeg omschrijft, heb je meestal al de oplossing.

Berichten: 14
Geregistreerd: 09 Mrt 2013, 00:00

Re: switch case help

Berichtdoor bauer1 » 31 Dec 2013, 12:49

ik ben eruit!

ik heb int gebruikt voor de Maischtijden

deze zijn te lang ik heb ze nu als "long" gedeclareerd en nu werkt het!

al doende leert men

nico

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

Re: switch case help

Berichtdoor nicoverduin » 31 Dec 2013, 17:10

Klopt, over het hoofd gezien :). Ik werk standaard altijd met unsigned long voor dingen als millis(), microseconds etc.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Majestic-12 [Bot] en 77 gasten