Go Down

Topic: wie kan mij helpen!!! (Read 1 time) previous topic - next topic

Jun 03, 2014, 01:08 pm Last Edit: Jun 03, 2014, 04:33 pm by Jantje Reason: 1
Ik heb meerdere void`s gemaakt in mijn void loop.
Nu wil ik graag van: void Display_Alarm_uit() naar StartScherm_Alarm_aan() gaan.
Ik wil dus niet dat hij mijn Void loop door loopt.

Zie voor beeld

Code: [Select]
void Display_Alarm_uit()
{
 digitalWrite(led1, HIGH);
  // ClearScreen
 lcd.setCursor(0,0);
 lcd.print("                    ");
 lcd.setCursor(0,1);
 lcd.print("                    ");
 lcd.setCursor(0,2);
 lcd.print("                    ");
 lcd.setCursor(0,3);
 lcd.print("                    ");
 lcd.setCursor(0,0);
 
 // Zet logo er in (pincode juist Alarm is uit)
 lcd.setCursor(0,0);
 lcd.print("********************");
 lcd.setCursor(0,1);
 lcd.print("*  PINCODE JUIST   *");
 lcd.setCursor(0,2);
 lcd.print("*   Alarm is uit   *");
 lcd.setCursor(0,3);
 lcd.print("********************");
 
 delay(5000);
 digitalWrite(led1, LOW);
 
 StartScherm_Alarm_aan(); //naar deze void moet hij heen gaan.

UPDATED:moderator added code tags
 

nicoverduin

Eerst maar ff wat erminolgie duidelijk maken:
void = leeg. waar jij het over hebt (zodat ook anderen je snappen) heet een functie.

dus als je schrijft:
Code: [Select]

void functie() {
}

Dan betekent dit dat je een functie hebt die niets teruggeeft.

Als er bijvoorbeeld staat:
Code: [Select]

int functie(){
}

Dan betekent dat dat je een functie hebt die een int teruggeeft maar geen parameters heeft

als er staat
Code: [Select]

int optellen(int x, int y) {
  return x + y;
}

Dan heb je een functie die x en y optelt en het resultaat teruggeeft als int.

Dan voor jouw programma:
Elke arduino sketch heeft ALTIJD een setup() en een loop() functie nodig. Dat heeft te maken met bepaalde zaken die buiten jou omgaan gebeuren en zijn in in principe niet beïnvloedbaar.
Binnen een sketch heb je dus altijd de loop die oneindig doorloopt. Je moet dus een structuur opzetten van functies die vanuit de loop() worden aangeroepen. Wel kun je rustig vanuit een functie weer een andere functie aanroepen.
Maar als startscherm je hoofdscherm is, dan zou ik daarmee beginnen. Als display_alarm_uit() een eenmailige functie zou zijn, kun je overwegen om deze vanuit de setup() aan te roepen. Echter gezien het soort vraagstuk zou ik het nog niet te ingewikkeld maken voor jezelf. Daarvoor is meer ervaring nodig en op basis van jouw vraag ontbreekt die nogal enigzins.
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl

Zoals ik het lees zou een switch case ook een oplossing kunnen zijn, door een variabele aan te passen kun je dan schakkelen tussen verschillende delen van je code.

Groet,

Tom

nicoverduin

Klopt, maar ik ben bang dat gezien het soort vragen dat hij stelt dat hij er beter aan doet om eerst de basis te leren.....
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl

Dan zou je inderdaad met een switch case, of eenvoudiger met een if else, kunnen switchen tussen delen van je code, door een variable aan te passen kun je programma dan door verschillende delen van je code leiden.

bijvoorbeeld

Code: [Select]

int variable = 1;

void setup() {

}

void loop() {
  if (variable == 1)
  {
    //doe functie 1
    if (voorwaarde == true)
    {
      variable = 2;
    }
  }
  else if (variable == 2)
  {
    // doe functie2
    if (voorwaarde2 == true)
    {
      variable = 1; // 1 als je terug wil naar vorige functie, 3 als je nog iets anders wil doen
    }
  }
}


Groet,

Tom

Jantje

@tom
Wat je hier maakt is een state machine. De meeste nieuwkomers beginnen al te beven bij de naam alleen, maar eigenlijk is er niks aan  8).
De code wordt wel een pak verstaanbaarder met goede variabele namen. Gelieve die dan in het vervolg ook te gebruiken.  :P
ik je code aangepast naar een state machine met goede variabelenamen en dat geeft.

Code: [Select]

const int startStatus=1;  //mag ook met #define startStatus 1
const int GaDoorStatus=2;  //mag ook met #define GaDoorStatus 2
//Of nog beter met een enum (mar niet voor voorbeeld code)

int HuidigeStatus = startStatus;

void setup() {

}

void loop() {
  if (HuidigeStatus == startStatus)  //dit kan wel beter met een switch maar als voorbeeld denk ik dat een "als dan boom"
                                                                    // beter verstaanbaar is voor beginnelingen
  {
    // begin van doe wat je moet doen in de startStatus

   // einde van doe wat je moet doen in de startStatus
    if (voorwaardeOmNaarGaDoorStatusTeGaan == true)
    {
      HuidigeStatus = GaDoorStatus;  // verander de status naar GaDoorStatus
    }
  }
  else if (HuidigeStatus == GaDoorStatus)
  {
    // begin van doe wat je moet doen in de GaDoorStatus

   // einde van doe wat je moet doen in de GaDoorStatus
    if (voorwaardeOmNaarStartStatusTeGaan == true)
    {
      HuidigeStatus = startStatus; // verander de status naar startStatus
    }
  }
}
Do not PM me a question unless you are prepared to pay for consultancy.
Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -

Heren, bedankt voor de tips en voorbeelden.  :)
ik ga er vanavond mee aan de slag en laat het wel even weten of het gelukt is.

Groet,

Marcel

Go Up