A25 ext. Display und Datenlogger für Brennerdaten

    Du hast Probleme beim Login? Schreibe uns im Forum "Probleme mit der Registrierung".
      • 51

      • # 155216

      ernie01 schrieb:

      Hallo,

      Sorry, komme erst jetzt wieder zum lesen.....
      Wenn wer noch was braucht melden....
      Muss schauen, das ich mein Programm mal hier ins Forum bringe.
      Evtl. hilft es wem weiter.....

      Bei mir sind beide Zeilen nutzbar, nur alle paar Sekunden kommt kurz Unsinn raus.
      Habe ich halt im iobroker ausgeblendet....

      Welche pinchange ? Gute Frage, schon länger her...
      Habe damals mehrere ausprobiert, bis es dann passte. (sh. mein damaliger Forumeintrag)

      Fakt ist, ich nutze das Programm von Jürgen und keine abweichende Verdrahtung seiner „Erstlösung“.
      Lediglich habe ich eine Kleinigkeit geändert, weil die zweite Zeile nicht korrekt dargestellt wurde.
      Habe einen 2560 mit Originalverdrahtung der „Jürgen-Erstlösung“.

      Habe diese Woche ein Zeitproblem....

      Gruss
      Danke für deine Antwort :).
      Dann Versuch ich ein Paar pinchange aus. Das programm Ladest halt Mal hoch wenn zeit Hast. :) Kein stress und schonmal Danke. Verdrahtung hab ich soweit ja. Nur der bringt nur Kauderwelsch. Dein Programm wäre hinsichtlich Web Browser Lösung und eben deiner Erweiterungen echt interessant :)))

      Gruß Tom


      Gesendet von meinem MI 6 mit Tapatalk
      • 52

      • # 155262
      Hallo,

      Versuche Freitag/Samstag mein Programm und meine pinchange hier rein zu bekommen.
      Hatte auch zu Anfang pinchange-Probleme, dann fang ich wohl die passende...

      Gruss
      • 54

      • # 155398
      Hallo,

      bei mir ist die „Pinchange“:

      PinChangeInterupt von Nico Hood Version 1.2.4

      Das in der Bibliotheksverwaltung angebotene Update dazu ist nicht installiert.

      By the way: Ich nutze einen ORIGINAL Mega2560 ! Keinen kostengünstigen Klone !
      Der Arduino hängt mit KURZEN (!) Drähten und NUR am A25.
      Draht- bzw. Adernlänge bei mir ca. 25cm.

      Pinchange und Programm kann ich erst am Wochenende einstellen....

      WICHTIG:
      • Das Ganze MUSS schon mit dem Arduino-Programm von Jürgen funktionieren. (!)
      • Bei falscher/fehlender Pinchange klappt das Kompilieren erst garnicht
      • Die Verdrahtung der „Ursprungslösung“ von Jürgen ist „1:1“ zu übernehmen
      • Die Ausgabe im seriellen Monitor der Arduino IDE MUSS korrekt eingestellt sein (Baudrate)
      • Die Widerstände haben eine Schutzfunktion und sind nicht zwingend notwendig


      Gruß Volker

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von ernie01 ()

      • 55

      • # 155402
      Hallo Tom,

      welche der beiden „Lösungen“ von Jürgen nutzt du ?
      Mein Brenner ist „nach 2012“.
      Mich macht deine Verdrahtung auf deinen Fotos stutzig......
      Du hast 6 Drähte an deinem A25 ?
      Bei mir sind es 7 oder gar 8.......

      Wenn dein A25 „nach 2012“ ist, sollten wir die Verdrahtung abstimmen.
      Ansonsten bin ich wohl raus....
      • 56

      • # 155436

      ernie01 schrieb:

      Hallo Tom,

      welche der beiden „Lösungen“ von Jürgen nutzt du ?
      Mein Brenner ist „nach 2012“.
      Mich macht deine Verdrahtung auf deinen Fotos stutzig......
      Du hast 6 Drähte an deinem A25 ?
      Bei mir sind es 7 oder gar 8.......

      Wenn dein A25 „nach 2012“ ist, sollten wir die Verdrahtung abstimmen.
      Ansonsten bin ich wohl raus....
      Hi Volker.
      Die Verdrahtung hab ich 1:1 übernommen.
      Nur die 5 V hab ich weg lassen.
      Kompilieren klappte aber wie im Bild meines ersten Eintrags sehe ich nach der Text Ausgabe nur "@@@" warum auch immer.
      Jürgen meinte die 5V werden nicht benötigt da das Display ja vom A25 mit Spannung versorgt wird.
      Erst hab ich's nur mit den 4 Daten Leitungen versucht, allerdings kam dann nur Kauderwelsch raus. Nachdem ich GRN angeschlossen hatte konnte ich zumindest die Textausgabe anschauen.
      Was mir vor kurzem aufgefallen ist das im Original-Programm von Jürgen in einer Zeile "::" sind
      Vll ist das der Syntax Fehler der mir Reinspunkt. Könnte es allerdings noch nicht nach Korrektur testen.
      Kommunikation ist da, nur das was kommt kann nicht angezeigt werden. Käme auf einen Versuch an mit deinem Programm wenn's hier rein tust dann weis ich Mehr :)

      Hab auch einen original l, genau wie du. Keinen clon :)

      Danke im vorraus

      Gruß Tom

      Gesendet von meinem MI 6 mit Tapatalk
      • 57

      • # 155437

      ernie01 schrieb:

      Hallo Tom,

      welche der beiden „Lösungen“ von Jürgen nutzt du ?
      Mein Brenner ist „nach 2012“.
      Mich macht deine Verdrahtung auf deinen Fotos stutzig......
      Du hast 6 Drähte an deinem A25 ?
      Bei mir sind es 7 oder gar 8.......

      Wenn dein A25 „nach 2012“ ist, sollten wir die Verdrahtung abstimmen.
      Ansonsten bin ich wohl raus....
      Übrigens meiner ist auch nach 2012

      Genau genommen ist er 2018 eingebaut worden :)

      Evtl Versuche ich mal an die RS 485 anzuschließen um zu Sehen was da so rüber kommt ;)

      Aber prinzipiell würde mir anzeigen Reichen wir bei dir :)

      Gruß Tom

      Gesendet von meinem MI 6 mit Tapatalk
      • 58

      • # 155478
      Hallo Tom,

      ich greife die Daten direkt am LCD-Display ab und nutzte dazu genau 7 Drahtverbindungen !
      Mit der RS4xx-Datenschnittstelle habe ich mich nicht befasst, da Wissen der Physik dieser Schnittstelle
      nicht genügen wird.
      Eher könnte man einen Logikanalyzer an die Display-Schnittstelle hängen.
      Damals schrieb ich hier von zwei Schnittstellen (3pol./4pol.) die evtl. „vertauscht“ zu sehen sind.
      Die RS485 nutzt vermutlich nur Atmos selber. Die Display-Schnittstelle könnte ggf. „ungefragt“
      antworten.....(Logikanalyzer !). Lustig, wenn das gar die SPI der alten A25 wäre.....

      Später sende ich „Beweisfotos“ von Brenner und Arduino, sowie mein Programm.

      Gruß Volker

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von ernie01 ()

      • 59

      • # 155496

      ernie01 schrieb:

      Hallo Tom,

      ich greife die Daten direkt am LCD-Display ab und nutzte dazu genau 7 Drahtverbindungen !
      Mit der RS4xx-Datenschnittstelle habe ich mich nicht befasst, da Wissen der Physik dieser Schnittstelle
      nicht genügen wird.
      Eher könnte man einen Logikanalyzer an die Display-Schnittstelle hängen.
      Damals schrieb ich hier von zwei Schnittstellen (3pol./4pol.) die evtl. „vertauscht“ zu sehen sind.
      Die RS485 nutzt vermutlich nur Atmos selber. Die Display-Schnittstelle könnte ggf. „ungefragt“
      antworten.....(Logikanalyzer !). Lustig, wenn das gar die SPI der alten A25 wäre.....

      Später sende ich „Beweisfotos“ von Brenner und Arduino, sowie mein Programm.

      Gruß Volker
      Bei mir sinds 6 kabel. Lass nur die 5 V weg vom Display. Ansonsten wie bei dir auch alles am Display.
      Freu mich auf das Programm ;) bis später



      Gesendet von meinem MI 6 mit Tapatalk
      • 60

      • # 155497

      ernie01 schrieb:

      Hallo Tom,

      ich greife die Daten direkt am LCD-Display ab und nutzte dazu genau 7 Drahtverbindungen !
      Mit der RS4xx-Datenschnittstelle habe ich mich nicht befasst, da Wissen der Physik dieser Schnittstelle
      nicht genügen wird.
      Eher könnte man einen Logikanalyzer an die Display-Schnittstelle hängen.
      Damals schrieb ich hier von zwei Schnittstellen (3pol./4pol.) die evtl. „vertauscht“ zu sehen sind.
      Die RS485 nutzt vermutlich nur Atmos selber. Die Display-Schnittstelle könnte ggf. „ungefragt“
      antworten.....(Logikanalyzer !). Lustig, wenn das gar die SPI der alten A25 wäre.....

      Später sende ich „Beweisfotos“ von Brenner und Arduino, sowie mein Programm.

      Gruß Volker
      Hi. Kann's sein dass da ein Schreibfehler ist?

      Siehe Bild.

      Gruß Tom



      Gesendet von meinem MI 6 mit Tapatalk
      • 61

      • # 155501
      Hallo Tom,

      nochmal........es sind 7 Drahtverbindungen (nicht mehr und nicht weniger).
      Hier etwas mit Begründung anders zu machen, kann schon so eines der Probleme sein.
      Zumal du ja selber von 1:1-Umsetzung gesprochen hast.....

      Anbei die beiden Fotos
      Dateien
      • 62

      • # 155504
      Hallo Tom,

      der gelbe Draht ist wohl mein PINCHANGE-Pin. Das ist bei mir wohl A8

      define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
      • 63

      • # 155506
      So, nun bitte den Trommelwirbel....

      C-Quellcode

      1. #include <SPI.h>
      2. #include <Ethernet2.h>
      3. #include <PubSubClient.h>
      4. #include <PinChangeInt.h>
      5. byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
      6. IPAddress ip(192, 168, 178, 177);
      7. IPAddress server(192, 168, 178, 76);
      8. void callback(char* topic, byte* payload, unsigned int length) {
      9. // handle message arrived
      10. }
      11. EthernetClient ethClient;
      12. PubSubClient client(ethClient);
      13. long lastReconnectAttempt = 0;
      14. boolean reconnect() {
      15. if (client.connect("arduinoClient")) {
      16. // Once connected, publish an announcement...
      17. client.publish("outTopic","DEUTSCHLAND !");
      18. // ... and resubscribe
      19. client.subscribe("inTopic");
      20. }
      21. return client.connected();
      22. }
      23. #define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
      24. byte CCNible[1500];
      25. byte C2Nible[100];
      26. int daktiv =0;
      27. int iper = 0;
      28. int CCx = 0;
      29. int CC2 = 0;
      30. int vfehl = 0;
      31. int vnix = 0;
      32. byte Zeile[68];
      33. int RetterCC2;
      34. int z=0;
      35. byte TV[3];
      36. byte TK[3];
      37. byte TS[3];
      38. unsigned long time;
      39. String A25DispZeile1 ="";
      40. String A25DispZeile2 ="";
      41. char message_buff_1[68];
      42. char message_buff_2[68];
      43. void setup() {
      44. client.setServer(server, 1883);
      45. client.setCallback(callback);
      46. Ethernet.begin(mac, ip);
      47. delay(1500);
      48. lastReconnectAttempt = 0;
      49. Serial.begin(57600);
      50. Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015");
      51. pinMode(PIN, INPUT); //set the pin to input
      52. digitalWrite(PIN, HIGH); //use the internal pullup resistor
      53. PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge
      54. DDRC = B00000000; // set PORTC (digital) to inputs
      55. vfehl = 0;
      56. vnix = 0;
      57. daktiv =0;
      58. }
      59. void loop() {
      60. if (!client.connected()) {
      61. long now = millis();
      62. if (now - lastReconnectAttempt > 5000) {
      63. lastReconnectAttempt = now;
      64. // Attempt to reconnect
      65. if (reconnect()) {
      66. lastReconnectAttempt = 0;
      67. }
      68. }
      69. } else {
      70. // Client connected
      71. client.loop();
      72. }
      73. if (CCx >= 1 && daktiv == 0)
      74. {
      75. delay(150);
      76. CCx = 0;
      77. iper = 0;
      78. daktiv++;
      79. }
      80. if (CCx >= 1 && daktiv == 1)
      81. {
      82. delay(90);
      83. CCx = 0;
      84. iper = 0;
      85. daktiv++;
      86. }
      87. if (CCx >= 1 && daktiv == 2)
      88. {
      89. delay(60);
      90. CCx = 0;
      91. iper = 0;
      92. daktiv++;
      93. }
      94. if (CCx >= 1 && daktiv == 3)
      95. {
      96. delay(30);
      97. CCx = 0;
      98. iper = 0;
      99. daktiv++;
      100. }
      101. if (CCx >= 1 && daktiv == 4)
      102. {
      103. daktiv =0;
      104. if (CCx > 1400) CCx = 300;
      105. delay(30); // 30ms warten nach letztem interrupt
      106. //array neu=CCNible alt=C2Nible sind beide arrays gleich?
      107. CC2 = 67;
      108. for (int i=0; i <= CC2; i++)
      109. {
      110. if(CCNible[i] != C2Nible[i]) vfehl++;
      111. }
      112. CC2 = 68;
      113. if (vfehl > 0)
      114. {
      115. vfehl = 0;
      116. vnix = 0;
      117. //array kopieren
      118. for (int i=0; i <= CC2; i++)
      119. {
      120. C2Nible[i] = CCNible[i];
      121. }
      122. //Serial.print(" LCD Anzeige Änderung festgestellt: CCx= ");
      123. CCx = 0;
      124. //Ausgabe ASCII-Zeile
      125. z = 0;
      126. A25DispZeile1 = "";
      127. A25DispZeile2 = "";
      128. for (int i=0; i <= CC2; i++)
      129. {
      130. byte CCNH1 = C2Nible[i];
      131. i++;
      132. byte CCNL1 = C2Nible[i];
      133. CCNH1 = CCNH1 << 4;
      134. byte CCLCD = CCNH1 | CCNL1;
      135. if (CCLCD == 192) CCLCD = 45;
      136. if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile
      137. if (CCLCD > 126) CCLCD = 32;
      138. if (CCLCD < 32) CCLCD = 32;
      139. z++;
      140. Zeile[z] = CCLCD;
      141. //Serial.println(CCLCD,HEX);
      142. //Serial.print (Azure);
      143. Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!!
      144. int Tesla = CCLCD;
      145. if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen
      146. A25DispZeile1 = A25DispZeile1 + char (Tesla);
      147. }
      148. if (i>34) {
      149. A25DispZeile2 = A25DispZeile2 + char (Tesla);
      150. }
      151. // Otto
      152. //Serial.print(CCLCD);
      153. //Serial.print("-");
      154. }
      155. //Ute = Ute.c_str();
      156. Serial.println (A25DispZeile1);
      157. Serial.println (A25DispZeile2);
      158. A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1);
      159. A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1);
      160. ///String Test = A25DispZeile1.substring(0,2);
      161. ///Serial.println (Test);
      162. //client.publish ("A25DisplayAnzeige",message_buff);
      163. /// OTTOLEIN
      164. /// OTTOLEIN
      165. //Serial.println(" ");
      166. iper = 0;
      167. } //ende vfehl>0
      168. else // vfehl=0
      169. {
      170. vnix++;
      171. if (vnix > 10)
      172. {
      173. //Serial.print(" 10x unverändert CCx= ");
      174. iper = 0;
      175. vnix =0;
      176. }
      177. CCx = 0;
      178. } //ende vfehl=0
      179. } // ende CC2 > 0
      180. {
      181. //Serial.println("new client");
      182. // an http request ends with a blank line
      183. boolean currentLineIsBlank = true;
      184. {
      185. {
      186. {
      187. // send a standard http response header
      188. // output the value of each analog input pin
      189. for (int z=1; z <= 34; z++)
      190. {
      191. //Serial.print (Zeile[z]);
      192. }
      193. //client.println("<br />");
      194. for (int z=1; z <= 34; z++)
      195. {
      196. //client.write (Zeile[z]);
      197. }
      198. //client.println("<br />");
      199. //client.println("<br />");
      200. //client.println("---------------------------------------------");
      201. //client.println("<br />");
      202. //client.println("<b>Ferndisplay ATMOS A25-Brenner</b>");
      203. //client.println("<br />");
      204. //client.println("---------------------------------------------");
      205. //client.println("<br />");
      206. //client.print("Status Brenner: ");
      207. //client.write(Zeile[2]);
      208. //client.write(Zeile[3]);
      209. //client.write(Zeile[4]);
      210. //client.println("<br />");
      211. // ---------------------------------------------------------------------
      212. if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv)
      213. {
      214. TV[1] = Zeile[14];
      215. TV[2] = Zeile[15];
      216. }
      217. // ---------------------------------------------------------------------
      218. if (Zeile[9] == 84 && Zeile[10] == 75)
      219. {
      220. TK[1] = Zeile[14];
      221. TK[2] = Zeile[15];
      222. }
      223. if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32)
      224. {
      225. TS[1] = Zeile[14];
      226. TS[2] = Zeile[15];
      227. }
      228. //client.print("Speichertemperatur OBEN (Tv): ");
      229. //client.write(TV[1]);
      230. //client.write(TV[2]);
      231. //client.println("<br />");
      232. //client.print("Speichertemperatur MITTE (Tk): ");
      233. //client.write(TK[1]);
      234. ///client.write(TK[2]);
      235. //client.print(" &#8451");
      236. //client.println("<br />");
      237. //client.print("Speichertemperatur UNTEN (Ts): ");
      238. //client.write(TS[1]);
      239. //client.write(TS[2]);
      240. //client.print(" &#8451");
      241. //client.println("<br />");
      242. //client.print("F&oumlrderschnecke: ");
      243. if (Zeile[20] == 42)
      244. {
      245. //client.print ("Ein");
      246. }
      247. else
      248. {
      249. //client.print ("Aus");
      250. }
      251. //client.println("<br />");
      252. //client.print("Gl&uumlhz&uumlnder 1: ");
      253. if (Zeile[24] == 42)
      254. {
      255. //client.print ("Ein");
      256. }
      257. else
      258. {
      259. //client.print ("Aus");
      260. }
      261. //client.println("<br />");
      262. //client.print("Gl&uumlhz&uumlnder 2: ");
      263. if (Zeile[26] == 42)
      264. {
      265. //client.print ("Ein");
      266. }
      267. else
      268. {
      269. //client.print ("Aus");
      270. }
      271. //client.println("<br />");
      272. //client.print("Gebl&aumlse: ");
      273. if (Zeile[30] == 42)
      274. {
      275. //client.print ("Ein");
      276. }
      277. else
      278. {
      279. //client.print ("Aus");
      280. }
      281. //client.println("<br />");
      282. //client.print("Flamme: ");
      283. if (Zeile[34] == 42)
      284. {
      285. //client.print ("Ein");
      286. }
      287. else
      288. {
      289. //client.print ("Aus");
      290. }
      291. //client.println("<br />");
      292. //client.println("</html>");
      293. //break;
      294. }
      295. }
      296. }
      297. // give the web browser time to receive the data
      298. delay(1);
      299. // close the connection:
      300. //Serial.println("client disconnected");
      301. }
      302. if (millis() > (time + 2000)) {
      303. time = millis();
      304. client.publish ("A25DisplayZeile1",message_buff_1);
      305. client.publish ("A25DisplayZeile2",message_buff_2);
      306. }
      307. } // ENDE VOID LOOP
      308. void blink()
      309. {
      310. byte wertC = PINC;
      311. CCNible[CCx] = wertC;
      312. CCx++;
      313. iper++;
      314. }
      Alles anzeigen
      • 64

      • # 155551

      ernie01 schrieb:

      So, nun bitte den Trommelwirbel....

      C-Quellcode

      1. #include <SPI.h>
      2. #include <Ethernet2.h>
      3. #include <PubSubClient.h>
      4. #include <PinChangeInt.h>
      5. byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
      6. IPAddress ip(192, 168, 178, 177);
      7. IPAddress server(192, 168, 178, 76);
      8. void callback(char* topic, byte* payload, unsigned int length) {
      9. // handle message arrived
      10. }
      11. EthernetClient ethClient;
      12. PubSubClient client(ethClient);
      13. long lastReconnectAttempt = 0;
      14. boolean reconnect() {
      15. if (client.connect("arduinoClient")) {
      16. // Once connected, publish an announcement...
      17. client.publish("outTopic","DEUTSCHLAND !");
      18. // ... and resubscribe
      19. client.subscribe("inTopic");
      20. }
      21. return client.connected();
      22. }
      23. #define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
      24. byte CCNible[1500];
      25. byte C2Nible[100];
      26. int daktiv =0;
      27. int iper = 0;
      28. int CCx = 0;
      29. int CC2 = 0;
      30. int vfehl = 0;
      31. int vnix = 0;
      32. byte Zeile[68];
      33. int RetterCC2;
      34. int z=0;
      35. byte TV[3];
      36. byte TK[3];
      37. byte TS[3];
      38. unsigned long time;
      39. String A25DispZeile1 ="";
      40. String A25DispZeile2 ="";
      41. char message_buff_1[68];
      42. char message_buff_2[68];
      43. void setup() {
      44. client.setServer(server, 1883);
      45. client.setCallback(callback);
      46. Ethernet.begin(mac, ip);
      47. delay(1500);
      48. lastReconnectAttempt = 0;
      49. Serial.begin(57600);
      50. Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015");
      51. pinMode(PIN, INPUT); //set the pin to input
      52. digitalWrite(PIN, HIGH); //use the internal pullup resistor
      53. PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge
      54. DDRC = B00000000; // set PORTC (digital) to inputs
      55. vfehl = 0;
      56. vnix = 0;
      57. daktiv =0;
      58. }
      59. void loop() {
      60. if (!client.connected()) {
      61. long now = millis();
      62. if (now - lastReconnectAttempt > 5000) {
      63. lastReconnectAttempt = now;
      64. // Attempt to reconnect
      65. if (reconnect()) {
      66. lastReconnectAttempt = 0;
      67. }
      68. }
      69. } else {
      70. // Client connected
      71. client.loop();
      72. }
      73. if (CCx >= 1 && daktiv == 0)
      74. {
      75. delay(150);
      76. CCx = 0;
      77. iper = 0;
      78. daktiv++;
      79. }
      80. if (CCx >= 1 && daktiv == 1)
      81. {
      82. delay(90);
      83. CCx = 0;
      84. iper = 0;
      85. daktiv++;
      86. }
      87. if (CCx >= 1 && daktiv == 2)
      88. {
      89. delay(60);
      90. CCx = 0;
      91. iper = 0;
      92. daktiv++;
      93. }
      94. if (CCx >= 1 && daktiv == 3)
      95. {
      96. delay(30);
      97. CCx = 0;
      98. iper = 0;
      99. daktiv++;
      100. }
      101. if (CCx >= 1 && daktiv == 4)
      102. {
      103. daktiv =0;
      104. if (CCx > 1400) CCx = 300;
      105. delay(30); // 30ms warten nach letztem interrupt
      106. //array neu=CCNible alt=C2Nible sind beide arrays gleich?
      107. CC2 = 67;
      108. for (int i=0; i <= CC2; i++)
      109. {
      110. if(CCNible[i] != C2Nible[i]) vfehl++;
      111. }
      112. CC2 = 68;
      113. if (vfehl > 0)
      114. {
      115. vfehl = 0;
      116. vnix = 0;
      117. //array kopieren
      118. for (int i=0; i <= CC2; i++)
      119. {
      120. C2Nible[i] = CCNible[i];
      121. }
      122. //Serial.print(" LCD Anzeige Änderung festgestellt: CCx= ");
      123. CCx = 0;
      124. //Ausgabe ASCII-Zeile
      125. z = 0;
      126. A25DispZeile1 = "";
      127. A25DispZeile2 = "";
      128. for (int i=0; i <= CC2; i++)
      129. {
      130. byte CCNH1 = C2Nible[i];
      131. i++;
      132. byte CCNL1 = C2Nible[i];
      133. CCNH1 = CCNH1 << 4;
      134. byte CCLCD = CCNH1 | CCNL1;
      135. if (CCLCD == 192) CCLCD = 45;
      136. if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile
      137. if (CCLCD > 126) CCLCD = 32;
      138. if (CCLCD < 32) CCLCD = 32;
      139. z++;
      140. Zeile[z] = CCLCD;
      141. //Serial.println(CCLCD,HEX);
      142. //Serial.print (Azure);
      143. Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!!
      144. int Tesla = CCLCD;
      145. if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen
      146. A25DispZeile1 = A25DispZeile1 + char (Tesla);
      147. }
      148. if (i>34) {
      149. A25DispZeile2 = A25DispZeile2 + char (Tesla);
      150. }
      151. // Otto
      152. //Serial.print(CCLCD);
      153. //Serial.print("-");
      154. }
      155. //Ute = Ute.c_str();
      156. Serial.println (A25DispZeile1);
      157. Serial.println (A25DispZeile2);
      158. A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1);
      159. A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1);
      160. ///String Test = A25DispZeile1.substring(0,2);
      161. ///Serial.println (Test);
      162. //client.publish ("A25DisplayAnzeige",message_buff);
      163. /// OTTOLEIN
      164. /// OTTOLEIN
      165. //Serial.println(" ");
      166. iper = 0;
      167. } //ende vfehl>0
      168. else // vfehl=0
      169. {
      170. vnix++;
      171. if (vnix > 10)
      172. {
      173. //Serial.print(" 10x unverändert CCx= ");
      174. iper = 0;
      175. vnix =0;
      176. }
      177. CCx = 0;
      178. } //ende vfehl=0
      179. } // ende CC2 > 0
      180. {
      181. //Serial.println("new client");
      182. // an http request ends with a blank line
      183. boolean currentLineIsBlank = true;
      184. {
      185. {
      186. {
      187. // send a standard http response header
      188. // output the value of each analog input pin
      189. for (int z=1; z <= 34; z++)
      190. {
      191. //Serial.print (Zeile[z]);
      192. }
      193. //client.println("<br />");
      194. for (int z=1; z <= 34; z++)
      195. {
      196. //client.write (Zeile[z]);
      197. }
      198. //client.println("<br />");
      199. //client.println("<br />");
      200. //client.println("---------------------------------------------");
      201. //client.println("<br />");
      202. //client.println("<b>Ferndisplay ATMOS A25-Brenner</b>");
      203. //client.println("<br />");
      204. //client.println("---------------------------------------------");
      205. //client.println("<br />");
      206. //client.print("Status Brenner: ");
      207. //client.write(Zeile[2]);
      208. //client.write(Zeile[3]);
      209. //client.write(Zeile[4]);
      210. //client.println("<br />");
      211. // ---------------------------------------------------------------------
      212. if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv)
      213. {
      214. TV[1] = Zeile[14];
      215. TV[2] = Zeile[15];
      216. }
      217. // ---------------------------------------------------------------------
      218. if (Zeile[9] == 84 && Zeile[10] == 75)
      219. {
      220. TK[1] = Zeile[14];
      221. TK[2] = Zeile[15];
      222. }
      223. if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32)
      224. {
      225. TS[1] = Zeile[14];
      226. TS[2] = Zeile[15];
      227. }
      228. //client.print("Speichertemperatur OBEN (Tv): ");
      229. //client.write(TV[1]);
      230. //client.write(TV[2]);
      231. //client.println("<br />");
      232. //client.print("Speichertemperatur MITTE (Tk): ");
      233. //client.write(TK[1]);
      234. ///client.write(TK[2]);
      235. //client.print(" &#8451");
      236. //client.println("<br />");
      237. //client.print("Speichertemperatur UNTEN (Ts): ");
      238. //client.write(TS[1]);
      239. //client.write(TS[2]);
      240. //client.print(" &#8451");
      241. //client.println("<br />");
      242. //client.print("F&oumlrderschnecke: ");
      243. if (Zeile[20] == 42)
      244. {
      245. //client.print ("Ein");
      246. }
      247. else
      248. {
      249. //client.print ("Aus");
      250. }
      251. //client.println("<br />");
      252. //client.print("Gl&uumlhz&uumlnder 1: ");
      253. if (Zeile[24] == 42)
      254. {
      255. //client.print ("Ein");
      256. }
      257. else
      258. {
      259. //client.print ("Aus");
      260. }
      261. //client.println("<br />");
      262. //client.print("Gl&uumlhz&uumlnder 2: ");
      263. if (Zeile[26] == 42)
      264. {
      265. //client.print ("Ein");
      266. }
      267. else
      268. {
      269. //client.print ("Aus");
      270. }
      271. //client.println("<br />");
      272. //client.print("Gebl&aumlse: ");
      273. if (Zeile[30] == 42)
      274. {
      275. //client.print ("Ein");
      276. }
      277. else
      278. {
      279. //client.print ("Aus");
      280. }
      281. //client.println("<br />");
      282. //client.print("Flamme: ");
      283. if (Zeile[34] == 42)
      284. {
      285. //client.print ("Ein");
      286. }
      287. else
      288. {
      289. //client.print ("Aus");
      290. }
      291. //client.println("<br />");
      292. //client.println("</html>");
      293. //break;
      294. }
      295. }
      296. }
      297. // give the web browser time to receive the data
      298. delay(1);
      299. // close the connection:
      300. //Serial.println("client disconnected");
      301. }
      302. if (millis() > (time + 2000)) {
      303. time = millis();
      304. client.publish ("A25DisplayZeile1",message_buff_1);
      305. client.publish ("A25DisplayZeile2",message_buff_2);
      306. }
      307. } // ENDE VOID LOOP
      308. void blink()
      309. {
      310. byte wertC = PINC;
      311. CCNible[CCx] = wertC;
      312. CCx++;
      313. iper++;
      314. }
      Alles anzeigen
      Hi Volker

      Dann teste ich das Mal bei Gelegenheit U d gib Rückmeldung.
      Hast du mein Bild gesehen? Der "::" ist der gewollt? War mir bis dato in der Syntax nicht bekannt *grübel
      Hat das einen Grund das sehr viel auskomemtiert ist mit "//" ?

      Oder les ich's Grad falsch


      Danke nochmal für dein Werk und ich melde mich mit Feedback zurück


      Gruß Tom :)

      Gesendet von meinem MI 6 mit Tapatalk
      • 65

      • # 155716

      ernie01 schrieb:

      So, nun bitte den Trommelwirbel....

      C-Quellcode

      1. #include <SPI.h>
      2. #include <Ethernet2.h>
      3. #include <PubSubClient.h>
      4. #include <PinChangeInt.h>
      5. byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX };
      6. IPAddress ip(192, 168, 178, 177);
      7. IPAddress server(192, 168, 178, 76);
      8. void callback(char* topic, byte* payload, unsigned int length) {
      9. // handle message arrived
      10. }
      11. EthernetClient ethClient;
      12. PubSubClient client(ethClient);
      13. long lastReconnectAttempt = 0;
      14. boolean reconnect() {
      15. if (client.connect("arduinoClient")) {
      16. // Once connected, publish an announcement...
      17. client.publish("outTopic","DEUTSCHLAND !");
      18. // ... and resubscribe
      19. client.subscribe("inTopic");
      20. }
      21. return client.connected();
      22. }
      23. #define PIN A8 // interrupt-pin E vom Atmos A25 LCD-Display
      24. byte CCNible[1500];
      25. byte C2Nible[100];
      26. int daktiv =0;
      27. int iper = 0;
      28. int CCx = 0;
      29. int CC2 = 0;
      30. int vfehl = 0;
      31. int vnix = 0;
      32. byte Zeile[68];
      33. int RetterCC2;
      34. int z=0;
      35. byte TV[3];
      36. byte TK[3];
      37. byte TS[3];
      38. unsigned long time;
      39. String A25DispZeile1 ="";
      40. String A25DispZeile2 ="";
      41. char message_buff_1[68];
      42. char message_buff_2[68];
      43. void setup() {
      44. client.setServer(server, 1883);
      45. client.setCallback(callback);
      46. Ethernet.begin(mac, ip);
      47. delay(1500);
      48. lastReconnectAttempt = 0;
      49. Serial.begin(57600);
      50. Serial.println("MEGA2560_PortC_v8 PortC lesen/schreiben 05.04.2015");
      51. pinMode(PIN, INPUT); //set the pin to input
      52. digitalWrite(PIN, HIGH); //use the internal pullup resistor
      53. PCintPort::attachInterrupt(PIN, blink, RISING); // attach a PinChange Interrupt to our pin on the rising edge
      54. DDRC = B00000000; // set PORTC (digital) to inputs
      55. vfehl = 0;
      56. vnix = 0;
      57. daktiv =0;
      58. }
      59. void loop() {
      60. if (!client.connected()) {
      61. long now = millis();
      62. if (now - lastReconnectAttempt > 5000) {
      63. lastReconnectAttempt = now;
      64. // Attempt to reconnect
      65. if (reconnect()) {
      66. lastReconnectAttempt = 0;
      67. }
      68. }
      69. } else {
      70. // Client connected
      71. client.loop();
      72. }
      73. if (CCx >= 1 && daktiv == 0)
      74. {
      75. delay(150);
      76. CCx = 0;
      77. iper = 0;
      78. daktiv++;
      79. }
      80. if (CCx >= 1 && daktiv == 1)
      81. {
      82. delay(90);
      83. CCx = 0;
      84. iper = 0;
      85. daktiv++;
      86. }
      87. if (CCx >= 1 && daktiv == 2)
      88. {
      89. delay(60);
      90. CCx = 0;
      91. iper = 0;
      92. daktiv++;
      93. }
      94. if (CCx >= 1 && daktiv == 3)
      95. {
      96. delay(30);
      97. CCx = 0;
      98. iper = 0;
      99. daktiv++;
      100. }
      101. if (CCx >= 1 && daktiv == 4)
      102. {
      103. daktiv =0;
      104. if (CCx > 1400) CCx = 300;
      105. delay(30); // 30ms warten nach letztem interrupt
      106. //array neu=CCNible alt=C2Nible sind beide arrays gleich?
      107. CC2 = 67;
      108. for (int i=0; i <= CC2; i++)
      109. {
      110. if(CCNible[i] != C2Nible[i]) vfehl++;
      111. }
      112. CC2 = 68;
      113. if (vfehl > 0)
      114. {
      115. vfehl = 0;
      116. vnix = 0;
      117. //array kopieren
      118. for (int i=0; i <= CC2; i++)
      119. {
      120. C2Nible[i] = CCNible[i];
      121. }
      122. //Serial.print(" LCD Anzeige Änderung festgestellt: CCx= ");
      123. CCx = 0;
      124. //Ausgabe ASCII-Zeile
      125. z = 0;
      126. A25DispZeile1 = "";
      127. A25DispZeile2 = "";
      128. for (int i=0; i <= CC2; i++)
      129. {
      130. byte CCNH1 = C2Nible[i];
      131. i++;
      132. byte CCNL1 = C2Nible[i];
      133. CCNH1 = CCNH1 << 4;
      134. byte CCLCD = CCNH1 | CCNL1;
      135. if (CCLCD == 192) CCLCD = 45;
      136. if (CCLCD == 0) CCLCD = 42; // Anzeige der Sterne (*) aus zweite Zeile
      137. if (CCLCD > 126) CCLCD = 32;
      138. if (CCLCD < 32) CCLCD = 32;
      139. z++;
      140. Zeile[z] = CCLCD;
      141. //Serial.println(CCLCD,HEX);
      142. //Serial.print (Azure);
      143. Serial.write(CCLCD); // Nur ein einziges Zeichen wir hier ausgegeben !!! ERST durch die Wiederholungen (For/Next) ergibt sich dann die ganze Zeile !!!
      144. int Tesla = CCLCD;
      145. if (i>2 and i<34) { // Erstes Leerzeichen vor der Displayanzeige löschen
      146. A25DispZeile1 = A25DispZeile1 + char (Tesla);
      147. }
      148. if (i>34) {
      149. A25DispZeile2 = A25DispZeile2 + char (Tesla);
      150. }
      151. // Otto
      152. //Serial.print(CCLCD);
      153. //Serial.print("-");
      154. }
      155. //Ute = Ute.c_str();
      156. Serial.println (A25DispZeile1);
      157. Serial.println (A25DispZeile2);
      158. A25DispZeile1.toCharArray(message_buff_1,A25DispZeile1.length()+1);
      159. A25DispZeile2.toCharArray(message_buff_2,A25DispZeile2.length()+1);
      160. ///String Test = A25DispZeile1.substring(0,2);
      161. ///Serial.println (Test);
      162. //client.publish ("A25DisplayAnzeige",message_buff);
      163. /// OTTOLEIN
      164. /// OTTOLEIN
      165. //Serial.println(" ");
      166. iper = 0;
      167. } //ende vfehl>0
      168. else // vfehl=0
      169. {
      170. vnix++;
      171. if (vnix > 10)
      172. {
      173. //Serial.print(" 10x unverändert CCx= ");
      174. iper = 0;
      175. vnix =0;
      176. }
      177. CCx = 0;
      178. } //ende vfehl=0
      179. } // ende CC2 > 0
      180. {
      181. //Serial.println("new client");
      182. // an http request ends with a blank line
      183. boolean currentLineIsBlank = true;
      184. {
      185. {
      186. {
      187. // send a standard http response header
      188. // output the value of each analog input pin
      189. for (int z=1; z <= 34; z++)
      190. {
      191. //Serial.print (Zeile[z]);
      192. }
      193. //client.println("<br />");
      194. for (int z=1; z <= 34; z++)
      195. {
      196. //client.write (Zeile[z]);
      197. }
      198. //client.println("<br />");
      199. //client.println("<br />");
      200. //client.println("---------------------------------------------");
      201. //client.println("<br />");
      202. //client.println("<b>Ferndisplay ATMOS A25-Brenner</b>");
      203. //client.println("<br />");
      204. //client.println("---------------------------------------------");
      205. //client.println("<br />");
      206. //client.print("Status Brenner: ");
      207. //client.write(Zeile[2]);
      208. //client.write(Zeile[3]);
      209. //client.write(Zeile[4]);
      210. //client.println("<br />");
      211. // ---------------------------------------------------------------------
      212. if (Zeile[9] == 84 && Zeile[10] == 86) // Speichertemperatur OEBN (Tv)
      213. {
      214. TV[1] = Zeile[14];
      215. TV[2] = Zeile[15];
      216. }
      217. // ---------------------------------------------------------------------
      218. if (Zeile[9] == 84 && Zeile[10] == 75)
      219. {
      220. TK[1] = Zeile[14];
      221. TK[2] = Zeile[15];
      222. }
      223. if (Zeile[9] == 84 && Zeile[10] == 83 && Zeile[11] == 32)
      224. {
      225. TS[1] = Zeile[14];
      226. TS[2] = Zeile[15];
      227. }
      228. //client.print("Speichertemperatur OBEN (Tv): ");
      229. //client.write(TV[1]);
      230. //client.write(TV[2]);
      231. //client.println("<br />");
      232. //client.print("Speichertemperatur MITTE (Tk): ");
      233. //client.write(TK[1]);
      234. ///client.write(TK[2]);
      235. //client.print(" &#8451");
      236. //client.println("<br />");
      237. //client.print("Speichertemperatur UNTEN (Ts): ");
      238. //client.write(TS[1]);
      239. //client.write(TS[2]);
      240. //client.print(" &#8451");
      241. //client.println("<br />");
      242. //client.print("F&oumlrderschnecke: ");
      243. if (Zeile[20] == 42)
      244. {
      245. //client.print ("Ein");
      246. }
      247. else
      248. {
      249. //client.print ("Aus");
      250. }
      251. //client.println("<br />");
      252. //client.print("Gl&uumlhz&uumlnder 1: ");
      253. if (Zeile[24] == 42)
      254. {
      255. //client.print ("Ein");
      256. }
      257. else
      258. {
      259. //client.print ("Aus");
      260. }
      261. //client.println("<br />");
      262. //client.print("Gl&uumlhz&uumlnder 2: ");
      263. if (Zeile[26] == 42)
      264. {
      265. //client.print ("Ein");
      266. }
      267. else
      268. {
      269. //client.print ("Aus");
      270. }
      271. //client.println("<br />");
      272. //client.print("Gebl&aumlse: ");
      273. if (Zeile[30] == 42)
      274. {
      275. //client.print ("Ein");
      276. }
      277. else
      278. {
      279. //client.print ("Aus");
      280. }
      281. //client.println("<br />");
      282. //client.print("Flamme: ");
      283. if (Zeile[34] == 42)
      284. {
      285. //client.print ("Ein");
      286. }
      287. else
      288. {
      289. //client.print ("Aus");
      290. }
      291. //client.println("<br />");
      292. //client.println("</html>");
      293. //break;
      294. }
      295. }
      296. }
      297. // give the web browser time to receive the data
      298. delay(1);
      299. // close the connection:
      300. //Serial.println("client disconnected");
      301. }
      302. if (millis() > (time + 2000)) {
      303. time = millis();
      304. client.publish ("A25DisplayZeile1",message_buff_1);
      305. client.publish ("A25DisplayZeile2",message_buff_2);
      306. }
      307. } // ENDE VOID LOOP
      308. void blink()
      309. {
      310. byte wertC = PINC;
      311. CCNible[CCx] = wertC;
      312. CCx++;
      313. iper++;
      314. }
      Alles anzeigen
      Hi Volker, falls du noch liest...

      Also das Grundprogramm von Jürgen geht jetzt bei mir.
      Mein Fehler war ein Farbendreh der Bits. Anbei auch n Bild.

      Kannst du mir vll sagen wie du die Tasten noch ausgeknobelt hast und welches Ethernet Board du verbaut hast? (Einkaufsliste)
      Dazu Nochmal die alten Beiträge angesehen.
      Dein Sketch wird vermutlich wegen des fehlenden Ethernet Boards bei mir noch nicht funktionieren. Aber da jetzt da Grund Projekt läuft bin ich auf dem richtigen Weg*freu
      Danke und Gruß


      Tom



      Gesendet von meinem MI 6 mit Tapatalk
      • 66

      • # 155733
      Hallo Tom,

      Glückwunsch !
      Der Rest ist dann ja einfach.
      Nutze das Grundprogramm und erweiter es einfach..

      Mein Sketch enthält ja noch die Ausgabe der HTML-Seite und den MQTT-Betrieb und....und....
      Wichtig ist ja nur der Teil von Jürgen.
      Meine Wesentliche Änderung ist die korrekte Darstellung der zweiten Displayzeile mit den Sternen....
      Siehst du ja auch an deinem Bild......Zeigt nur Daten aus Zeile 1.

      Ethernet-Shield ist auch ein Original. Welches muss ich nachsehen, was leider bis zum Wochende
      braucht. Denke aber, das es kein bestimmtes Shield sein muss.

      Dito weg. der Tasten. Sind vier Drähte die gegen Masse geschaltet werden.
      Die vier Drähte siehst du in meinem „Beweisfotos“ (unten links)

      Gruß Volker
      • 67

      • # 155888

      ernie01 schrieb:

      Hallo Tom,

      Glückwunsch !
      Der Rest ist dann ja einfach.
      Nutze das Grundprogramm und erweiter es einfach..

      Mein Sketch enthält ja noch die Ausgabe der HTML-Seite und den MQTT-Betrieb und....und....
      Wichtig ist ja nur der Teil von Jürgen.
      Meine Wesentliche Änderung ist die korrekte Darstellung der zweiten Displayzeile mit den Sternen....
      Siehst du ja auch an deinem Bild......Zeigt nur Daten aus Zeile 1.

      Ethernet-Shield ist auch ein Original. Welches muss ich nachsehen, was leider bis zum Wochende
      braucht. Denke aber, das es kein bestimmtes Shield sein muss.

      Dito weg. der Tasten. Sind vier Drähte die gegen Masse geschaltet werden.
      Die vier Drähte siehst du in meinem „Beweisfotos“ (unten links)

      Gruß Volker
      Hi

      Mich würde interessieren wie das bei dir im iobroker aussieht wenn's als mqtt rein kommt (Objekte)?

      Meinst du kannst da Mal n Bild machen ;)

      Grüße

      Gesendet von meinem MI 6 mit Tapatalk
      • 68

      • # 155933
      Hallo Tom,

      zunächst benötigst du eine IOBROKER-Installation auf einem Windows-PC, Raspberry PI, oder oder oder....
      Im IOBROKER gibt es unzählige Adapter. Auch welche für MQTT. Einen MQTT musst du aus dem Bereich
      der Adapter auswählen und einrichten. Den findest du danach im Bereich der INSTANZEN wieder.
      Das ist dann mal die erste Basis. Also ein MQTT als Server....Ist der korrekt eingerichtet, findest du die A25-Display-Daten des Arduino im Bereich der OBJEKTE.

      Bildschirmfoto 2019-01-18 um 19.56.49.png


      Bildschirmfoto 2019-01-18 um 19.49.23.png

      Die weitere Verarbeitung kann dann z.B. in Node-RED (unter IOBROKER) erfolgen.

      Bildschirmfoto 2019-01-18 um 20.00.51.png

    Webutation