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
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.
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:
void functie() {
}
Dan betekent dit dat je een functie hebt die niets teruggeeft.
Als er bijvoorbeeld staat:
int functie(){
}
Dan betekent dat dat je een functie hebt die een int teruggeeft maar geen parameters heeft
als er staat
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.
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.
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
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
}
}
}
@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.
ik je code aangepast naar een state machine met goede variabelenamen en dat geeft.
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
}
}
}