Ok, ich werde das in 2 Wochen mal testen, dann sind die Klausuren vorbei.
Da das ganze ein Projekt an der FH ist habe ich mehrere Boards zum testen.
Edit 1:
Der Code ist auf keinen Fall sauber, aber mit diesem Code habe ich das Board 3 mal abgeschossen.
Das klappt nicht jedes mal, aber ab und an. Meistens habe ich vorher versucht über den Serial Monitor Daten zu übertragen und dann den Upload zu starten.
//# INCLUDES:
//# ===================================
//# DEFINES:
//# ===================================
#define MENU_MAX_STRING_LENGHT 40
//# GLOBAL:
//# ===================================
//# Timer ( schlecht gelöst, da die Funktion unten nicht unabhängig hiervon ist
long genFreq_prev = 0;
//# 33 HZ
int Freq_pin_33 = 13;
int Freq_val_33 = LOW;
int Freq_pre_33 = 0;
//# 40 Hz
int Freq_pin_40 = 12;
int Freq_val_40 = LOW;
int Freq_pre_40 = 0;
//# Menu Date
int menu_stopp = 0;
#define MENU_0_CNT 4
#define MENU_1_CNT 6
#define MENU_2_CNT 6
//# Menu Level 0
char menu_0[MENU_0_CNT][MENU_MAX_STRING_LENGHT] =
{
{"Spiel"}, // game
{"Kontest"}, // contest
{"Einstellungen"}, // settings
{"Standby"} // standby
};
//# Menu Level 1
char menu_1[MENU_0_CNT][MENU_1_CNT][MENU_MAX_STRING_LENGHT] =
{{
// game
{"0-6"}, // 0-6
{"0-10"}, // 0-10
{"0-XX"}, // 0-X
{"zurueck"}, // back 0
{"!"}
},
{
// contest
{"X Tore in X Minuten"}, // x goals x mins
{"schnellster Schuss in X Minuten"}, // fastes shoot
{"zurueck"}, // back 0
{"!"}
},
{
// settings
{"Hardware"}, // hardware
{"Software"}, // software
{"Beleuchtung"}, // lightning
{"!"}
},
{
{"?"}, // -DO-
{"standby"}, // standby
{"!"}
}};
//# Menu Level 2
char menu_2[MENU_0_CNT][MENU_1_CNT][MENU_2_CNT][MENU_MAX_STRING_LENGHT] =
{{
// game
{
// 0-6
{"?"},
{"set_game"},
{6},
{"!"}
},
{
// 0-10
{"?"},
{"set_game"},
{10},
{"!"}
}
},
{
},
{
},
{
}
};
//# FUNCTION: Frequenz Generator
//# ===================================
int genFreq(int pin,int val, long interval) {
//## Intervall erfüllt millis*micros
if(micros() - genFreq_prev > (1./interval*500*1000)) {
//## neue Zeit setzen
genFreq_prev = micros();
//## Value Setzen
if(val == LOW) {
val = HIGH;
} else {
val = LOW;
}
digitalWrite(pin, val);
}
//## Value zurückgeben
return val;
}
//# FUNCTION: menu()
//# ===================================
void menu(){
if(Serial.available() > 0) {
menu_stopp = 0;
Serial.flush();
}
if(menu_stopp == 0) {
menu_stopp = 1;
for(int i=0;i<MENU_0_CNT;i++) {
if(menu_0[i][0] == '!') {
break;
}
Serial.print(i);
Serial.print(") ");
Serial.println(menu_0[i]);
for(int j=0;j<MENU_1_CNT;j++) {
if(menu_1[i][j][0] == '!') {
break;
}
Serial.print(i);
Serial.print(".");
Serial.print(j);
Serial.print(") - ");
Serial.println(menu_1[i][j]);
/*
for(int k=0;k<MENU_2_CNT;k++) {
if(menu_2[i][j][k][0] == '!') {
break;
}
Serial.print(i);
Serial.print(".");
Serial.print(j);
Serial.print(".");
Serial.print(k);
Serial.print(") - ");
Serial.println(menu_1[i][j][k]);
}*/
}
}
}
}
//# SETUP
//# ===================================
void setup() {
//## Serial
Serial.begin(9600);
//## Outputs
pinMode(Freq_pin_33, OUTPUT); // 33 Hz
pinMode(Freq_pin_40, OUTPUT); // 40 Hz
}
//# LOOP
//# ===================================
void loop(){
//## 33 Hz
Freq_val_33 = genFreq(Freq_pin_33,Freq_val_33,10);
//## 40 Hz
//Freq_val_40 = genFreq(Freq_pin_40,Freq_val_40,40);
menu();
}
Software ist "arduino-0016"