So, nun bitte den Trommelwirbel....
#include <SPI.h>
#include <Ethernet2.h>
#include <PubSubClient.h>
#include <PinChangeInt.h>
byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
IPAddress ip(192, 168, 178, 177);
IPAddress server(192, 168, 178, 76);
void callback(char* topic, byte* payload, unsigned int length) {
// handle message arrived
}
EthernetClient ethClient;
PubSubClient client(ethClient);
long lastReconnectAttempt = 0;
boolean reconnect() {
if (client.connect("arduinoClient")) {
// Once connected, publish an announcement...
client.publish("outTopic","DEUTSCHLAND !");
// ... and resubscribe
client.subscribe("inTopic");
}
return client.connected();
}
#define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
byte CCNible[1500];
byte C2Nible[100];
int daktiv =0;
int iper = 0;
int CCx = 0;
int CC2 = 0;
int vfehl = 0;
int vnix = 0;
byte Zeile[68];
int RetterCC2;
int z=0;
byte TV[3];
byte TK[3];
byte TS[3];
unsigned long time;
String A25DispZeile1 ="";
String A25DispZeile2 ="";
char message_buff_1[68];
char message_buff_2[68];
void setup() {
client.setServer(server, 1883);
client.setCallback(callback);
Ethernet.begin(mac, ip);
delay(1500);
lastReconnectAttempt = 0;
Serial.begin(57600);
Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015");
pinMode(PIN, INPUT); //set the pin to input
digitalWrite(PIN, HIGH); //use the internal pullup resistor
PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge
DDRC = B00000000; // set PORTC (digital) to inputs
vfehl = 0;
vnix = 0;
daktiv =0;
}
void loop() {
if (!client.connected()) {
long now = millis();
if (now - lastReconnectAttempt > 5000) {
lastReconnectAttempt = now;
// Attempt to reconnect
if (reconnect()) {
lastReconnectAttempt = 0;
}
}
} else {
// Client connected
client.loop();
}
if (CCx >= 1 && daktiv == 0)
{
delay(150);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 1)
{
delay(90);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 2)
{
delay(60);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 3)
{
delay(30);
CCx = 0;
iper = 0;
daktiv++;
}
if (CCx >= 1 && daktiv == 4)
{
daktiv =0;
if (CCx > 1400) CCx = 300;
delay(30); // 30ms warten nach letztem interrupt
//array neu=CCNible alt=C2Nible sind beide arrays gleich?
CC2 = 67;
for (int i=0; i <= CC2; i++)
{
if(CCNible[i] != C2Nible[i]) vfehl++;
}
CC2 = 68;
if (vfehl > 0)
{
vfehl = 0;
vnix = 0;
//array kopieren
for (int i=0; i <= CC2; i++)
{
C2Nible[i] = CCNible[i];
}
//Serial.print(" LCD Anzeige Änderung festgestellt: CCx= ");
CCx = 0;
//Ausgabe ASCII-Zeile
z = 0;
A25DispZeile1 = "";
A25DispZeile2 = "";
for (int i=0; i <= CC2; i++)
{
byte CCNH1 = C2Nible[i];
i++;
byte CCNL1 = C2Nible[i];
CCNH1 = CCNH1 << 4;
byte CCLCD = CCNH1 | CCNL1;
if (CCLCD == 192) CCLCD = 45;
if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile
if (CCLCD > 126) CCLCD = 32;
if (CCLCD < 32) CCLCD = 32;
z++;
Zeile[z] = CCLCD;
//Serial.println(CCLCD,HEX);
//Serial.print (Azure);
Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!!
int Tesla = CCLCD;
if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen
A25DispZeile1 = A25DispZeile1 + char (Tesla);
}
if (i>34) {
A25DispZeile2 = A25DispZeile2 + char (Tesla);
}
// Otto
//Serial.print(CCLCD);
//Serial.print("-");
}
//Ute = Ute.c_str();
Serial.println (A25DispZeile1);
Serial.println (A25DispZeile2);
A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1);
A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1);
///String Test = A25DispZeile1.substring(0,2);
///Serial.println (Test);
//client.publish ("A25DisplayAnzeige",message_buff);
/// OTTOLEIN
/// OTTOLEIN
//Serial.println(" ");
iper = 0;
} //ende vfehl>0
else // vfehl=0
{
vnix++;
if (vnix > 10)
{
//Serial.print(" 10x unverändert CCx= ");
iper = 0;
vnix =0;
}
CCx = 0;
} //ende vfehl=0
} // ende CC2 > 0
{
//Serial.println("new client");
// an http request ends with a blank line
boolean currentLineIsBlank = true;
{
{
{
// send a standard http response header
// output the value of each analog input pin
for (int z=1; z <= 34; z++)
{
//Serial.print (Zeile[z]);
}
//client.println("<br />");
for (int z=1; z <= 34; z++)
{
//client.write (Zeile[z]);
}
//client.println("<br />");
//client.println("<br />");
//client.println("---------------------------------------------");
//client.println("<br />");
//client.println("<b>Ferndisplay ATMOS A25-Brenner</b>");
//client.println("<br />");
//client.println("---------------------------------------------");
//client.println("<br />");
//client.print("Status Brenner: ");
//client.write(Zeile[2]);
//client.write(Zeile[3]);
//client.write(Zeile[4]);
//client.println("<br />");
// ---------------------------------------------------------------------
if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv)
{
TV[1] = Zeile[14];
TV[2] = Zeile[15];
}
// ---------------------------------------------------------------------
if (Zeile[9] == 84 && Zeile[10] == 75)
{
TK[1] = Zeile[14];
TK[2] = Zeile[15];
}
if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32)
{
TS[1] = Zeile[14];
TS[2] = Zeile[15];
}
//client.print("Speichertemperatur OBEN (Tv): ");
//client.write(TV[1]);
//client.write(TV[2]);
//client.println("<br />");
//client.print("Speichertemperatur MITTE (Tk): ");
//client.write(TK[1]);
///client.write(TK[2]);
//client.print(" ℃");
//client.println("<br />");
//client.print("Speichertemperatur UNTEN (Ts): ");
//client.write(TS[1]);
//client.write(TS[2]);
//client.print(" ℃");
//client.println("<br />");
//client.print("Förderschnecke: ");
if (Zeile[20] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Glühzünder 1: ");
if (Zeile[24] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Glühzünder 2: ");
if (Zeile[26] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Gebläse: ");
if (Zeile[30] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.print("Flamme: ");
if (Zeile[34] == 42)
{
//client.print ("Ein");
}
else
{
//client.print ("Aus");
}
//client.println("<br />");
//client.println("</html>");
//break;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
//Serial.println("client disconnected");
}
if (millis() > (time + 2000)) {
time = millis();
client.publish ("A25DisplayZeile1",message_buff_1);
client.publish ("A25DisplayZeile2",message_buff_2);
}
} // ENDE VOID LOOP
void blink()
{
byte wertC = PINC;
CCNible[CCx] = wertC;
CCx++;
iper++;
}
Display More