Hilfe! Inhalt von A mit Event auf B schieben. A=neu, B=alt (Text History)

Hallo!

Ich habe mal, wie " michael_x " bereits trefflich bemerkt hat, einen Test-Code erstellt, welcher natürlich jetzt funktioniert! (wie immer der Vorführeffekt :confused: )

"_ HotSystems_" Ich habe nun auch Code- Tags verwendet :slight_smile: !

Das andere Problem ist, dass der andere Code so umfangreich ist und dazu noch Library Zugriffe stattfinden, die man auf die schnelle nicht nachvollziehen kann. Ich mache so etwas auch nicht jeden Tag, sondern alle Schaltjahre einmal.

#include <SPI.h>
#include <SD.h>
#include <VirtualWire.h>      
#include <Wire.h>             
#include <DFR_Key.h>                           // Buttonauswertung 

DFR_Key keypad;                                // KeyPad init


#define V34
#define LCDWidth 128                           //define screen width,height
#define LCDHeight 64

//--------UART setup  auf 2. UART!!
#define _Digole_Serial_UART_                   
#include <DigoleSerial.h>
//DigoleSerialDisp mydisp(&Serial, 9600);      //UART1: Amega1284: Pin 15(TX-1)on Amega1284 to RX on module
DigoleSerialDisp mydisp(&Serial1, 9600);       //UART2: Amega1284: Pin 17(TX-2)on Amega1284 to RX on module
//-----

boolean neueDatenFlag  = true;       //  Neue SD Daten nur einmal einlesen und an Display senden
boolean sdDatenzuAok   = false;      //  Daten an Display übergeben

byte  oMenuVal     =  0;
byte  btnKey       =  0;             // Wert entprellte Tast
byte  localKey     =  0;             // KeyPad Speicher
byte  menuKey      =  0;             // Stelle/Position im Menü
byte  maxInfo      =  4;             // Anzahl der Menüstellen 
byte  menuOldStat  =  0;             // alter MenüStatusWert , Stelle/Position im Menü

int  i = 1;

unsigned long  oldMillis;

const byte numChars = 16;
char* neueSDdaten;                  
char*  neuerTextA;                 
char*  alterTextB;                
char*  zwischSpeicherAB;

char* InhaltTab[numChars]=               
{
//"1234567890123456"         16 Zeichen im LCD Display

  "  erster Text   ",        // Info 0
  "  zweiter Text  ",        // Info 1
  "  dritter Text  ",        // Info 2
  "  vierter Text  ",        // Info 3
  " fuenfter Text  "         // Info 4
};


void setup() {

 keypad.setRate(10);  //Tasten refreshrate

 Serial.begin(9600);
 Serial.println("History Test"); 

 mydisp.begin();                                  
 mydisp.backLightOn();                           
 mydisp.setBgColor(0);                            
 mydisp.setColor(255);                            
 mydisp.setFont(10);
 mydisp.drawStr(0,6, " History Test ");        
 delay(1000);
 mydisp.clearScreen();                           

}


void loop() {
  
  GetButtonVal();
  MenuCount(); 
  inputSim(); 
  AnzeigeDisp();

 if (neueDatenFlag  == true){
    oldMillis     =  millis(); 
    alterTextB    =  zwischSpeicherAB;
    neuerTextA    =  neueSDdaten;
    sdDatenzuAok  =  true;
    neueDatenFlag =  false;
   }
 
 if ((sdDatenzuAok == true)&&(millis() - oldMillis >= 500)){
    zwischSpeicherAB  = neuerTextA;
    sdDatenzuAok  =   false;   
    i++;
    } 

}

void   AnzeigeDisp(){
        
// --------Test oberer Status----------
      mydisp.setFont(10);
      mydisp.setPrintPos(10,7,1);                           
      mydisp.print(oMenuVal);
 
      mydisp.setPrintPos(40,7,1);                              
      mydisp.print(menuKey);      

      mydisp.setPrintPos(50,7,1);                             
      mydisp.print(neueDatenFlag);    

      mydisp.setPrintPos(60,7,1);                                   

      mydisp.setPrintPos(90,7,1);                                    
      mydisp.print(i);

//------------ neuer Text-----------------------
      mydisp.setFont(202);                               
      mydisp.setPrintPos(0,30,1);                             
      mydisp.print(neuerTextA);   

//------------ alter Text-----------------------
                               
      mydisp.setPrintPos(0,54,1);                            
      mydisp.print(alterTextB);   
        
}


void inputSim(){


 if (oMenuVal != menuKey){
     neueDatenFlag = true;
     oMenuVal = menuKey;
     }

  neueSDdaten = InhaltTab[menuKey];
  
}


void GetButtonVal(){
  
  localKey = keypad.getKey();                                    
  if (localKey != SAMPLE_WAIT)                                   
  { btnKey = localKey; }                                           
  }

void MenuCount() {
 
  if (btnKey == 3)  {                                              //Tasten Nr.3 /Up hochzählen
     if  (menuKey == menuOldStat) {menuKey ++;   delay(300);  }   
     } 
                             
  if (btnKey == 4)   {                                             //Tasten Nr.4/Down runterzählen
      if  (menuKey == menuOldStat) {menuKey -- ; delay(300); }     
     }
  menuOldStat = menuKey;  
  
//----------------------------------------------------  
  if (menuKey > maxInfo )  {  menuKey = 0; }                       // Tasten/ Menü  begrenzen
  if (menuKey < 0)         { menuKey = maxInfo ; }
}

Ich habe nur eine kleine Änderungen gemacht, da ich logischerweise die Eingangsbedingungen der Daten ähnlich der von SD "simulieren" musste.
Ich habe nun noch nicht getestet, ob es mit der kleinen Änderung und dem anderen Code läuft.
Aber evtl. fällt Euch hier schon etwas auf.
Aber bitte seit mit Kommentaren gnädig. (oder hätte ich das vcht. gerade nicht schreiben sollen :slight_smile: )

Habe gestern Nacht nur festgestellt, dass bei dem anderen Code die Übergabe in den Zwischenspeicher noch funktioniert, aber dann beim erneuten Takt (Eingang neuer Daten) sofort der Zwischenspeicher übergangen wird und die neuen Daten von A sofort an B durchgereicht werden :o .

Ich werde weiter testen und melde mich wieder!

Vielen Dank und Mfg Marc

PS.: Danke Tommy56 für den Link!
Verständlicher erklärt als bei den meisten anderen Seiten, auf denen ich bislang versucht habe mich weiterzubilden! :slight_smile: