Sketch neu drauf geladen - Display leer

Hallo zusammen,

jetzt bin ich nach längerer Zeit endlich mal wieder dazu gekommen, an der Software für mein Projekt was zu tun.

Nachdem ich heut die Tastatur für mein Steuergerät fertig gestellt hab, musste ich die Tastenzuordnung im Sketch umschreiben. Gsagt - Getan - Auf den Atmega geschoben - Kaputt.

Ich hab im Sketch wirklich nur die Tastenzuordnung umgeschrieben. Den wollte ich dann per ISP auf meinen Atmega schreiben. Sketch wurde laut IDE erfolgreich geschrieben. Erste Verwunderung: Der Atmega resetet nicht. Okay, selber Spannungsversorgung unterbrochen und widerhergestellt. Ergebnis: Display leer. Setup wird wohl nicht durchgeführt, Atmega macht wohl nichts. Was hab ich kaputt gemacht? Ich hab alles gemacht wie immer und bevor ich den geänderten Sketch rüber geschoben hab, hat alles noch einwandfrei funktioniert (zumindest in dem Rahmen, der meine Fehler im Sketch beinhaltet).

Hier mal ein Ausschnitt vom Sketch bis zum Ende des Setups:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <Keypad.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Streaming.h>


// Ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,178,999);
EthernetClient client;
char server_ip[16];
char server_ip_z[16];
int ethernet_on = 0;
int ethernet_error = 0;
int last_ethernet_check_time = 0;

// Keyboard
const byte ROWS = 2;
const byte COLS = 4;

char keys[ROWS][COLS] = {
  { 'rechts_','rauf','runter','links' },
  { 'kreuz','haken','einsa','aust' } };

byte rowPins[ROWS] = { 3, 4};
byte colPins[COLS] = { 5, 6, 7, 8 }; 

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

// LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Serial Daten
const int MAX_NUMBERS = 25;
int conSerial[MAX_NUMBERS];
int last_serial_check_time = 0;
int wait_serial = 0;
int do_what = 0;

// Ethernetbuffer
const int MAX_NUMBERS_E = 19;
int conEthernet[MAX_NUMBERS_E];
int wait_ethernet = 0;

// Turnierkonfigurationsvariablen
int scheiben[61];
int scheibe_von;
int scheibe_bis;
int scheibe_fehlt_quittier = 1;
int terminal_status = 0;
int check_scheibe = 0;
int get_scheiben_data = 0;
int check_scheiben_new = 0;
int give_scheibe_data = 0;

// Navigiervariablen
int in_menue;
int cursor_position_z;
int cursor_position_s;
char position_ip;

// Display neu laden
int display_new;

// Piesper
int piepser_time;
int piepser_status = 0;
int piepser_last_status = 0;

void setup()
{
  // Serialstart
  pinMode(2, OUTPUT);
  Serial.begin(115200);
  
  // Piesperstart
  pinMode(9, OUTPUT);
  
  // LCDstart
  lcd. begin(20,4);
  for (int i = 0; i < 2; i++)
  {
    lcd.backlight();
    delay(750);
    lcd.noBacklight();
    delay(750);
  }
  lcd.backlight();

  lcd.clear();
  lcd.setCursor(2,1);
  lcd.print("Archery Results");
  lcd.setCursor(2,2);
  lcd.print("Phillip");
  delay(5000);
  lcd.clear();

  // EEPROM auslesen
  EEPromLoad((byte*)&server_ip,4,1);
  EEPromLoad((byte*)&scheibe_von,2,11);
  EEPromLoad((byte*)&scheibe_bis,2,15);

  // Navigiervariablen stetzen
  in_menue = 0;
  cursor_position_z = 0;
  cursor_position_s = 0;
  display_new = 1;
}

Wie gesagt, meine einzigen Änderungen waren in:

char keys[ROWS][COLS] = {
  { 'rechts_','rauf','runter','links' },
  { 'kreuz','haken','einsa','aust' } };

Ich hoffe, ihr könnt mir mal wieder weiterhelfen.

Einen schönen Sonntag und 3 Advent.

LG
Fipsi

Edit: Gerade den Atmega gewechselt (einen verwendet, auf dem bereits ein Sketch war) : selbes Problem. Als würden die Sketche gelöscht und keine neuen drauf geschrieben werden.

Schreib mal das Blink-Beispiel drauf. Ein Sketch kann ruhig den Kontroller total blockieren. Wahrscheinlich ist ein Fehler drin.

char keys[ROWS][COLS] = {
  { 'rechts_','rauf','runter','links' },
  { 'kreuz','haken','einsa','aust' } };

versuch mal die Zahlen statt ROW und COLS reinzuschreiben. Falls das geht dann sie nicht als const byte ROWS = 2; sondern #define ROWS 2

Grüße Uwe

Hab bereits den Terminal-Sketch probiert: Der läuft einwandfrei. Also liegt's am Sketch selber. Ich bin nur irritiert, warum, ich hab ja nur in den Klammern Positionen getauscht.

Hab gerade deine Tipps probiert:

Wenn ich die Zahlen selber rein schreib, ändert sich nichts. Versuch ich's mit define meckert der kompiler: "expected ']' before ';' token" bei:

char keys[ROWS][COLS] = {

LG

Fipsi

char keys[ROWS][COLS] = {
  { 'rechts_','rauf','runter','links' },
  { 'kreuz','haken','einsa','aust' } };

Das ist syntaktisch Unsinn, aber der Compiler lässt es dir durchgehen

Ein char ist EIN Zeichen. Du kannst zwar bei den einfachen Anführungszeichen auch mehrere Zeichen schreiben, aber der Compiler kürzt dass dann auf das erste.

Also muss ich mir für "rechts_", "rauf" und "runter" was neues einfallen lassen.

Das kann aber nicht das Problem sein, weil es auch mit den langen Versionen schon funktioniert hat. Wie gesagt, hab ich nur deren Positionen durchgetauscht.

LG

Fipsi

Edit: Eben geändert und wie befürchtet: Problem besteht immer noch.

Die Tastatur ist momentan gar nicht angeschlossen. Auf die Idee kam ich auch schon, dass ich da Fehler gemacht hab, deswegen hab ich die wieder abgesteckt und auch nochmal auf Kurzschlüsse überprüft: An der liegt's nicht.

LG

Fipsi

Hallo zusammen,

also ich hätte jetzt noch mal den aktuellen Code, diesmal den kompletten, vllt. steckt der Wurm ja doch wo anders drin und hat sich rausgefressen.
Ich hoffe wirklich sehr auf eure Hilfe, weil ich bloß noch Planlos bin gerade.
Wie schon erwähnt, kommt die Tastatur nicht als Fehlerquelle in Frage, da diese abgesteckt ist.

LG

Fipsi

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <Keypad.h>
#include <SPI.h>
#include <Ethernet.h>
#include <Streaming.h>


// Ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,178,999);
EthernetClient client;
char server_ip[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int ethernet_on = 0;
int ethernet_error = 0;
int last_ethernet_check_time = 0;

// Keyboard
const byte ROWS = 2;
const byte COLS = 4;

char keys[ROWS][COLS] = {
 { 'r','b','n','l' }, // Rechts, Rauf, Runter, Links
 { 'k','h','e','a' } };  // Kreuz, Haken, Einsammeln, Austeilen

byte rowPins[ROWS] = { 3, 4};
byte colPins[COLS] = { 5, 6, 7, 8 };

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

// LCD
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

// Serial Daten
const int MAX_NUMBERS = 25;
int conSerial[MAX_NUMBERS];
int last_serial_check_time = 0;
int wait_serial = 0;
int do_what = 0;

// Ethernetbuffer
const int MAX_NUMBERS_E = 19;
int conEthernet[MAX_NUMBERS_E];
int wait_ethernet = 0;

// Turnierkonfigurationsvariablen
int scheiben[61];
int scheibe_von;
int scheibe_bis;
int scheibe_fehlt_quittier = 1;
int terminal_status = 0;
int check_scheibe = 0;
int get_scheiben_data = 0;
int check_scheiben_new = 0;
int give_scheibe_data = 0;

// Navigiervariablen
int in_menue;
int cursor_position_z;
int cursor_position_s;
int position_ip = 1;

// Display neu laden
int display_new;

// Piesper
int piepser_time;
int piepser_status = 0;
int piepser_last_status = 0;

void setup()
{
 // Serialstart
 pinMode(2, OUTPUT);
 Serial.begin(115200);
 
 // Piesperstart
 pinMode(9, OUTPUT);
 
 // LCDstart
 lcd. begin(20,4);
 for (int i = 0; i < 2; i++)
 {
   lcd.backlight();
   delay(750);
   lcd.noBacklight();
   delay(750);
 }
 lcd.backlight();

 lcd.clear();
 lcd.setCursor(2,1);
 lcd.print("Archery Results");
 lcd.setCursor(2,2);
 lcd.print("Phillip Seelig");
 delay(5000);
 lcd.clear();

 // EEPROM auslesen
 //EEPromLoad((byte*)&server_ip,4,1);
 //EEPromLoad((byte*)&scheibe_von,2,11);
 //EEPromLoad((byte*)&scheibe_bis,2,15);

 // Navigiervariablen stetzen
 in_menue = 0;
 cursor_position_z = 0;
 cursor_position_s = 0;
 display_new = 1;
}

void loop()
{
 // Abfrage, ob Daten von Terminals warten
 if (readSerial())
 {
   if (conSerial[0] == 000)
   {
     if (conSerial[2] == 1)
     {
       if (conSerial[1] == check_scheibe)
       {
         if (check_scheibe < scheibe_bis)
 {
   scheiben[check_scheibe] = 1;
           check_scheibe ++;
 }
 else
 {
   check_scheibe = 0;
   last_serial_check_time = millis();
 }
       }
       else if (conSerial[1] == check_scheibe + 1)
       {
         scheiben[check_scheibe] = 0;
 if (conSerial[1] < scheibe_bis)
           check_scheibe = conSerial[1] + 1;
 else
   check_scheibe = 0;
 last_serial_check_time = millis();
       }
       else if (conSerial[1] == check_scheibe - 1)
       {
         scheiben[check_scheibe - 1] = 1;
       }
     }
     else if (conSerial[2] == 2)
     {
       if (conSerial[1] == check_scheiben_new)
{
 if (check_scheiben_new < scheibe_bis)
 {
   check_scheiben_new++;
 }
 else
 {
   check_scheiben_new = 0;
   last_serial_check_time = millis();
 }
 scheiben[check_scheiben_new] = 1;
       }
else if (conSerial[1] == check_scheiben_new + 1)
{
 scheiben[check_scheiben_new] = 0;
 if (check_scheiben_new < scheibe_bis)
     check_scheiben_new = conSerial[1] + 1;
 else
   check_scheiben_new = 0;
 last_serial_check_time = millis();
}
else if (conSerial[1] == check_scheiben_new -1)
{
 scheiben[check_scheiben_new - 1] = 1;
}
     }
     else if (conSerial[2] == 3)
     {
       if (conSerial[1] == give_scheibe_data)
{
 if (give_scheibe_data < scheibe_bis)
   give_scheibe_data++;
 else
   give_scheibe_data = 0;
}
     }
     else if (conSerial[2] == 4)
     {
       if (client.connect(server_ip, 80))
       {
         client << (F("GET ")) << (F("/archery_results/entw/templates/terminal_communication.php?do=write&1=")) << (conSerial[1]) << (F("&2=")) << (conSerial[3]) << (F("&3=")) << (conSerial[4]) << (F("&4=")) << (conSerial[5]) << (F("&5=")) << (conSerial[6]) << (F("&6=")) << (conSerial[7]) << (F("&7=")) << (conSerial[8]) << (F("&8=")) << (conSerial[9]) << (F("&9=")) << (conSerial[10]) << (F("&10=")) << (conSerial[11]) << (F("&11=")) << (conSerial[12]) << (F("&12=")) << (conSerial[13]) << (F("&13=")) << (conSerial[14]) << endl;
         client.println ("Authorization: Terminal_Steuergerät:that_password");
         client.println("User-Agent: Terminal-Steuergerät-Ethernet");
         client.println("Connection: close");
         client.println();
         wait_ethernet = 1;
       }
       else
       {
         ethernet_error = 1;
       }
     }
     wait_serial = 0;
     display_new = 1;
   }
 }
 
 // Wenn Scheibe nach 3 Sek. nicht reagiert nächste
 if (((check_scheiben_new != 0) || (check_scheibe != 0) || (get_scheiben_data != 0) || (give_scheibe_data != 0)) && (wait_serial == 1) && (last_serial_check_time + 3 * 1000 < millis()))
 {
   if (check_scheiben_new != 0)
{
 scheiben[check_scheiben_new] = 0;
 if (check_scheiben_new < scheibe_bis)
   check_scheiben_new + 1;
 else
   check_scheiben_new = 0;
}
else if (check_scheibe != 0)
{
 scheiben[check_scheibe] = 0;
 if (check_scheibe < scheibe_bis)
   check_scheibe + 1;
 else
   check_scheibe = 0;
}
else if (get_scheiben_data != 0)
{
 scheiben[get_scheiben_data] = 0;
 if (get_scheiben_data < scheibe_bis)
   get_scheiben_data + 1;
 else
   get_scheiben_data = 0;
}
else if (give_scheibe_data != 0)
{
 scheiben[get_scheiben_data] = 0;
 if (get_scheiben_data < scheibe_bis)
   get_scheiben_data + 1;
 else
   get_scheiben_data = 0;
}
 }
 // Scheibennummern einsammeln und kontrollieren (Aufruf nächster Scheibe)
 if ((check_scheiben_new != 0) && (wait_serial == 0) && (check_scheiben_new != conSerial[1]))
 {
   digitalWrite(2,HIGH);
     Serial << "#" << check_scheiben_new << F(",2") << endl;
   digitalWrite(2,LOW);
last_serial_check_time = millis();
 }
 
 // Vollständigkeit Scheiben prüfen (Start des Durchlaufs; Aufruf nächster Scheibe)
 if (last_serial_check_time + 30 * 1000 < millis())
   check_scheibe = scheibe_von;
 
 if ((check_scheibe != 0) && (wait_serial == 0) && (check_scheibe != conSerial[1]) && (get_scheiben_data == 0))
 {
   digitalWrite(2,HIGH);
     Serial << "#" << check_scheibe << F(",3") << endl;
   digitalWrite(2,LOW);
last_serial_check_time = millis();
 }
 
 // Daten der Scheiben einsammeln (Aufruf nächster Scheibe)
 if ((get_scheiben_data != 0) && (wait_ethernet == 0) && (get_scheiben_data != conSerial[1]))
 {
   digitalWrite(2,HIGH);
     Serial << "#" << get_scheiben_data << F(",4") << endl;
   digitalWrite(2,LOW);
   wait_serial = 1;
last_serial_check_time = millis();
 }
 
 // Daten an Scheibe senden
 if ((give_scheibe_data != 0) && (wait_ethernet == 0) && (wait_serial == 0) && (give_scheibe_data != conEthernet[0]))
 {
   if (client.connect(server_ip, 80))
   {
     client << (F("GET ")) << (F("/archery_results/entw/templates/terminal_communication.php?do=read&scheibe=")) << give_scheibe_data << endl;
     client.println ("Authorization: Terminal_Steuergerät:that_password");
     client.println("User-Agent: arduino-ethernet");
     client.println("Connection: close");
     client.println();
     wait_ethernet = 1;
 
   }
   else
   {
     ethernet_error = 1;
   }
 }
 
 // Abfrage, ob Daten vom Server kommen
 if (readEthernet())
 {
   if (conEthernet[0] != 999)
   {
     digitalWrite(2,HIGH);
       Serial << "#" << conEthernet[0] << F(",") << F("5,") << conEthernet[1] << F(",") << conEthernet[2] << F(",") << conEthernet[3] << F(",") << conEthernet[4] << F(",") << conEthernet[5] << F(",") << conEthernet[6] << F(",") << conEthernet[7] << F(",") << conEthernet[8] << F(",") << conEthernet[9] << F(",") << conEthernet[10] << F(",") << conEthernet[11] << F(",") << conEthernet[12] << F(",") << conEthernet[13] << F(",") << conEthernet[14] << F(",") << conEthernet[15] << F(",") << conEthernet[16] << F(",") << conEthernet[17] << F(",") << conEthernet[18] << endl;
     digitalWrite(2,LOW);
     wait_serial = 1;
   }
   else if (conEthernet[0] == 999)
   {
     if (get_scheiben_data < scheibe_bis)
       get_scheiben_data++;
     else
       get_scheiben_data = 0;
     last_serial_check_time = millis();
     display_new = 1;
   }
   display_new = 1;
   wait_ethernet = 0;
 }

 // Keypad abfragen
 char key = kpd.getKey();
 if (key)
 {
   switch(key)
   {
     // Taste Pfeil nach oben
     case 'b':
       // Im Menü navigieren
       if (((in_menue == 0) || (in_menue == 1) || (in_menue == 4)) && (cursor_position_z > 0))
         cursor_position_z - 1;
       
       // IP-Adresse einstellen
       if (in_menue == 2)
       {
         if (server_ip[position_ip - 1] == 9)
         {
           server_ip[position_ip - 1] = 0;
         }
         else
         {
           server_ip[position_ip - 1] + 1;
         }
       }
       
       display_new = 1;
       break;
       
     // Taste Pfeil nach unten
     case 'n':
       // Im Menü navigieren
       if ((in_menue == 0) && (cursor_position_z < 2))
         cursor_position_z + 1;
         
       if ((in_menue == 1) && (cursor_position_z < 1))
         cursor_position_z + 1;
       
       if ((in_menue == 4) && (cursor_position_z < 3))
         cursor_position_z + 1;
       
       // IP-Adresse einstellen
       if (in_menue == 2)
       {
         if (server_ip[position_ip - 1] == 0)
         {
           server_ip[position_ip - 1] = 9;
         }
         else
         {
           server_ip[position_ip - 1] - 1;
         }
       }
       
       display_new = 1;
       break;
       
     // Taste Pfeil nach links
     case 'l':
       // IP-Adresse Ziffern auswählen
       if ((in_menue == 2) && (position_ip > 1))
       {
         if (position_ip == 4)
           cursor_position_s = 2;
         else if (position_ip == 7)
           cursor_position_s = 8;
         else if (position_ip == 10)
           cursor_position_s = 10;
         else
           cursor_position_s - 1;
         
         position_ip - 1;
       }
       
       display_new = 1;
       break;

     // Taste Pfeil nach rechts
     case 'r':
       // IP-Adresse Ziffern auswählen
       if ((in_menue == 2) && (position_ip < 12))
       {
         if (position_ip == 3)
           cursor_position_s = 4;
         else if (position_ip == 6)
           cursor_position_s = 8;
         else if (position_ip == 9)
           cursor_position_s = 12;
         else
           cursor_position_s + 1;
         
         position_ip + 1;
       }
       
       display_new = 1;
       break;
       
     // Taste mit Haken (Enter)
     case 'h':
       // In Untermenü Einstellungen gehen
       if ((in_menue == 0) && (cursor_position_z == 0))
         in_menue = 1;
       
       // In Untermenü IP-Adresse gehen
       if ((in_menue == 1) && (cursor_position_z == 0))
         in_menue = 2;
       position_ip = 0;
       
       // IP-Adresse speichern und zu Untermenü Einstellungen wechseln
       if ((in_menue == 2) && (cursor_position_z == 1))
       {
         in_menue = 1;
       }
       
       // In Untermenü Ethernet Start wechseln
       if ((in_menue == 1) && (cursor_position_z == 1))
       {
         in_menue = 3;
       }
       
       // Ethernet Start und zu Untermenü Einstellungen wechseln
       if (in_menue == 3)
       {
         Ethernet.begin(mac,ip);
         while(!client){
           ;
         }
         ethernet_on = 1;
         ethernet_error = 0;
         in_menue = 1;
       }
       
       // In Untermenü Scheibennummern wechseln
       if ((in_menue == 0) && (cursor_position_z == 1))
         in_menue = 4;
       
       // In Untermenü von/bis wechseln
       if ((in_menue == 4) && (cursor_position_z == 0))
         in_menue = 5;
       
       // Scheiben von/bis speichern und in Untermenü Scheibennummern wechseln
       if ((in_menue == 5) && (scheibe_von) && (scheibe_bis))
       {
         EEPromSave((byte*)&scheibe_von,2,11);
         EEPromSave((byte*)&scheibe_bis,2,15);
         in_menue = 4;
       }
       
       // In Untermenü Scheibennummern eintragen wechseln
       if ((in_menue == 4) && (cursor_position_z == 1))
         in_menue = 6;
       
       // Befehl senden und in Untermenü Scheibennummern wechseln
       if (in_menue == 6)
       {
         digitalWrite(2,HIGH);
   Serial << "999,1" << endl;
 digitalWrite(2,LOW);
         in_menue = 4;
       }
       
       // In Untermenü Scheibennummern einsammeln wechseln
       if ((in_menue == 4) && (cursor_position_z == 2))
         in_menue = 7;
       
       // Befehl senden und in Untermenü Scheibennummern wechseln
       if (in_menue == 7)
       {
         check_scheiben_new = scheibe_von;
         in_menue = 4;
       }
       
       // In Untermenü nicht reagierende Scheiben wechseln
       if ((in_menue == 4) && (cursor_position_z == 3))
         in_menue == 8;
       
       // fehlende Scheiben quittieren und in Untermenü Scheibennummern wechseln
       if (in_menue == 8)
       {
         scheibe_fehlt_quittier = 1;
         in_menue = 4;
       }
       
       // In Schießbetrieb wechseln
       if ((in_menue == 0) && (cursor_position_z == 2))
         in_menue = 9;
       
       display_new = 1;
       break;
       
     // Taste mit Kreuz (ESC)
     case 'k':
       // Menü wechseln
       if (in_menue == 1)
         in_menue = 0;
       
       if (in_menue == 2)
         in_menue = 1;
       
       if (in_menue == 3)
         in_menue = 1;
       
       if (in_menue == 4)
         in_menue = 0;
       
       if (in_menue == 5)
         in_menue = 4;
       
       if (in_menue == 6)
         in_menue = 4;
       
       if (in_menue == 7)
         in_menue = 4;
       
       if (in_menue == 8)
         in_menue = 4;
       
       if (in_menue == 9)
         in_menue = 0;
       
       display_new = 1;
       break;

     case 'e':
       check_scheibe = 0;
       get_scheiben_data = scheibe_von;
       terminal_status = 1;
       in_menue = 9;
       display_new = 1;
       break;

     case 'a':
       give_scheibe_data = scheibe_von;
       check_scheibe = 0;
       terminal_status = 2;
       in_menue = 9;
       display_new = 1;
       break;
   }
 }
 // LCDausgaben
 if (display_new == 1)
 {
   switch (in_menue)
   {
   case 0:
     cursor_position_s = 0;
     lcd.setCursor(0,0);
     lcd.print("- Konfigurationen   ");
     lcd.print("- Scheibennummern   ");
     lcd.print("- Turnierbetrieb    ");
     lcd.print("  Archery Results   ");
     lcd.setCursor(cursor_position_s,cursor_position_z);
     lcd.blink();
     display_new = 0;
     break;

   case 1:
     cursor_position_s = 0;
     lcd.setCursor(0,0);
     lcd.print("- IP-Adressen       ");
     lcd.print("- Ethernet Start    ");
     lcd.print("                    ");
     lcd.print("                    ");
     lcd.setCursor(cursor_position_s,cursor_position_z);
     lcd.blink();
     display_new = 0;
     break;

   case 2:
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("IP-Adresse Server:  ");
     lcd.setCursor(0,1);
     lcd.print(server_ip[0]);
     lcd.print(server_ip[1]);
     lcd.print(server_ip[2]);
     lcd.print(".");
     lcd.print(server_ip[3]);
     lcd.print(server_ip[4]);
     lcd.print(server_ip[5]);
     lcd.print(".");
     lcd.print(server_ip[6]);
     lcd.print(server_ip[7]);
     lcd.print(server_ip[8]);
     lcd.print(".");
     lcd.print(server_ip[9]);
     lcd.print(server_ip[10]);
     lcd.print(server_ip[11]);      
     lcd.setCursor(0,2);
     lcd.print("Eigene IP-Adresse:  ");
     lcd.print(Ethernet.localIP());
     lcd.setCursor(cursor_position_s,cursor_position_z);
     lcd.blink();
     display_new = 0;
     break;

   case 3:
     if (ethernet_on == 0)
     {
       lcd.setCursor(0,0);
       lcd.print("Ethernetverbindung  ");
       lcd.print("starten             ");
       lcd.print("                    ");
       lcd.print("Bitte best");
       lcd.print(11100001);
       lcd.print("tigen    ");
     }
     else if ((ethernet_on == 1) && (ethernet_error == 1))
     {
       lcd.setCursor(0,0);
       lcd.print("Ethernetverbindung  ");
       lcd.print("Fehler              ");
       lcd.print("Bitte Netzwerkver-  ");
       lcd.print("bindung ");
       lcd.print(11110101);
       lcd.print("berpr");
       lcd.print(11110101);
       lcd.print("fen");
     }
     else
     {
       lcd.setCursor(0,0);
       lcd.print("Status");
       lcd.print("Ethernetverbindung  ");
       lcd.print("aktiv und in Ordnung");
       lcd.print("                    ");
     }

     lcd.noBlink();
     display_new = 0;

   case 4:
     cursor_position_s = 0;
     lcd.setCursor(0,0);
     lcd.print("Scheiben von/bis    ");
     lcd.print("Scheiben-ID eintr.  ");
     lcd.print("Scheiben-ID einsa.  ");
     lcd.print("Scheiben offline    ");
     lcd.setCursor(cursor_position_s,cursor_position_z);
     lcd.blink();
     display_new = 0;
     break;

   case 5:
     lcd.setCursor(0,0);
     lcd.print("Scheibennummern:    ");
     lcd.print("von:             ");
     lcd.print(scheibe_von);
     lcd.print("bis:             ");
     lcd.print(scheibe_bis);
     lcd.print("                    ");
     lcd.setCursor(cursor_position_s,cursor_position_z);
     lcd.blink();
     display_new = 0;
     break;

   case 6:
     lcd.setCursor(0,0);
     lcd.print("Terminals umstellen ");
     lcd.print("auf Scheibennummern ");
     lcd.print("eintragen.          ");
     lcd.print("Bitte best");
     lcd.print(11100001);
     lcd.print("tigen    ");
     lcd.noBlink();
     display_new = 0;
     break;

   case 7:
     lcd.setCursor(0,0);
     lcd.print("Scheibennummern    ");
     lcd.print("einsammeln und     ");
     lcd.print("speichern          ");
     lcd.print("Bitte best");
     lcd.print(11100001);
     lcd.print("tigen    ");
     lcd.noBlink();
     display_new = 0;
     break;

   case 8:
     lcd.setCursor(0,0);
     lcd.print("Scheiben offline:  ");
     lcd.print("                   ");
     lcd.print("                   ");
     lcd.print("Bitte quittieren   ");
     lcd.noBlink();
     display_new = 0;
     break;

   case 9:
     lcd.setCursor(0,0);
     lcd.print("Turnierbetrieb     ");
     lcd.print("Status:            ");
     if (terminal_status == 1)
     {
lcd.print("Daten einsammeln    ");
if (get_scheiben_data == 0)
 lcd.print("Fertig              ");
else
 lcd.print("bei Scheibe   ");
 lcd.print(get_scheiben_data);
     }
     else if (terminal_status == 2)
     {
       lcd.print("Daten austeilen     ");
if (give_scheibe_data == 0)
 lcd.print("Fertig              ");
else
 lcd.print("bei Scheibe   ");
 lcd.print(give_scheibe_data);
     }
     else if (terminal_status == 0)
     {
       lcd.print("Nicht aktiv - Kein ");
       lcd.print("Terminal in Betrieb");
     }
     lcd.noBlink();
     display_new = 0;
     break;
     
   }
 }

 // Piesper aktivieren
 for (int i = scheibe_von; i < scheibe_bis; i++)
 {
   if (scheiben[i] == 0)
     piepser_status = 1;
 }
 
 // Piespersteuerung
 if (piepser_status == 1)
 {
   if (piepser_time + 1000 < millis())
   {
     if (piepser_last_status == 1)
     {
       digitalWrite(9,LOW);
    piepser_last_status = 0;
     }
     else
     {
       digitalWrite(9,HIGH);
piepser_last_status = 1;
     }
     piepser_time = millis();
   }
 }
}

// Serialempfänger
bool readSerial()
{
 static byte index;

 if(Serial.available())
 {
   char c = Serial.read();

   if(c >= '0' && c <= '9' && index < MAX_NUMBERS)
   {
     conSerial[index] = conSerial[index] * 10 + c - '0';
   }
   else if (c == '#')
   {
     conSerial[0] = 0;
   }
   else if(c == ',')
   {
     index++;
   }
   else if(c == '\n')
   {
     index = 0;
     return true;
   }
 }

 return false;
}

// Ethernetempfänger
bool readEthernet()
{
 static byte index;

 if(client.available())
 {
   char c = client.read();

   if(c >= '0' && c <= '9' && index < MAX_NUMBERS_E)
   {
     conEthernet[index] = conEthernet[index] * 10 + c - '0';
   }
   else if(c == ',' && index < MAX_NUMBERS)
   {
     index++;
     conSerial[index] = 0;
   }
   else if(c == '\n')
   {
     index = 0;
     return true;
   }
 }

 return false;
}

// Im EEPROM speichern
void EEPromSave(byte* wert, int numbytes, int eprom_offset)
{
 for (int i=0;i<numbytes;i++)
   EEPROM.write(eprom_offset+i, wert[i]);
}

// Aus EEPROM auslesen
void EEPromLoad(byte* wert, int numbytes, int eprom_offset)
{
 for (int i=0;i<numbytes;i++)
   wert[i] = EEPROM.read(eprom_offset+i);
}

P.S.: Die Schnellantwort ist kaputt…

Servus,

sorry gleich mal für 5-fach-post, aber ich hab jetzt was entdeckt:

Ich bin grad nochmal mein Code durchgegangen und weiß nicht warum, jedenfalls hat mich diese Zeile hier gejuckt:

char server_ip[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

Also mal diese und alle anderen Zeilen, in denen server_ip vorkommt, auskommentiert. Hochgeladen und siehe da: Es funktioniert. Anschießend Zeile für Zeile wieder "aktiviert". Und ab da hing's dann an dieser Stelle:

client.println("User-Agent: arduino-ethernet");

Hab's dann damit ausgetauscht:

client.println("User-Agent: Terminal-Steuergerät-Ethernet");

Kann mir mal jemand sagen, was da der Unterschied ist..? Denn jetzt funktioniert's.

Und dann hät ich noch ne Frage: Ich hab den Mist mit der IP-Adresse wieder umgeschmissen. Hab jetzt das oben geschrieben "Format" für die Variable. Was muss ich dafür noch ändern:

client.connect(server_ip, 80);

?

Vielen Dank schon mal und LG

Fipsi

Kann mir mal jemand sagen, was da der Unterschied ist..?

Das zweite braucht mehr RAM - Speicher. Wenn es damit "funktioniert", könnte es sein, dass im zweiten Fall was anderes schief läuft, was du nicht merkst.

Die Tips zu client.println( F("So werden feste Texte geschrieben") ); und der freeRam Funktion hast du doch sicher schon mal gesehen ?

Aber wo ist dann bitte beim ersten der Fehler?

Ups.. gelesen ja.. vergessen auch.. änder ich gleich :X

LG

Fipsi