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
)
"_ HotSystems_" Ich habe nun auch Code- Tags verwendet
!
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
)
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! ![]()