Forum: Mikrocontroller und Digitale Elektronik Arduino Display Problem Zurück Menü Button 3.2"


von Nils C. (nilsconrad)


Lesenswert?

Guten Tag,

ich bin neu hier und habe gleich mal eine Frage.
Ich arbeite an einem Sensorprojekt und komme nicht weiter...
Ich habe 2 Arduinos hier, einer nimmt Sensorwerte auf und schickt sie an 
den anderen. Der soll es dann anzeigen.

Soweit funktioniert auch alles, nur komme ich nicht mehr zurück zum 
Startmenü,
er springt mir immer in mein Sensorfenster(1), egal von wo aus. 
Eventuell hat ja einer eine Idee.
Ich muss nur leider den ganzen Code reinstellen, da alles miteinander 
verbunden ist :D Hoffe es ist nicht zu viel :)

Vielen Dank schonmal im Voraus


Nils
1
#include <Arduino.h>
2
#include <Wire.h>
3
#include <UTFT.h>
4
#include <UTFT_Buttons_ITDB.h>
5
6
extern uint8_t SmallFont[];
7
extern uint8_t BigFont[];
8
extern uint8_t Dingbats1_XL[];
9
10
UTFT          myGLCD(SSD1289,38,39,40,41);
11
ITDB02_Touch  myTouch(6,5,4,3,2);
12
UTFT_Buttons  myButtons(&myGLCD, &myTouch);
13
//Buttonvariablen
14
int Sensor1;
15
int Sensor2;
16
int Back;
17
int Clear;
18
//Checkvariable zur Auswahl
19
int check;
20
boolean default_colors = true;
21
//Durchflusssensor Variablen
22
int Empfangen = 12;
23
int Durchfluss; //Ticks pro 1/10 Sekunden: 10 ist Korrekturfaktor
24
float Durchflusslh;
25
float Durchflusslm;
26
27
void setup(){
28
  myGLCD.InitLCD();
29
  myGLCD.clrScr();
30
  myGLCD.setFont(BigFont);
31
  myGLCD.setColor(VGA_WHITE);
32
  myTouch.InitTouch(1);
33
  myTouch.setPrecision(PREC_MEDIUM);
34
  myButtons.setTextFont(BigFont);
35
  myButtons.setSymbolFont(Dingbats1_XL);
36
37
  pinMode(Empfangen, OUTPUT);       //Daten Senden/Empfangen
38
  digitalWrite(Empfangen, HIGH);   //Invertiert -> Keine Daten senden
39
  Wire.begin(7);                  // I2C Beginnen, Teilnehmer 8
40
  Wire.onReceive(Empfangsevent); // Register Event: Wird immer ausgeführt: interrupt
41
  Serial.begin(9600);           // Serieller Ausgang: Terminal
42
}
43
44
void loop(){
45
  Startbild(); //Startbild erzeugen
46
  while(1)
47
  {
48
    if (myTouch.dataAvailable() == true)
49
    {
50
      check = myButtons.checkButtons();
51
52
      if(check == Sensor1){
53
        Serial.println("Sensor 1");
54
        Sensorbild1();  //Bild für Sensor 1 erzeugen und Daten verarbeiten
55
      }
56
      else if(check == Sensor2)
57
      {
58
        Serial.println("Sensor 2");
59
        Sensorbild2();  //Bild für Sensor 2 erzeugen und Daten verarbeiten
60
      }
61
      else if(check == Clear)
62
      {
63
        Serial.println("Clear");
64
        Startbild(); //Startbild erzeugen
65
      }
66
      else if(check == Back)
67
      {
68
        Serial.println("Back");
69
        Startbild();  //Startbild erzeugen
70
      }
71
    }
72
    else{}
73
  }
74
}
75
76
void Sensorbild1(){
77
  //Sensorbild 1: Durchflusssensor
78
  myGLCD.clrScr();
79
  myButtons.deleteAllButtons();
80
  myGLCD.print("Durchflusssensor", CENTER, 1);
81
  Back = myButtons.addButton( 0, 200, 120,  30, "Zurueck");
82
  myButtons.drawButton(Back);
83
84
  do{
85
    durchflussberechnung();
86
    if(Durchflusslh < 1000 && Durchflusslh > 99){ //100-999
87
      myGLCD.printNumF(Durchflusslh, 1, (100+16), 120);
88
      myGLCD.print("0", 100, 120);
89
      myGLCD.printNumF(Durchflusslm, 1, (100+16), 150);
90
      myGLCD.print("0", 100, 150);
91
    }
92
    else if(Durchflusslh < 100){ //0-99
93
      myGLCD.printNumF(Durchflusslh, 1, (100+32), 120);
94
      myGLCD.print("00", 100, 120);
95
      myGLCD.printNumF(Durchflusslm, 1, (100+32), 150);
96
      myGLCD.print("00", 100, 150);
97
    }
98
    else if(Durchflusslh > 999 ){ //1000-9999
99
      myGLCD.printNumF(Durchflusslh, 1, 100, 120);
100
      myGLCD.printNumF(Durchflusslm, 1, 100, 150);
101
    }
102
    myGLCD.print(" L/h", 200, 120);
103
    myGLCD.print(" L/m", 200, 150);
104
  }while(myTouch.dataAvailable() == false);
105
  check = Back;
106
}
107
void Sensorbild2(){
108
  //Sensorbild 2: Drucksensor
109
  myGLCD.clrScr();
110
  myButtons.deleteAllButtons();
111
  myGLCD.print("Sensor 2", CENTER, 1);
112
  Back = myButtons.addButton( 0, 200, 120,  30, "Zurueck");
113
  myButtons.drawButton(Back);
114
  myGLCD.print("Hier kommts hin!", CENTER, 100);
115
}
116
void Startbild(){
117
  //Startbild
118
  myGLCD.clrScr();
119
  myButtons.deleteAllButtons();
120
  myGLCD.print("Auswahl", CENTER, 1);
121
  Sensor1 = myButtons.addButton( 10,  40, 300,  30, "Durchflusssenor");
122
  Sensor2 = myButtons.addButton( 10,  80, 300,  30, "Sensor 2");
123
  Clear = myButtons.addButton( 10, 120, 300,  30, "Clear");
124
  myButtons.drawButton(Sensor1);
125
  myButtons.drawButton(Sensor2);
126
  myButtons.drawButton(Clear);
127
}
128
void durchflussberechnung() {
129
  digitalWrite(Empfangen, LOW);  //Interrupt auslösen
130
  digitalWrite(Empfangen, HIGH); //Statuswechsel -> Sendebefehl Arduino 1
131
  Durchflusslm = (Durchfluss*3.6*10/60);    //Liter pro Minute
132
  Durchflusslh = (Durchfluss*3.6*10);      //Liter pro Stunde
133
}
134
void Empfangsevent() {
135
  Durchfluss = (Wire.read() | (Wire.read() << 8)); // untere und obere Byte zusammensetzen
136
}

von Uwe G. (scd)


Lesenswert?


von WasLos (Gast)


Lesenswert?

Ohne den anscheinend ArduinoKram zu kennen, würde ich sagen:
Die IDs für die Button
Back und Sensor1 sind identisch. (0 oder 1)?

Unter der Annahme, dass myButtons.deleteAllButtons(); alle definierten 
Buttons löscht.

von Gerald R. (visitor)


Lesenswert?

Hallo Nils!

Startbild(); willst du vermutlich nicht in loop sondern in setup haben.

Was zeigt den das serielle Terminal an?

Für mich wäre das so logischer, habe aber keine Ahnung vom 
programmieren.

1
void loop() {
2
3
  if (myTouch.dataAvailable() == true)
4
  {
5
    check = myButtons.checkButtons();
6
  }
7
8
  if (check == Sensor1) {
9
    Serial.println("Sensor 1");
10
    Sensorbild1();  //Bild für Sensor 1 erzeugen und Daten verarbeiten
11
  }
12
13
  if (check == Sensor2)
14
  {
15
    Serial.println("Sensor 2");
16
    Sensorbild2();  //Bild für Sensor 2 erzeugen und Daten verarbeiten
17
  }
18
19
  if (check == Clear)
20
  {
21
    Serial.println("Clear");
22
    Startbild(); //Startbild erzeugen
23
  }
24
25
  if (check == Back)
26
  {
27
    Serial.println("Back");
28
    Startbild();  //Startbild erzeugen
29
  }
30
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.