Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   352 / 847
(#) Johnycorp hozzászólása Jún 5, 2017 /
 
Sziasztok!

Az alábbi kombót használta már valaki közületek?

Bővebben: Link

A két modult venném együtt értelemszerűen.
Minimális feladata lenne (DS18b20 és néhány kimenet), csak most Etherneten át szeretném elérni, ezért az eddig használt ESP-12E nem megfelelő.

Köszönöm.
(#) djusee válasza jeges hozzászólására (») Jún 5, 2017 /
 
Én egyszerüen csak használom, nem fejtegetek hibakódokat az IDE ben, és egyik dolog az pont az idö amiért nekem bejött.
(#) jeges válasza djusee hozzászólására (») Jún 5, 2017 /
 
Nekem is ez let volna a célom de okádgya a hibbákat használatkor....
(#) kapu48 válasza jeges hozzászólására (») Jún 5, 2017 /
 
Tévedsz! Nem kínlódás, és nem hibás!
Aki már ismeri, és beállította magának. Annak élvezet vele dolgozni!

Hiszen minden felhasználónak másak az igényei. És ezt teljesen rá lehet szabni a mindenkori feladatok könnyebb megoldására.
Már ismerünk, nem kel bemutatkoznod! Te nem szeretsz tanulni!
(#) jeges válasza kapu48 hozzászólására (») Jún 5, 2017 /
 
ezt te látod igy csak....
(#) jeges válasza kapu48 hozzászólására (») Jún 5, 2017 /
 
Ha annyira tökéletes akkor....
Elmesélhetnéd ez mitöl van minden redben van (port... baund... eszköz) nincs hibba jelentés sem!
Hadwere (arduio uno) még egy led villogtato feltöltés sem teljesül hadweresen!
Pedig minden ok neki jováhagya!
  1. Starting upload
  2. using arduino loader
  3.  
  4.  
  5. LaunchingC:\Program Files\sloeber\/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9/bin/avrdude -CC:\Program Files\sloeber\/arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9/etc/avrdude.conf -patmega328p -cstk500v2 -Pusb -Uflash:w:C:\Users\dex\Documents\sloeber-workspace\1/Release/1.hex:i
  6. Output:
  7.  
  8. avrdude done.  Thank you.
  9.  
  10. /arduinoPlugin/packages/arduino/tools/avrdude/6.3.0-arduino9/bin/avrdude finished
  11. upload done
A hozzászólás módosítva: Jún 5, 2017

Snap002.jpg
    
(#) Robin2 hozzászólása Jún 5, 2017 /
 
Sziasztok,
Arduinoval szeretnék feszültsége(ke)t, és egyéb feszültségre visszavezethető jellemzőket mérni. Olvasgattam a külső belső referencia megoldásokról. Tudom, hogy nem egy nagyon pontos valami lesz, de ha lehet minimális költségek mellett szeretném a maximumot kihozni. A kód összeállt, a kapcsolás próbapanelon működik.

Ha jól értelmeztem a dolgokat, belső referencia esetén (Uno: 1.1V) ezt a feszültséget osztja fel az A/D 1023 részre, tehát a felbontásom 1.1V/1023=X mV lesz? Ilyenkor a bemenő feszültség is max 1.1V lehet, a felett (max. 5V) az A/D ugyanúgy 1023 értéket ad?

Érdemes-e külső referenciát használni és ha igen, akkor minnél kisebb feszültségűt? (Gondolok itt arra, hogy minnél kisebb értéket kell felosztani, tehát nő a felbontásom.)

Járható-e, hogy egy viszonylag pontosabbnak (tűnő) nagyobb feszültségű (1.2V helyett 4.096V) referenciát leosztok 1V környékére?
(#) icserny válasza Johnycorp hozzászólására (») Jún 5, 2017 /
 
Az ENC28J60 elég buta, nem a legszerencsésebb választás a kevés RAM-mal ellátott Arduinohoz. A Wiznet W5100 talán jobb választás - igaz, drágább is.
(#) jeges válasza Robin2 hozzászólására (») Jún 5, 2017 /
 
külsö ref ict javaslok mcp1541....
(#) Bakman válasza Robin2 hozzászólására (») Jún 5, 2017 / 2
 
Minden műszer, így az Arduino belső ADC-je is a végkitérés közelében mér a legpontosabban. Ha 0-4 V közötti jelet szeretnél mérni, érdemes 4,096 V-os referenciafeszültséget használni. Ha 0-2 V közötti jelet akarsz mérni, akkor pl. 2,5 V-os referenciát.

Lehet kapni mindenféle referenciafeszültséget előállító alkatrészt, válassz a feladathoz egyet. Az nem jó út, hogy a referenciafeszültséget osztod valamivel, extra hibát viszel a rendszerbe. Ha pontosabb mérés kell, nagyobb felbontású ADC-t kell használnod, ilyenből is van választék, már ha a kiszemelt kontroller nem tud többet. Tápfeszültségre bízni a referenciát szintén nem jó megoldás, az többet ingadozhat a kelleténél. 12 bites felbontás felett már szép kihívás stabil mérést végrehajtani, amatőr szinten.

Ha az ADC bemeneten magasabb a feszültség, mint a referencia, 1023-at ad vissza a kontroller.
(#) Robin2 válasza Bakman hozzászólására (») Jún 5, 2017 / 1
 
Értem, köszönöm. Egy tápegységben lenne müszerként (kimeneti feszültség, áram, hütöborda hömérséklet kijelzésre), kb. 20V/2A amit mérnie kellene. Akkor a 4.096V-os referencia jónak tünik.
(#) jeges válasza Robin2 hozzászólására (») Jún 5, 2017 / 1
 
vagy kész megoldás....
Bővebben: Link
(#) Johnycorp válasza icserny hozzászólására (») Jún 5, 2017 /
 
Köszönöm.

Ahogy nézem, nem túl veszedelmesen nagy a különbség árban.
Te használsz valamilyen (hasonló) megoldást?
(#) djusee válasza jeges hozzászólására (») Jún 6, 2017 /
 
Szia. A kép alapján Te a serial monitor alatt nyitottad meg a COM portot. Ahhoz hogy fel tudd tölteni, a projectedhez kell beállitani hogy melyik porton töltse fel a programot.Meglévö projectnél jobbklikk a projectre majd arduino menüpont alatt állitsd be a portot.
(#) icserny válasza Johnycorp hozzászólására (») Jún 6, 2017 /
 
Idézet:
„Te használsz valamilyen (hasonló) megoldást?”

Nem, nekem kényelmesebb a Wifi. TP-Link WR703N + openwrt, illetve újabban NodeMCU+lua.
(#) kapu48 válasza jeges hozzászólására (») Jún 6, 2017 /
 
Ebből a hozzászólásodból látszik, nem szántál rá időt, hogy megnézd a mellékelt több órányi videókat. Mert teljesen vakon vagdalkozol!

Pedig szinte minden problémát kitárgyalnak!

Azt mondod nincsen rá időd? Hát ne haragudj, de ezek után nekem sincs rád!
(#) jeges válasza djusee hozzászólására (») Jún 6, 2017 /
 
programozó default kelet álitani!
de a könytárakal nem boldogul ami ide alá irtak nagyon válogat...
De megtaláltam végre nekem való környezetet ide épül fel Sublime Text Bővebben: Link !


Van profibb verzioja is atom néven fut ez zürös telepiteni elszál egy bizonyos résznél "Platform ide" igy felejtös....
Bővebben: Link
(#) jeges válasza kapu48 hozzászólására (») Jún 6, 2017 /
 
Tököltem vele 2 napot telepités és felhasználási szolo videokal de nekem nem jöt össze részemröl egyi és kész!
Lépéseket követem ahogy a videokon más rész a hibbák jöhetnek a winfos elmarat update miat is azokat kerülöm inkább hogy csak egy ilyen fosstalicska müködjön csak rajta boruljon a win stabil müködése a sok win update miat...
A hozzászólás módosítva: Jún 6, 2017
(#) djusee válasza jeges hozzászólására (») Jún 6, 2017 /
 
Figyeld meg a képet az elöbbi hozzászólásomnál, Van a Board, Upload protocol(ami default) és alatta a Port, ott válaszd ki a megfelelö portot, windows alatt gondolom COM1,COM2,....
(#) jeges válasza djusee hozzászólására (») Jún 6, 2017 /
 
Port szám is jó! programozot kelet default vissza löni ugy felment a ledvillogos progi!
Tenél egy probát pl ez hibba nélkül befordit egy mintapéldát is nálam nem?!
https://github.com/sui77/rc-switch/
sample legyen ReceiveDemo_Simple.pde kod elején bent hagyom Arduino.h definiciot is amit alapbol ott van uj üres projektnél!
uj arduino projekt mapábba behuzom RCSwitch.cpp....RCSwitch.h és forditanák de döl az 3 warning hibba ezt megfejteni amikre hivatkozik?!
A hozzászólás módosítva: Jún 6, 2017
(#) game4812 hozzászólása Jún 8, 2017 /
 
Sziasztok!
Adott egy arduino Duamilanove (szinte Uno) és egy ESP8266, hőmérséklet adatot szeretnék velük küldeni ide. Mint látható, működik is a kód, de ha beépítem a fő akváriumvezérlő programba, akkor már nem küld adatokat, a serial monitoron sem látok semmit, a zöld LED-ek sem villognak, viszont a routerhez csatlakozásnál levő 20s delay érzékelhető, tehát lefut az a része is a programnak, csak szerintem nem indul el sem a software, sem a hardware serial. ezért nem küld adatokat a netre, és a számítógépre. Az LCD-n is tudok lépkedni, a program maga nem fagy ki. A program elég nagy, és fogok is rajta átdolgozni részeket, de még van 280 bájtom szabadon a dinamikus memóriából, a wifi nélküli .ino fájlban 410-et jelez, futás közben ez 360-ra csökken, tehát elméletileg itt is maradnia kellene legalább 230-nak. Hol lenne érdemes a hibakeresést kezdeni?

Ami küldi az adatot, és a serial monitoron is visszajelez:
  1. #include <SoftwareSerial.h>
  2. #define temppin A3                                 // defining pin A0 for DHT sensor
  3. float temp;
  4. SoftwareSerial esp8266Module(4, 5);               // RX, TX
  5.  
  6. String network = "*****";                            // your access point SSID
  7. String password = "*****";                  // your wifi Access Point password
  8. #define IP "184.106.153.149"                        // IP address of thingspeak.com
  9. String GET = "GET /update?key=*****";    // replace with your channel key
  10.  
  11. void setup()
  12. {Serial.begin(9600);                             // Setting hardware serial baud rate to 9600
  13.   esp8266Module.begin(9600);                        // Setting softserial baud rate to 9600
  14.   delay(2000);}
  15.  
  16. void loop()
  17. {     delay(500);
  18. Serial.println("Reseting esp8266");
  19.     esp8266Module.println("AT+RST");
  20.     delay(7000);
  21.     if (esp8266Module.find("OK"))
  22.     {Serial.println("Found OK");
  23.      Serial.println("Changing espmode");}  
  24.      esp8266Module.flush();
  25.  esp8266Module.println(F("AT+CWMODE=1"));
  26.     if (esp8266Module.find("OK"))
  27.     {Serial.println("Mode changed");}
  28.     else if(esp8266Module.find("NO CHANGE")){
  29.     Serial.println("Already in mode 1");}
  30.      delay(5000);
  31.      esp8266Module.flush();
  32.  
  33.  Serial.println("inside connectToWiFi");
  34.  String cmd = F("AT+CWJAP=\"");
  35.  cmd += network;
  36.  cmd += F("\",\"");
  37.  cmd += password;
  38.  cmd += F("\"");
  39.  esp8266Module.println(cmd);
  40.  delay(15000);
  41.  if (esp8266Module.find("OK"))
  42.  { Serial.println("Connected to Access Point");}
  43.   else
  44.   {Serial.println("Could not connect to Access Point");}
  45.  
  46.  temp = analogRead(temppin);
  47.  
  48.   cmd = "AT+CIPSTART=\"TCP\",\"";
  49.   cmd += IP;
  50.   cmd += "\",80";
  51.   esp8266Module.println(cmd);
  52.   delay(5000);
  53.   if(esp8266Module.find("Error")){
  54.   Serial.println("ERROR while SENDING");}
  55.   cmd = GET + "&field1=" + temp + "\r\n";
  56.   esp8266Module.print("AT+CIPSEND=");
  57.   esp8266Module.println(cmd.length());
  58.   delay(15000);
  59.   if(esp8266Module.find(">"))
  60.   { esp8266Module.print(cmd);
  61. Serial.println("Data sent");}
  62.  else
  63.   {esp8266Module.println("AT+CIPCLOSE"); Serial.println("Connection closed");    }  
  64.   }



  1. #include <SoftwareSerial.h>
  2. #include <MemoryFree.h>
  3. #include <Wire.h>
  4. #include <EEPROM.h>
  5. //#include <EEPROMex.h>
  6. #include <SmoothAnalogInput.h>
  7. #include <avr/pgmspace.h>
  8. #include <DS3231.h>
  9. #include <FastIO.h>
  10. #include <I2CIO.h>
  11. #include <LCD.h>
  12. #include <LiquidCrystal.h>
  13. #include <LiquidCrystal_I2C.h>
  14. #include <LiquidCrystal_SR.h>
  15. #include <LiquidCrystal_SR2W.h>
  16. #include <LiquidCrystal_SR3W.h>
  17. #include <ClickEncoder.h>
  18. #include <TimerOne.h>
  19. #define aref_voltage 3.3
  20. #define THERMISTORNOMINAL 10000      
  21. #define TEMPERATURENOMINAL 25  
  22. #define BCOEFFICIENT 3950
  23. #define SERIESRESISTOR 10000
  24. SoftwareSerial esp8266Module(4, 5);               // RX, TX
  25. int plnt0 = A0;                               //PLANTPUMP0
  26. int plnt1 = A1;                               //PLANTPUMP1
  27. int e1 = A2;                                  //Error LED 1 WATER LEVEL
  28. int temppin = A3;                             //TEMPERATURE SENSOR  
  29.                                               //A4 A5 I2C  D1 D2 RX TX
  30.                                               //2-3-7 ENCODER
  31. int heater=11;                               //relay4 heater
  32. int co2 = 12;
  33. ;                                  //relay3 co2
  34. int lcdbl = 6;                                //LCD BackLight
  35. int wls = 8;                                  //Water level switch
  36. int LED = 9;                                  //PWM RED LED
  37. int fan = 10;                                 //PWM YELLOW FAN!!!   10
  38. int pump = 11;                                //relay1 external filter
  39. int neon = 12;                                //relay2 T5 lights
  40. int e2 = 13;                                  //Temperature Error LED
  41. DS3231  rtc(SDA, SCL);
  42. Time  t;
  43. byte wlsv = LOW;                                                   //water level value
  44. float tempHeaterMin = 24.5;                                        //HEATER ON
  45. float tempHeaterMax = 24.8;                                        //HEATER OFF
  46. float tempHeaterMinNight = 24.5;                                   //HEATER ON
  47. float tempHeaterMaxNight = 24.8;                                   //HEATER OFF
  48. int tempFanMin = 10600;                                            //FAN speed min
  49. int tempFanMax = 11100;                                            //FAN speed max
  50. byte tempLedHigh = 27;                                             //TEMPLED Upper treshold
  51. byte tempLedLow = 23;                                              //TEMPLED Lower treshold
  52. byte FANspeed;                                                     //FAN speed value
  53. byte FANsz;                                                        //FAN speed LCD
  54. byte neonv;                                                        //NEON ON-OFF value
  55. unsigned long LEDv;                                                //LED ON-OFF value
  56. unsigned long LED_UPFADEON = 36000;                                //allminute   10.00
  57. unsigned long LED_UPFADEMIDDLE = 37800;                            //allminute   10.30
  58. unsigned long LED_UPFADEOFF = 39600;                               //allminute   11.00
  59. unsigned long LED_DOWNFADEON = 75600;                              //allminute   21.00
  60. unsigned long LED_DOWNFADEMIDDLE = 77400;                          //allminute   21.30
  61. unsigned long LED_DOWNFADEOFF = 79200;                             //allminute   22.00
  62. unsigned long eattime = 61200;                                     //allminute   17.00 61200
  63. unsigned long co2on = 30600;                                       //8.30
  64. unsigned long co2off =72000;                                       //20.00
  65. unsigned long plnt0time = 37800;
  66. unsigned long plnt1time = 37810;
  67. unsigned long allsec;
  68. unsigned long hour;
  69. unsigned long min;
  70. unsigned long sec;
  71. unsigned long date;
  72. byte hourminute = 60;
  73. byte leddisp;                                                      //LED value LCD
  74. unsigned long previousMillisdisplay;
  75. unsigned long previousMillistemp;
  76. unsigned long previousMillistempz;
  77. unsigned long previousMilliswlsv;
  78. unsigned long previousMillispump;
  79. unsigned long previousMillisplnt0;
  80. unsigned long previousMillisplnt1;
  81. unsigned long previousMilliswifi;
  82. unsigned long previousMilliswifi2;
  83. unsigned long timeoutTime = 5000;
  84. unsigned long timeoutTime2 = 15000;
  85. int waitsteinhart= 12000;
  86. int previousvalue;
  87. int menuTimeout = 5000;
  88. int menuTimeout2 = 15000;
  89. int intervaltemp = 1000;
  90. int intervalwlsv = 5000;
  91. int intervallcdbl = 600;
  92. int startwifi = 20000;
  93. unsigned long intervalpump = 4000;
  94. const long intervalwifi = 7200000;
  95. const long intervalwifi2 = 20000;
  96. byte blinktime = 100;
  97. float average1;                
  98. float steinhart;
  99. byte offpump = 5;
  100. unsigned long pumpofftime = 300000;
  101. unsigned long plnt0ontime = 555;    ///26,5ml - 30s   0,9/s    5ml/nap  Macro 5555
  102. unsigned long plnt1ontime = 250;    ///  24ml - 30s   0,8/s    5ml/nap  Carbo 2500
  103. byte MoonPWMValue = 0;
  104. byte DayLightPWMValue = 100;
  105. //unsigned long uptimedays=0;
  106. //unsigned long uptimehours=0;
  107. //unsigned long uptimemins=0;
  108. //unsigned long uptimesecs=0;
  109. byte displayowr= 0;
  110. byte EEPheater = 0;
  111. byte EEPneon = 1;
  112. byte EEPfan = 2;
  113. byte EEPled = 3;
  114. byte EEPco2 = 4;
  115. byte EEPplnt0 = 5;
  116. byte EEPplnt1 = 1;
  117. //byte eepneon1 = 0;
  118. //byte eepneon2 = 4;
  119. //byte eepuptime = 8;
  120. //float neon1oh;
  121. //float neon2oh;
  122. //float neon1ohmax;
  123. //float neon2ohmax;
  124. //float filterclean;
  125. //float filtercleanmax;
  126. //int uptimedayslast;
  127. //float uptimecount;
  128. //float neon1restart = 0;
  129. //float neon2restart = 0;
  130. //float uptimecountrestart = 0;
  131. //float eepintervalhour = 0.1;
  132. //unsigned long previousMillistube = 0;
  133. //unsigned long previousMillisuptime = 0;
  134. //unsigned long eepinterval1 = 360000;
  135. //unsigned long eepinterval2 = 720000;
  136. byte heaterv;
  137. byte pumpv;
  138. byte lastneonv;
  139. byte co2v;
  140. byte plnt0v;
  141. byte plnt1v;
  142. byte setupvalue = 0;
  143. byte lastsetupvalue = 0;
  144. byte heatercntrl;
  145. byte lastheater;
  146. byte fancntrl;
  147. byte lastfan;
  148. byte neoncntrl;
  149. byte lastneon;
  150. byte ledcntrl;
  151. byte lastled;
  152. byte plnt0cntrl = 0;
  153. byte plnt1cntrl = 0;
  154. byte co2cntrl = 0;
  155. byte lastco2;
  156. byte lastplnt0;
  157. byte lastplnt1;
  158. //byte lastplnt0lst = 0;
  159. //byte lastplnt01st = 0;
  160. byte feedcount = 1;
  161. byte lcdbls = LOW;
  162. LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified backpack
  163. ClickEncoder *encoder;
  164. int16_t last, value;
  165. void timerIsr() {encoder->service();}
  166.  
  167. SmoothAnalogInput ai;
  168. byte small2[8] = {
  169.   0b00000,
  170.   0b00000,
  171.   0b00000,
  172.   0b00110,
  173.   0b01001,
  174.   0b00010,
  175.   0b00100,
  176.   0b01111
  177. };
  178.  
  179. String network = "****";                            // your access point SSID
  180. String password = "****";                  // your wifi Access Point password
  181. #define IP "184.106.153.149"                        // IP address of thingspeak.com
  182. String GET = "GET /update?key=*********";    // replace with your channel key
  183.  
  184. void setup() { //------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  185. ai.attach(temppin);delay (5000);
  186. Wire.begin();delay (2000);
  187. Serial.begin(9600);delay (2000);
  188. Serial.println("Reseting esp82661");
  189. esp8266Module.begin(9600);
  190. Serial.println("Reseting esp82662");
  191.   rtc.begin();
  192.   pinMode (plnt0, OUTPUT);
  193.   pinMode (plnt1, OUTPUT);
  194.   pinMode (neon, OUTPUT);
  195.   pinMode (co2, OUTPUT);
  196.   pinMode (heater, OUTPUT);
  197.   pinMode (pump, OUTPUT);
  198.   pinMode (LED, OUTPUT);
  199.   pinMode (wls, INPUT_PULLUP);
  200.   pinMode (fan, OUTPUT);
  201.   pinMode (e1, OUTPUT);
  202.   pinMode (e2, OUTPUT);
  203.   pinMode (temppin, INPUT);
  204.   pinMode (lcdbl, OUTPUT);
  205.   digitalWrite (pump, HIGH);
  206.   digitalWrite (heater, HIGH);
  207.   digitalWrite (LED, LOW);    
  208.   digitalWrite (fan, LOW);
  209.   digitalWrite (lcdbl, HIGH);
  210.   digitalWrite (neon, HIGH);
  211.   digitalWrite (co2, HIGH);
  212. lcd.begin (16,2); // for 16 x 2 LCD module
  213. lcd.createChar(0, small2);
  214. lcd.setBacklightPin(3,POSITIVE);
  215. lcd.setBacklight(HIGH);
  216. analogReference(EXTERNAL);
  217. Serial.println("Reseting esp82663");
  218. lcd.home();
  219. /*  lcd.print ("   <Loading>   "); lcd.setCursor (0,1);
  220.   lcd.print ("  <CONTROLLER>  "); delay(150);
  221. lcd.home();
  222.   lcd.print ("  < AQUARIUM >  "); lcd.setCursor (0,1);
  223.   lcd.print (" < CONTROLLER > "); delay(150);
  224. lcd.home();
  225.   lcd.print (" <  AQUARIUM  > "); lcd.setCursor (0,1);
  226.   lcd.print ("<  CONTROLLER  >"); delay(150);
  227. lcd.home();
  228.   lcd.print ("<   AQUARIUM   >"); lcd.setCursor (0,1);
  229.   lcd.print ("   CONTROLLER   "); delay(150); */
  230.  
  231. lastheater = EEPROM.read(EEPheater);
  232. lastneon = EEPROM.read(EEPneon);
  233. lastfan = EEPROM.read(EEPfan);
  234. lastled = EEPROM.read(EEPled);
  235. lastco2 = EEPROM.read(EEPco2);
  236. lastplnt0 = EEPROM.read(EEPplnt0);
  237. lastplnt1 = EEPROM.read(EEPplnt1);
  238. encoder = new ClickEncoder(2, 3, 7);
  239. Timer1.initialize(1000);
  240. Timer1.attachInterrupt(timerIsr); last = -1;  
  241. delay (2000);
  242. //EEPROM.writeFloat(eepneon1, neon1restart);
  243. //EEPROM.writeFloat(eepneon2, neon2restart);
  244. //EEPROM.writeFloat(eepuptime, uptimecountrestart);
  245.   // The following lines can be uncommented to set the date and time
  246.   //rtc.setDOW(FRIDAY);     // Set Day-of-Week to SUNDAY
  247.   //rtc.setTime(1, 07, 00);     // Set the time to 12:00:00 (24hr format)
  248.   //rtc.setDate(17, 6, 2016);   // Set the date to January 1st, 2014ó nap hó év
  249. }
  250. void loop() {//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  251. String cmd = F("AT+CWJAP=\"");
  252.  cmd += network;
  253.  cmd += F("\",\"");
  254.  cmd += password;
  255.  cmd += F("\"");
  256.  Serial.println("Reseting esp82666");
  257.   if ((millis() < startwifi) || (millis() - previousMilliswifi >= intervalwifi)) { previousMilliswifi =millis();
  258. Serial.println("Reseting esp8266");
  259.     esp8266Module.println("AT+RST");
  260.     delay(100);
  261.     if (esp8266Module.find("OK"))
  262.     {Serial.println("Found OK");
  263.      Serial.println("Changing espmode");}  
  264.      esp8266Module.flush();
  265.  esp8266Module.println(F("AT+CWMODE=1"));
  266.     if (esp8266Module.find("OK"))
  267.     {Serial.println("Mode changed");}
  268.     else if(esp8266Module.find("NO CHANGE")){
  269.     Serial.println("Already in mode 1");}
  270.      delay(100);
  271.      esp8266Module.flush();
  272.  esp8266Module.println(cmd);
  273.  delay(20000);
  274.  if (esp8266Module.find("OK"))
  275.  { Serial.println("Connected to Access Point");}
  276.   else
  277.   {Serial.println("Could not connect to Access Point");}
  278. ;}
  279.  
  280. pumpv = digitalRead (pump);
  281. plnt0v = digitalRead (plnt0);
  282. plnt1v = digitalRead (plnt1);
  283.  
  284. //idő--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  285. t = rtc.getTime();
  286. hour = t.hour;
  287. min = t.min;
  288. sec = t.sec;
  289. allsec = ((hour*60*60) + (min*60) + sec);
  290. //neon1oh=EEPROM.readFloat(eepneon1);
  291. //neon2oh=EEPROM.readFloat(eepneon2);
  292. //uptimecount=EEPROM.readFloat(eepuptime);
  293. /* uptimesecs = millis()/1000; //convect milliseconds to seconds
  294.  uptimemins=uptimesecs/60; //convert seconds to minutes
  295.  uptimehours=uptimemins/60; //convert minutes to hours
  296.  uptimedays=uptimehours/24; //convert hours to days
  297.  uptimesecs=uptimesecs-(uptimemins*60); //subtract the coverted seconds to minutes in order to display 59 secs max
  298.  uptimemins=uptimemins-(uptimehours*60); //subtract the coverted minutes to hours in order to display 59 minutes max
  299.  uptimehours=uptimehours-(uptimedays*24); //subtract the coverted hours to days in order to display 23 hours max */
  300. //etetés------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  301.      
  302.      if((allsec >= eattime) && (feedcount==0) && (allsec<LED_DOWNFADEOFF)){
  303. unsigned long currentMillisdisplay = millis();
  304.   if (currentMillisdisplay - previousMillisdisplay >= intervallcdbl) {previousMillisdisplay = currentMillisdisplay;
  305.     if (lcdbls == LOW) {lcdbls = HIGH;} else {lcdbls = LOW;}
  306.     digitalWrite(lcdbl, lcdbls); displayowr=1; delay(200);}}
  307.      else {displayowr=0;}
  308.      if (allsec >=LED_DOWNFADEOFF){feedcount==0;}
  309.      if(displayowr==0)  {if((value != previousvalue) || (setupvalue !=lastsetupvalue)) { timeoutTime = millis() + menuTimeout; timeoutTime2 = millis() + menuTimeout2; previousvalue=value; lastsetupvalue = setupvalue; }
  310.  if((allsec >= LED_UPFADEON) && (allsec <LED_DOWNFADEOFF)){     //nappal van
  311.    if (timeoutTime<millis()&& timeoutTime2>millis()) {analogWrite (lcdbl, 10);}
  312.    if (timeoutTime>millis()) {digitalWrite (lcdbl, HIGH);}
  313.    if (timeoutTime2<millis()) {analogWrite (lcdbl, 1); value=0; previousvalue=value; delay(500);}}
  314. else {
  315.    if (timeoutTime<millis()&& timeoutTime2>millis()) {analogWrite (lcdbl, 5);}
  316.    if (timeoutTime>millis()) {analogWrite (lcdbl, 50);}
  317.    if (timeoutTime2<millis()) {analogWrite (lcdbl, 1); value=0; previousvalue=value; delay(500);}}}
  318. //vízszint------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  319.   wlsv = digitalRead(wls);
  320.       if (wlsv==LOW) {
  321.       if (millis() - previousMilliswlsv > intervalwlsv) {previousMilliswlsv = millis();  digitalWrite(e1, HIGH);}}
  322.       if (millis() - previousMilliswlsv > blinktime) {digitalWrite(e1, LOW);}
  323.       if (wlsv==HIGH) {digitalWrite(e1, LOW);}
  324.  
  325. //hőmérséklet---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  326.   int sensorReading = ai.read();
  327.   average1 = sensorReading ;
  328.   average1 = 1023 / average1 - 1;
  329.   average1 = SERIESRESISTOR / average1;
  330.   steinhart = THERMISTORNOMINAL / average1 ;     // (R/Ro)
  331.   steinhart = log(steinhart);                  // ln(R/Ro)
  332.   steinhart /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  333.   steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  334.   steinhart = 1.0 / steinhart;                 // Invert
  335.   steinhart = steinhart - 273.5;                         // convert to C
  336.  
  337. //fűtés--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  
  338. if (wlsv == HIGH && waitsteinhart < millis()){if (lastheater==0){ (heatercntrl=0);
  339.         if((allsec >= LED_UPFADEOFF) && (allsec <LED_DOWNFADEON)){              //nappal van
  340.         if (steinhart <= (tempHeaterMin))                           digitalWrite(heater, LOW);
  341.         if (steinhart >= (tempHeaterMax))                           digitalWrite(heater, HIGH);}
  342. else {  if (steinhart <= (tempHeaterMinNight))                      digitalWrite(heater, LOW);      //éjszaka van
  343.         if (steinhart >= (tempHeaterMaxNight))                      digitalWrite(heater, HIGH);}}
  344. if (waitsteinhart > (millis())) {digitalWrite(heater, HIGH);}
  345. if (lastheater ==1 ){(heatercntrl=1); digitalWrite (heater, LOW);}
  346. if (lastheater ==2 ) {(heatercntrl=1); digitalWrite (heater, HIGH);}}
  347. if (wlsv == LOW) {digitalWrite(heater, HIGH);}
  348. heaterv=digitalRead(heater);
  349. //ventilátor---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  350. if (waitsteinhart > (millis())){analogWrite(fan, 20);}    //20-ra kell visszaírni
  351. else {if (lastfan == 0){(fancntrl = 0);
  352.     if (average1 <= (tempFanMin))                              analogWrite(fan, 20);  //20-ra kell visszaírni
  353.     if((average1 >= tempFanMin) && (average1 <= tempFanMax))  {FANspeed = map(average1, tempFanMin, tempFanMax, 20, 255); analogWrite(fan, FANspeed); }
  354.     if(average1 > tempFanMax)                                  digitalWrite (fan, HIGH);}
  355. if (lastfan == 1){(fancntrl =1);analogWrite (fan, 0);}
  356. if (lastfan == 2){(fancntrl =1);analogWrite (fan, 80);}
  357. if (lastfan == 3){(fancntrl =1);analogWrite (fan, 170);}
  358. if (lastfan == 4){(fancntrl =1);digitalWrite (fan, HIGH);}
  359.  }
  360.  
  361. if(steinhart >= tempLedHigh)                                if (millis() - previousMillistempz > intervaltemp) {previousMillistempz = millis(); digitalWrite(e2, HIGH);}
  362. if((steinhart <= tempLedHigh) && (steinhart >= tempLedLow)) digitalWrite(e2, LOW);
  363. if(steinhart <= tempLedLow)                                 if (millis() - previousMillistempz > intervaltemp) {previousMillistempz = millis(); digitalWrite(e2, HIGH);}
  364. //neon----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  365. if (lastneon == 0);{ (neoncntrl=0);
  366.     if((allsec > LED_UPFADEOFF)&&(allsec <LED_DOWNFADEON)) {digitalWrite (neon, LOW);}
  367.     else {digitalWrite (neon, HIGH);}}
  368. if (lastneon ==1) {(neoncntrl=1); digitalWrite (neon, LOW);}
  369. if (lastneon ==2) {(neoncntrl=1); digitalWrite (neon, HIGH);}
  370. neonv=digitalRead(neon);
  371. //CO2------------------
  372. if (lastco2 == 0);{(co2cntrl = 0);
  373.     if((allsec > co2on)&&(allsec <co2off)) {digitalWrite (co2, LOW);}
  374.     else {digitalWrite (co2, HIGH);}}
  375. if (lastco2 ==1) {(co2cntrl=1); digitalWrite (co2, LOW);}
  376. if (lastco2 ==2) {(co2cntrl=1); digitalWrite (co2, HIGH);}
  377. co2v=digitalRead(co2);
  378.  
  379. //if (neonv != lastneonv && neonv==HIGH) {lastneonv=neonv;}
  380. //if (neonv != lastneonv && neonv==LOW) {lastneonv=neonv; previousMillistube=millis();}
  381. //if (neonv==LOW && (millis() - previousMillistube >= eepinterval1)){previousMillistube=millis();
  382. //    neon1oh=(neon1oh + eepintervalhour); EEPROM.updateFloat(eepneon1, neon1oh);
  383. //    neon2oh=(neon2oh + eepintervalhour); EEPROM.updateFloat(eepneon2, neon2oh);}
  384. //if (millis() - previousMillisuptime >=eepinterval2) {uptimecount=(uptimecount+eepintervalhour); uptimecount=(uptimecount+eepintervalhour); EEPROM.updateFloat(eepuptime, uptimecount);}
  385.  
  386. //LED-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  387. if(lastled==0){(ledcntrl=0);
  388.      if(((allsec >= LED_UPFADEON) && (allsec <= LED_UPFADEMIDDLE))) {LEDv = map (allsec, LED_UPFADEON, LED_UPFADEMIDDLE, 0, 70); analogWrite(LED, LEDv);}
  389.      if(((allsec >= LED_UPFADEMIDDLE) && (allsec <= LED_UPFADEOFF))) {LEDv = map (allsec, LED_UPFADEMIDDLE, LED_UPFADEOFF, 70, 255); analogWrite(LED, LEDv);}
  390.      if((allsec >= LED_DOWNFADEON) && (allsec <= LED_DOWNFADEMIDDLE)) {LEDv = map (allsec, LED_DOWNFADEON, LED_DOWNFADEMIDDLE, 255, 70); analogWrite(LED, LEDv);}
  391.      if((allsec >= LED_DOWNFADEMIDDLE) && (allsec <= LED_DOWNFADEOFF)) {LEDv = map (allsec, LED_DOWNFADEMIDDLE, LED_DOWNFADEOFF, 70, 1); analogWrite(LED, LEDv);}
  392.      if((allsec >= LED_DOWNFADEOFF) || (allsec <= LED_UPFADEON)) {analogWrite(LED, MoonPWMValue);}   //MOON
  393.      if((allsec >= LED_UPFADEOFF)&&(allsec <LED_DOWNFADEON)) {analogWrite(LED, DayLightPWMValue);}} //DAYLIGHTPLUS
  394. if (lastled==1){(ledcntrl =1); analogWrite (LED, 0);}
  395. if (lastled==2){(ledcntrl =1); analogWrite (LED, 80);}
  396. if (lastled==3){(ledcntrl =1); analogWrite (LED, 210);}
  397. if (lastled==4){(ledcntrl =1); digitalWrite (LED, HIGH);}
  398. if((millis() - previousMillispump < pumpofftime) && (pumpofftime < millis())) {digitalWrite (pump, LOW);}
  399. else {digitalWrite (pump, HIGH);}
  400.  
  401. if (lastplnt0 ==0) {(plnt0cntrl =0); if (allsec == plnt0time){previousMillisplnt0 = millis();}}
  402. if (lastplnt1 ==0) {(plnt1cntrl =0); if (allsec == plnt1time){previousMillisplnt1 = millis();}}
  403. if (lastplnt0 ==1) {plnt0cntrl =1;}
  404. if (lastplnt0 ==2) {plnt0cntrl =1;}
  405. if (lastplnt1 ==1) {plnt1cntrl =1;}
  406. if (lastplnt1 ==2) {plnt1cntrl =1;}
  407.  
  408. if((millis() - previousMillisplnt0 < plnt0ontime) && (plnt0ontime < millis())) {digitalWrite (plnt0, HIGH); (delay (plnt0ontime)); digitalWrite (plnt0, LOW);}
  409. else {digitalWrite (plnt0, LOW);}
  410.  
  411. if((millis() - previousMillisplnt1 < plnt1ontime) && (plnt1ontime < millis())) {digitalWrite (plnt1, HIGH), (delay (plnt1ontime)); digitalWrite (plnt1, LOW);}
  412. else {digitalWrite (plnt1, LOW);}
  413.  
  414.  value += encoder->getValue(); //------------------------------------------------------------------------------------------------------------------------------------------------------------
  415.   if (value != last) {last = value;
  416.     if (value==30){setupvalue = lastheater;}
  417.     if (value==31){setupvalue = lastfan;}
  418.     if (value==40){setupvalue = lastneon;}
  419.     if (value==41){setupvalue = lastled;}
  420.     if (value==50){setupvalue = lastco2;}
  421.     if (value==51){setupvalue = lastplnt0;}
  422.     if (value==52){setupvalue = lastplnt1;}}
  423.  
  424.   ClickEncoder::Button b = encoder->getButton();
  425.   if (b != ClickEncoder::Open) {
  426.     #define VERBOSECASE(label) case label: Serial.println(#label); break;
  427.    switch (b) {
  428.       VERBOSECASE(ClickEncoder::Pressed);
  429.       VERBOSECASE(ClickEncoder::Released);
  430.   case ClickEncoder::Held: {(value +=100); (previousMillispump=millis());}
  431.   break;}}
  432.  if (value>22 && value<25) {value=0;}
  433.  if (value>15 && value<20) {value=0;}
  434.  if (value>31 && value<35) {value=1;}
  435.  if (value>25 && value<30) {value=1;}
  436.  if (value>41 && value<45) {value=2;}
  437.  if (value>35 && value<40) {value=2;}
  438.  if (value>52 && value<55) {value=3;}
  439.  if (value>45 && value<50) {value=3;}
  440.  if (value>61 && value<65) {value=4;}
  441.  if (value>55 && value<60) {value=4;}
  442.  if (value>65 && value<75) {value=0;}
  443.  if (value>75 && value<100) {value=100;}
  444.  if (value>=100)  {value=100;}
  445.  if (value<=0) {value=0;}
  446.  if (value>=4 && value<10) {value=4;}
  447. //LCD------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  448. switch(value){
  449. case 0:
  450. switch (b) {
  451.   case ClickEncoder::Clicked: value = (20);
  452.   break;}
  453.   lcd.home();
  454.   if( (steinhart <= tempLedLow) || (steinhart >= tempLedHigh) || (wlsv == LOW) /*|| (neon1oh > neon1ohmax) || (neon2oh > neon2ohmax)|| (filterclean > filtercleanmax) || (uptimedays > uptimedayslast)*/)
  455.   {lcd.print ("''  AQUARIUM  ''");
  456.   lcd.setCursor (0,1);
  457.   lcd.print ("'' CONTROLLER ''");}
  458.   else {
  459.   lcd.print ("    AQUARIUM    ");
  460.   lcd.setCursor (0,1);
  461.   lcd.print ("   CONTROLLER   ");}
  462. break;
  463. /*
  464. case 20:
  465.   lcd.home();
  466.   if (wlsv == LOW) {lcd.print ("Water Level Low!");}
  467.   else {lcd.print ("                ");}
  468.   lcd.setCursor (0,1);
  469.   if(steinhart >= tempLedHigh){lcd.print ("High");}
  470.   if(steinhart <= tempLedLow){lcd.print ("Low");}
  471.   if((steinhart <= tempLedLow) || (steinhart >= tempLedHigh)) {lcd.print(" Temperature ");}
  472.   if((steinhart > tempLedLow) && (steinhart < tempLedHigh)) {lcd.print("                ");}
  473.   if((steinhart > tempLedLow) && (steinhart < tempLedHigh) && (wlsv == HIGH)) {value+=1;}
  474. break;
  475.  
  476. case 21:
  477.   lcd.home();
  478.   if (neon1oh > neon1ohmax) {lcd.print ("1st Tube Change!");}
  479.   else {lcd.print ("                ");}
  480.   lcd.setCursor (0,1);
  481.   if (neon2oh > neon2ohmax) {lcd.print ("2nd Tube Change!");}
  482.   else {lcd.print ("                ");}
  483.   if((neon1oh <= neon1ohmax) && (neon2oh <= neon2ohmax)) {value+=1;}
  484. break;
  485.  
  486. case 22:
  487.   lcd.home();
  488.   if (filterclean > filtercleanmax) {lcd.print ("Filter cleaning!");}
  489.   else {lcd.print ("                ");}
  490.   lcd.setCursor (0,1);
  491.   if(uptimedays < uptimedayslast) {lcd.print ("System restart! ");}
  492.   else {lcd.print ("                ");}
  493.   if((uptimehours >= uptimedayslast) && (filterclean <= filtercleanmax)) {value=0;}
  494. break; */
  495.  
  496. case 1:
  497.  switch (b) {
  498.   case ClickEncoder::Clicked: value = (30);
  499.   break;}
  500.  lcd.home ();
  501.   lcd.print("Heater:");
  502. if (heaterv == LOW && (heatercntrl == 0 && wlsv == HIGH)) {lcd.print("ON  ");}
  503. if (heaterv == HIGH && heatercntrl == 0 && wlsv == HIGH) {lcd.print("OFF ");}
  504. if (heaterv == LOW && heatercntrl == 1) {lcd.print("ON' ");}
  505. if (heaterv == HIGH && heatercntrl == 1 || wlsv == LOW) {lcd.print("OFF'");}
  506. lcd.print (" ");
  507. lcd.print ("Temp");
  508.  lcd.setCursor (0,1);
  509.   lcd.print("Fan:");
  510.   lcd.setCursor (4,1);  
  511. if(fancntrl == 0){  FANsz = map(FANspeed, 0, 255, 0, 99);
  512. if((average1 >= tempFanMin) && (average1 <= tempFanMax)) {if (FANsz<10) {lcd.print("0");} lcd.print(FANsz);  lcd.print("%  ");}
  513. if (average1 <= (tempFanMin)) {lcd.print("OFF ");}   // "Min"
  514. if(average1 > tempFanMax) {lcd.print ("ON  ");}}
  515. if (fancntrl == 1){lcd.print("OWR'");}
  516.   lcd.print ("  ");
  517. if (waitsteinhart > (millis())){lcd.print("--.-");}
  518. if (waitsteinhart < (millis())){lcd.print (steinhart,1);}
  519.    lcd.print((char)223);
  520.    lcd.print ("C");
  521.    break;
  522.    
  523.     case 30:
  524.      switch (b) {
  525.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  526.   break;
  527.   case ClickEncoder::DoubleClicked: lastheater = setupvalue;
  528.   break;}
  529.   if (setupvalue>2){setupvalue=0;}
  530.   if (lastheater>2){lastheater=0;}
  531.      lcd.home();
  532.   lcd.print ("Heater State:");
  533.   if (heatercntrl == 0){if (heaterv == HIGH) lcd.print ("OFF");}
  534.   if (heatercntrl == 0){if (heaterv == LOW) lcd.print (" ON");}
  535.   if (heatercntrl == 1) lcd.print ("OWR");
  536.   lcd.setCursor (0,1);
  537. if (setupvalue == 0 && lastheater == 0 && wlsv == HIGH) {lcd.print F((" #PROG  ON  OFF "));}
  538. if (setupvalue == 1 && lastheater == 0 && wlsv == HIGH) {lcd.print F((" #PROG >ON  OFF "));}
  539. if (setupvalue == 2 && lastheater == 0 && wlsv == HIGH) {lcd.print F((" #PROG  ON >OFF "));}
  540. if (setupvalue == 0 && lastheater == 1 && wlsv == HIGH) {lcd.print F((" >PROG #ON  OFF "));}
  541. if (setupvalue == 1 && lastheater == 1 && wlsv == HIGH) {lcd.print F(("  PROG #ON  OFF "));}
  542. if (setupvalue == 2 && lastheater == 1 && wlsv == HIGH) {lcd.print F(("  PROG #ON >OFF "));}
  543. if (setupvalue == 0 && lastheater == 2 && wlsv == HIGH) {lcd.print F((" >PROG  ON #OFF "));}
  544. if (setupvalue == 1 && lastheater == 2 && wlsv == HIGH) {lcd.print F(("  PROG >ON #OFF "));}
  545. if (setupvalue == 2 && lastheater == 2 && wlsv == HIGH) {lcd.print F(("  PROG  ON #OFF "));}
  546. if (wlsv == LOW) {lcd.print F(("Low water level!"));}
  547. EEPROM.update(EEPheater, lastheater);
  548. break;
  549.  
  550.     case 31:
  551.      switch (b) {
  552.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  553.   break;
  554.   case ClickEncoder::DoubleClicked: lastfan = setupvalue;
  555.   break;}
  556.   if (setupvalue>4){setupvalue=0;}
  557.   if (lastfan>4){lastfan=0;}
  558.      lcd.home();
  559.   lcd.print (" Fan Level: ");
  560.   if (fancntrl == 0 && (average1 <= (tempFanMin))) {lcd.print ("OFF ");} //"Min "
  561.   if (fancntrl == 0 && (average1 > (tempFanMin) && (average1 < (tempFanMax)))) {if (FANsz<10) {lcd.print("0");} FANsz == lcd.print (FANsz); lcd.print ("% ");}
  562.   if (fancntrl == 0 && (average1 >= (tempFanMin)))  {lcd.print ("ON  ");}
  563.   if (fancntrl == 1) lcd.print ("OWR ");
  564.   lcd.setCursor (0,1);
  565. if (setupvalue == 0 && lastfan == 0) {lcd.print F((" #P  0  1  2  3 "));}
  566. if (setupvalue == 1 && lastfan == 0) {lcd.print F((" #P >0  1  2  3 "));}
  567. if (setupvalue == 2 && lastfan == 0) {lcd.print F((" #P  0 >1  2  3 "));}
  568. if (setupvalue == 3 && lastfan == 0) {lcd.print F((" #P  0  1 >2  3 "));}
  569. if (setupvalue == 4 && lastfan == 0) {lcd.print F((" #P  0  1  2 >3 "));}
  570.  
  571. if (setupvalue == 0 && lastfan == 1) {lcd.print F((" >P #0  1  2  3 "));}
  572. if (setupvalue == 1 && lastfan == 1) {lcd.print F(("  P #0  1  2  3 "));}
  573. if (setupvalue == 2 && lastfan == 1) {lcd.print F(("  P #0 >1  2  3 "));}
  574. if (setupvalue == 3 && lastfan == 1) {lcd.print F(("  P #0  1 >2  3 "));}
  575. if (setupvalue == 4 && lastfan == 1) {lcd.print F(("  P #0  1  2 >3 "));}
  576.  
  577. if (setupvalue == 0 && lastfan == 2) {lcd.print F((" >P  0 #1  2  3 "));}
  578. if (setupvalue == 1 && lastfan == 2) {lcd.print F(("  P >0 #1  2  3 "));}
  579. if (setupvalue == 2 && lastfan == 2) {lcd.print F(("  P  0 #1  2  3 "));}
  580. if (setupvalue == 3 && lastfan == 2) {lcd.print F(("  P  0 #1 >2  3 "));}
  581. if (setupvalue == 4 && lastfan == 2) {lcd.print F(("  P  0 #1  2 >3 "));}
  582.  
  583. if (setupvalue == 0 && lastfan == 3) {lcd.print F((" >P  0  1 #2  3 "));}
  584. if (setupvalue == 1 && lastfan == 3) {lcd.print F(("  P >0  1 #2  3 "));}
  585. if (setupvalue == 2 && lastfan == 3) {lcd.print F(("  P  0 >1 #2  3 "));}
  586. if (setupvalue == 3 && lastfan == 3) {lcd.print F(("  P  0  1 #2  3 "));}
  587. if (setupvalue == 4 && lastfan == 3) {lcd.print F(("  P  0  1 #2 >3 "));}
  588.  
  589. if (setupvalue == 0 && lastfan == 4) {lcd.print F((" >P  0  1  2 #3 "));}
  590. if (setupvalue == 1 && lastfan == 4) {lcd.print F(("  P >0  1  2 #3 "));}
  591. if (setupvalue == 2 && lastfan == 4) {lcd.print F(("  P  0 >1  2 #3 "));}
  592. if (setupvalue == 3 && lastfan == 4) {lcd.print F(("  P  0  1 >2 #3 "));}
  593. if (setupvalue == 4 && lastfan == 4) {lcd.print F(("  P  0  1  2 #3 "));}
  594. EEPROM.update(EEPfan, lastfan);
  595. break;                                        
  596.  
  597. case 2:
  598.  switch (b) {
  599.   case ClickEncoder::Clicked: value = (40);
  600.   break;}
  601.  lcd.home();
  602.   lcd.print("Neon:");
  603.   if (neoncntrl == 0){
  604.   if (neonv==LOW)
  605.   {
  606.     lcd.print("ON    ");}
  607. else {lcd.print ("OFF   ");}}
  608.   if (neoncntrl == 1 && lastneon == 1) {lcd.print("ON'   ");}
  609.   if (neoncntrl == 1 && lastneon == 2) {lcd.print("OFF'  ");}
  610.     if (t.hour<10)
  611.   {
  612.     lcd.print("0");
  613.   }
  614. lcd.print(t.hour, DEC);
  615.   lcd.print(":");
  616.   if (t. min<10)
  617.   {
  618.     lcd.print("0");
  619.   }
  620.   lcd.print(t.min, DEC);
  621.   lcd.setCursor (0,1);
  622.   lcd.print("LED:");
  623.   if (ledcntrl==0){
  624.   leddisp = map(LEDv, 0, 255, 0, 99);
  625.     if((allsec >= LED_UPFADEON) && (allsec <= LED_UPFADEOFF)) {if (leddisp<10){lcd.print("0");} lcd.print(leddisp); lcd.print("% ");}
  626.     if((allsec >= LED_DOWNFADEON) && (allsec <= LED_DOWNFADEOFF)) {if (leddisp<10){lcd.print("0");} lcd.print(leddisp); lcd.print("% ");}
  627.     if((allsec >= LED_DOWNFADEOFF) || (allsec <= LED_UPFADEON)) {lcd.print ("Moon");}
  628.     if((allsec > LED_UPFADEOFF)&&(allsec <LED_DOWNFADEON)) {lcd.print ("DayL");}}
  629.   else lcd.print("OWR'");
  630.   lcd.print("  ");
  631.   byte realmonth;
  632. realmonth=(t.mon);
  633.    if (realmonth==1)  {lcd.print("Jan");}
  634.    if (realmonth==2)  {lcd.print("Feb");}
  635.    if (realmonth==3)  {lcd.print("Mar");}
  636.    if (realmonth==4)  {lcd.print("Apr");}
  637.    if (realmonth==5)  {lcd.print("May");}
  638.    if (realmonth==6)  {lcd.print("Jun");}
  639.    if (realmonth==7)  {lcd.print("Jul");}
  640.    if (realmonth==8)  {lcd.print("Aug");}
  641.    if (realmonth==9)  {lcd.print("Sep");}
  642.    if (realmonth==10) {lcd.print("Oct");}
  643.    if (realmonth==11) {lcd.print("Nov");}
  644.    if (realmonth==12) {lcd.print("Dec");}
  645.   lcd.print("/");
  646.     if (t.date <10)
  647.   {
  648.     lcd.print("0");}
  649.   lcd.print(t.date, DEC);
  650. break;
  651. /*
  652.     case 40:
  653.      switch (b) {
  654.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  655.   break;
  656.   case ClickEncoder:oubleClicked: lastneon = setupvalue;
  657.   break;}
  658.   if (setupvalue>2){setupvalue=0;}
  659.   if (lastneon>2){lastneon=0;}
  660.      lcd.home();
  661.   lcd.print ("Neon State: ");
  662.   if (neoncntrl == 0){if (neonv == HIGH) lcd.print ("OFF ");}
  663.   if (neoncntrl == 0){if (neonv == LOW) lcd.print (" ON ");}
  664.   if (neoncntrl == 1) lcd.print ("OWR ");
  665.   lcd.setCursor (0,1);
  666. if (setupvalue == 0 && lastneon == 0) {lcd.print F((" #PROG  ON  OFF "));}
  667. if (setupvalue == 1 && lastneon == 0) {lcd.print F((" #PROG >ON  OFF "));}
  668. if (setupvalue == 2 && lastneon == 0) {lcd.print F((" #PROG  ON >OFF "));}
  669. if (setupvalue == 0 && lastneon == 1) {lcd.print F((" >PROG #ON  OFF "));}
  670. if (setupvalue == 1 && lastneon == 1) {lcd.print F(("  PROG #ON  OFF "));}
  671. if (setupvalue == 2 && lastneon == 1) {lcd.print F(("  PROG #ON >OFF "));}
  672. if (setupvalue == 0 && lastneon == 2) {lcd.print F((" >PROG  ON #OFF "));}
  673. if (setupvalue == 1 && lastneon == 2) {lcd.print F(("  PROG >ON #OFF "));}
  674. if (setupvalue == 2 && lastneon == 2) {lcd.print F(("  PROG  ON #OFF "));}
  675. EEPROM.update(EEPneon, lastneon);
  676. break;
  677.  
  678.  
  679.     case 41:
  680.      switch (b) {
  681.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  682.   break;
  683.   case ClickEncoder:oubleClicked: lastled = setupvalue;
  684.   break;}
  685.   if (setupvalue>4){setupvalue=0;}
  686.   if (lastled>4){lastled=0;}
  687.      lcd.home();
  688.   lcd.print ("LED Level: ");
  689.   if (ledcntrl == 0) {lcd.print ("PROG ");}
  690.   if (ledcntrl == 1) lcd.print ("OWR  ");
  691.   lcd.setCursor (0,1);
  692. if (setupvalue == 0 && lastled == 0) {lcd.print F((" #P  0  1  2  3 "));}
  693. if (setupvalue == 1 && lastled == 0) {lcd.print F((" #P >0  1  2  3 "));}
  694. if (setupvalue == 2 && lastled == 0) {lcd.print F((" #P  0 >1  2  3 "));}
  695. if (setupvalue == 3 && lastled == 0) {lcd.print F((" #P  0  1 >2  3 "));}
  696. if (setupvalue == 4 && lastled == 0) {lcd.print F((" #P  0  1  2 >3 "));}
  697.  
  698. if (setupvalue == 0 && lastled == 1) {lcd.print F((" >P #0  1  2  3 "));}
  699. if (setupvalue == 1 && lastled == 1) {lcd.print F(("  P #0  1  2  3 "));}
  700. if (setupvalue == 2 && lastled == 1) {lcd.print F(("  P #0 >1  2  3 "));}
  701. if (setupvalue == 3 && lastled == 1) {lcd.print F(("  P #0  1 >2  3 "));}
  702. if (setupvalue == 4 && lastled == 1) {lcd.print F(("  P #0  1  2 >3 "));}
  703.  
  704. if (setupvalue == 0 && lastled == 2) {lcd.print F((" >P  0 #1  2  3 "));}
  705. if (setupvalue == 1 && lastled == 2) {lcd.print F(("  P >0 #1  2  3 "));}
  706. if (setupvalue == 2 && lastled == 2) {lcd.print F(("  P  0 #1  2  3 "));}
  707. if (setupvalue == 3 && lastled == 2) {lcd.print F(("  P  0 #1 >2  3 "));}
  708. if (setupvalue == 4 && lastled == 2) {lcd.print F(("  P  0 #1  2 >3 "));}
  709.  
  710. if (setupvalue == 0 && lastled == 3) {lcd.print F((" >P  0  1 #2  3 "));}
  711. if (setupvalue == 1 && lastled == 3) {lcd.print F(("  P >0  1 #2  3 "));}
  712. if (setupvalue == 2 && lastled == 3) {lcd.print F(("  P  0 >1 #2  3 "));}
  713. if (setupvalue == 3 && lastled == 3) {lcd.print F(("  P  0  1 #2  3 "));}
  714. if (setupvalue == 4 && lastled == 3) {lcd.print F(("  P  0  1 #2 >3 "));}
  715.  
  716. if (setupvalue == 0 && lastled == 4) {lcd.print F((" >P  0  1  2 #3 "));}
  717. if (setupvalue == 1 && lastled == 4) {lcd.print F(("  P >0  1  2 #3 "));}
  718. if (setupvalue == 2 && lastled == 4) {lcd.print F(("  P  0 >1  2 #3 "));}
  719. if (setupvalue == 3 && lastled == 4) {lcd.print F(("  P  0  1 >2 #3 "));}
  720. if (setupvalue == 4 && lastled == 4) {lcd.print F(("  P  0  1  2 #3 "));}
  721. EEPROM.update(EEPled, lastled);
  722. break; */
  723.  
  724. case 3:
  725.  switch (b) {
  726.   case ClickEncoder::Clicked: value = (50);
  727.   break;}
  728.   lcd.home();
  729.   lcd.print ("CO");
  730.     lcd.write(byte(0));
  731.   lcd.print (" Solenoid:");
  732.   if (co2cntrl == 0){if (co2v == HIGH) lcd.print ("OFF");}
  733.   if (co2cntrl == 0){if (co2v == LOW) lcd.print (" ON");}
  734.   if (co2cntrl == 1) lcd.print ("OWR");
  735.     lcd.setCursor (0,1);
  736.     if (plnt0cntrl==1) {lcd.print ("'");} else {lcd.print(" ");}
  737.   lcd.print ("Misc. Options ");
  738.     if (plnt1cntrl==1) {lcd.print ("'");} else {lcd.print(" ");}
  739.   break;
  740.  
  741.     case 50:
  742.      switch (b) {
  743.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  744.   break;
  745.   case ClickEncoder::DoubleClicked: lastco2 = setupvalue;
  746.   break;}
  747.   if (setupvalue>2){setupvalue=0;}
  748.   if (lastco2>2){lastco2=0;}
  749.      lcd.home();
  750.   lcd.print ("CO");
  751.     lcd.write(byte(0));
  752.   lcd.print (" Solenoid:");
  753.   if (co2cntrl == 0){if (co2v == HIGH) lcd.print ("OFF");}
  754.   if (co2cntrl == 0){if (co2v == LOW) lcd.print (" ON");}
  755.   if (co2cntrl == 1) lcd.print ("OWR");
  756.   lcd.setCursor (0,1);
  757. if (setupvalue == 0 && lastco2 == 0) {lcd.print F((" #PROG  ON  OFF ")); (co2cntrl =0);}
  758. if (setupvalue == 1 && lastco2 == 0) {lcd.print F((" #PROG >ON  OFF ")); (co2cntrl =0);}
  759. if (setupvalue == 2 && lastco2 == 0) {lcd.print F((" #PROG  ON >OFF ")); (co2cntrl =0);}
  760. if (setupvalue == 0 && lastco2 == 1) {lcd.print F((" >PROG #ON  OFF ")); (co2cntrl =1);}
  761. if (setupvalue == 1 && lastco2 == 1) {lcd.print F(("  PROG #ON  OFF ")); (co2cntrl =1);}
  762. if (setupvalue == 2 && lastco2 == 1) {lcd.print F(("  PROG #ON >OFF ")); (co2cntrl =1);}
  763. if (setupvalue == 0 && lastco2 == 2) {lcd.print F((" >PROG  ON #OFF ")); (co2cntrl =1);}
  764. if (setupvalue == 1 && lastco2 == 2) {lcd.print F(("  PROG >ON #OFF ")); (co2cntrl =1);}
  765. if (setupvalue == 2 && lastco2 == 2) {lcd.print F(("  PROG  ON #OFF ")); (co2cntrl =1);}
  766. EEPROM.update(EEPco2, lastco2);
  767. break;
  768. /*
  769. case 51:
  770.      switch (b) {
  771.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  772.   break;
  773.   case ClickEncoder:oubleClicked: lastplnt0 = setupvalue;
  774.   break;}
  775.   if (setupvalue>2){setupvalue=0;}
  776.   if (lastplnt0>2){lastplnt0=0;}
  777.      lcd.home();
  778.   lcd.print (" TF Macro: ");
  779.   if (plnt0cntrl == 0){if (plnt0v == LOW) lcd.print ("OFF  ");}
  780.   if (plnt0cntrl == 0){if (plnt0v == HIGH) lcd.print ("ON   ");}
  781.   if (plnt0cntrl == 1) lcd.print ("OWR  ");
  782.   lcd.setCursor (0,1);
  783. if (setupvalue == 0 && lastplnt0 == 0) {lcd.print F((" #PROG  1x  OFF "));}
  784. if (setupvalue == 1 && lastplnt0 == 0) {lcd.print F((" #PROG >1x  OFF "));}
  785. if (setupvalue == 2 && lastplnt0 == 0) {lcd.print F((" #PROG  1x >OFF "));}
  786. if (setupvalue == 1 && lastplnt0 == 1) {lcd.print F(("  PROG #1x  OFF ")); previousMillisplnt0 = millis(); setupvalue=0; lastplnt0 =0;}
  787. if (setupvalue == 0 && lastplnt0 == 2) {lcd.print F((" >PROG  1x #OFF "));}
  788. if (setupvalue == 1 && lastplnt0 == 2) {lcd.print F(("  PROG >1x #OFF "));}
  789. if (setupvalue == 2 && lastplnt0 == 2) {lcd.print F(("  PROG  1x #OFF "));}
  790. EEPROM.update(EEPplnt0, lastplnt0);
  791. break;
  792.  
  793. case 52:
  794.      switch (b) {
  795.   case ClickEncoder::Clicked: setupvalue = (setupvalue+1);
  796.   break;
  797.   case ClickEncoder:oubleClicked: lastplnt1 = setupvalue;
  798.   break;}
  799.   if (setupvalue>2){setupvalue=0;}
  800.   if (lastplnt1>2){lastplnt1=0;}
  801.      lcd.home();
  802.   lcd.print (" EasyCarbo: ");
  803.   if (plnt1cntrl == 0){if (plnt1v == LOW) lcd.print ("OFF ");}
  804.   if (plnt1cntrl == 0){if (plnt1v == HIGH) lcd.print ("ON  ");}
  805.   if (plnt1cntrl == 1) lcd.print ("OWR ");
  806.   lcd.setCursor (0,1);
  807. if (setupvalue == 0 && lastplnt1 == 0) {lcd.print F((" #PROG  1x  OFF "));}
  808. if (setupvalue == 1 && lastplnt1 == 0) {lcd.print F((" #PROG >1x  OFF "));}
  809. if (setupvalue == 2 && lastplnt1 == 0) {lcd.print F((" #PROG  1x >OFF "));}
  810. if (setupvalue == 1 && lastplnt1 == 1) {lcd.print F(("  PROG #1x  OFF ")); previousMillisplnt1 = millis(); setupvalue=0; lastplnt1 =0;}
  811. if (setupvalue == 0 && lastplnt1 == 2) {lcd.print F((" >PROG  1x #OFF "));}
  812. if (setupvalue == 1 && lastplnt1 == 2) {lcd.print F(("  PROG >1x #OFF "));}
  813. if (setupvalue == 2 && lastplnt1 == 2) {lcd.print F(("  PROG  1x #OFF "));}
  814. EEPROM.update(EEPplnt1, lastplnt1);
  815. break; */
  816.  
  817. case 4:
  818.  switch (b) {
  819.   case ClickEncoder::Clicked: value = (60);
  820.   break;
  821.   case ClickEncoder::DoubleClicked: value = (70);
  822.   break;}
  823.   lcd.home();
  824.   lcd.print ("  Informations  ");
  825.   lcd.setCursor(0,1);
  826.   lcd.print ("                ");
  827. break;
  828. /*
  829. case 60:
  830. lcd.home();
  831. lcd.print(" System Uptime: ");
  832. lcd.setCursor(0,1);
  833.  if (uptimedays<10) {lcd.print("0");}
  834.  lcd.print(uptimedays);
  835.  lcd.print("days, ");
  836.  if (uptimehours<10) {lcd.print("0");}
  837.  lcd.print(uptimehours);
  838.  lcd.print(":");
  839.  if (uptimemins<10) {lcd.print("0");}
  840.  lcd.print(uptimemins);
  841.  lcd.print(":");
  842.  if (uptimesecs<10) {lcd.print("0");}
  843.  lcd.print(uptimesecs);
  844. break;
  845.  
  846. case 61:
  847. lcd.home();
  848.   lcd.print("  Free Memory:  ");
  849.   lcd.setCursor(0,1);
  850.   lcd.print("      ");
  851.   lcd.print(freeMemory());
  852.     lcd.print("kB     ");
  853.   break; */
  854.  
  855. case 70:
  856. /* Wire.endTransmission();
  857. Wire.begin();
  858. delay(50);
  859.   rtc.begin();
  860.   delay(500);
  861. lcd.begin (16,2);
  862. lcd.createChar(0, small2);
  863. lcd.setBacklightPin(3,POSITIVE);
  864. lcd.setBacklight(HIGH);
  865. delay(100); */
  866. break;
  867.  
  868. /*  case 3:
  869.   lcd.home();
  870.   lcd.print (F("  Osram 6500K   "));
  871.   lcd.setCursor (0,1);
  872.   lcd.print (F("Op.hrs:"));
  873.   if (neon1oh<10) {lcd.print("      ");}
  874.   if ((neon1oh<100) && (neon1oh>9)) {lcd.print("     ");}
  875.   if ((neon1oh<1000) && (neon1oh>99)) {lcd.print("    ");}
  876.   if ((neon1oh<10000) && (neon1oh>999)) {lcd.print("   ");}
  877.   if ((neon1oh<100000) && (neon1oh>9999)) {lcd.print("  ");}
  878.   if ((neon1oh<1000000) && (neon1oh>99999)) {lcd.print(" ");}
  879.   lcd.print(neon1oh,1);
  880.   lcd.print("h");
  881.   break;
  882.  
  883.     case 4:
  884.   lcd.home();
  885.   lcd.print ("  Grolux 3000K  ");
  886.   lcd.setCursor (0,1);
  887.   lcd.print (F("Op.hrs:"));
  888.   neon2oh=EEPROM.readFloat(eepneon2);
  889.   if (neon2oh<10) {lcd.print("      ");}
  890.   if ((neon2oh<100) && (neon2oh>9)) {lcd.print("     ");}
  891.   if ((neon2oh<1000) && (neon2oh>99)) {lcd.print("    ");}
  892.   if ((neon2oh<10000) && (neon2oh>999)) {lcd.print("   ");}
  893.   if ((neon2oh<100000) && (neon2oh>9999)) {lcd.print("  ");}
  894.   if ((neon2oh<1000000) && (neon2oh>99999)) {lcd.print(" ");}
  895.   lcd.print(neon2oh,1);
  896.   lcd.print("h");
  897.   break; */
  898.  
  899.  
  900.  
  901. case 100:
  902.   lcd.home ();
  903.  lcd.print("    Pump OFF    ");
  904. lcd.setCursor(0,1);
  905. lcd. print ("   ");
  906. lcd. print (offpump);
  907. lcd. print (" minutes    ");
  908. feedcount=1; displayowr=0;
  909.  if((millis() - previousMillispump) >= intervalpump) {(value=0);}
  910.  
  911. break;
  912. }
  913.  
  914. if ((millis() - previousMilliswifi2 >= intervalwifi2)) { previousMilliswifi2 =millis();
  915.  cmd = "AT+CIPSTART=\"TCP\",\"";
  916.   cmd += IP;
  917.   cmd += "\",80";
  918.   esp8266Module.println(cmd);
  919.   delay(5000);
  920.   if(esp8266Module.find("Error")){
  921.   Serial.println("ERROR while SENDING");}
  922.   cmd = GET + "&field1=" + steinhart + "\r\n";
  923.   esp8266Module.print("AT+CIPSEND=");
  924.   esp8266Module.println(cmd.length());
  925.   delay(15000);
  926.   if(esp8266Module.find(">"))
  927.   { esp8266Module.print(cmd);
  928. Serial.println("Data sent");}
  929.  else
  930.   {esp8266Module.println("AT+CIPCLOSE"); Serial.println("Connection closed");    }  
  931.   }
  932. /*Serial.print (F("Water level: "));
  933.     if (wlsv==LOW) Serial.println(F("LOW"));
  934.     if  (wlsv==HIGH)Serial.println(F("NORMAL"));
  935. Serial.print(F("Temperature "));
  936.     Serial.print(steinhart);
  937.     Serial.println(F(" *C"));
  938.     Serial.println(average1);
  939. Serial.print(F("HEATER: "));
  940. if(heaterv==HIGH) {Serial.println(F("OFF"));}
  941. if(heaterv==LOW) {Serial.println(F("ON"));}
  942. Serial.print(F("FAN: "));
  943. if(fan==LOW) {Serial.println(F("OFF"));}
  944. else {Serial.println(F("ON"));}
  945. Serial.print(F("PUMP: "));
  946. if(pumpv==HIGH) {Serial.println(F("ON"));}
  947. if(pumpv==LOW) {Serial.println(F("OFF"));}
  948. Serial.print(t.date, DEC);
  949.     Serial.print("/");
  950.     Serial.print(rtc.getMonthStr());
  951.     Serial.print("/");
  952.     Serial.print(t.year, DEC);
  953.     Serial.print(" - ");
  954.     Serial.print(t.hour, DEC);
  955.     Serial.print(":");
  956.     Serial.print(t.min, DEC);
  957.     Serial.print(":");
  958.     Serial.println(t.sec, DEC);
  959. Serial.print (F("Allsec: "));
  960. Serial.println(allsec);
  961. Serial.println(neon1oh);
  962. Serial.println(neon2oh);
  963. Serial.println(value);
  964.  
  965. Serial.print(F("NEON: "));
  966. if(neonv==HIGH) {Serial.println(F("OFF"));}
  967. if(neonv==LOW) {Serial.println(F("ON"));}
  968. Serial.print(F("LED: "));
  969. if(LED==MoonPWMValue) {Serial.println(F("MOON"));}
  970. if(LED==DayLightPWMValue) {Serial.println(F("DAYLIGHT"));}
  971. if((LED != MoonPWMValue) || (LED != DayLightPWMValue)) {Serial.println(F("FADE"));}
  972. Serial.println(previousMillispump);
  973. Serial.println(lastwls); */
  974.      
  975.    
  976.   }
(#) kapu48 válasza game4812 hozzászólására (») Jún 8, 2017 /
 
A SoftwareSerial esp8266Module(4, 5); időzítése, mint a neve is mutatja, szoftveresen történik!
Ezért ha közbe beugranak megszakítások? Akkor szét rúgják az időzítést!

Esetedben pl. a következő sorok okozhatják a SoftwareSerial bugját:
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr); last = -1;
A hozzászólás módosítva: Jún 8, 2017
(#) atus1981 hozzászólása Jún 8, 2017 /
 
Sziasztok!
Egy 3,5"-os kijelző szín definiálásával küzdök. Nagy nehezen "szóra" tudtam bírni, hogy valamit mutasson, de a színek nem stimmelnek a kód elején leírtakkal.
ILI9481 vezérlő van rajta és 8 bit felirat a csomagolásán, az alábbi kódot használom:
  1. #define WHITE   0x0000
  2. #define GREEN    0x001F
  3. #define CYAN     0xF800
  4. #define BLUE  0x07E0
  5. #define RED    0x07FF
  6. #define MAGENTA 0xF81F
  7. #define YELLOW  0xFFE0
  8. #define BLACK   0xFFFF


A fehéren és a feketén kívül semmi sem az, aminek lennie kéne.
Kérném valaki hozzáértő segítségét a probléma megoldásában.
Köszönöm!
(#) kapu48 válasza atus1981 hozzászólására (») Jún 8, 2017 /
 
Ezen a vezérlőn többféle szín kiosztást be lehet állítani!
Bővebben: Link
28. oldaltól.
Ha kideríted, hogy mit állítót be a programod?
Akkor már tudni fogod számolni a szín bitek értelmét is.
A hozzászólás módosítva: Jún 8, 2017
(#) atus1981 válasza kapu48 hozzászólására (») Jún 8, 2017 /
 
Huhh, ez nekem magas :/
  1. #include <Adafruit_GFX.h>    
  2. #include <Adafruit_TFTLCD.h>
  3.  
  4. #define LCD_CS A3
  5. #define LCD_CD A2
  6. #define LCD_WR A1
  7. #define LCD_RD A0
  8. #define LCD_RESET A4
  9.  
  10. #define BLACK   0x0000
  11. #define BLUE    0x001F
  12. #define RED     0xF800
  13. #define GREEN   0x07E0
  14. #define CYAN    0x07FF
  15. #define MAGENTA 0xF81F
  16. #define YELLOW  0xFFE0
  17. #define WHITE   0xFFFF
  18.  
  19. Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
  20.  
  21. void setup() {
  22.  
  23.   tft.reset();
  24.   tft.begin(0x9341);
  25.   tft.setRotation(1);
  26.   tft.fillScreen(RED);
  27.   tft.fillScreen(GREEN);
  28.   tft.fillScreen(BLUE);
  29.   tft.fillScreen(BLACK);
  30.   delay(1000);
  31.   tft.setCursor(80,100);
  32.   tft.setTextColor(WHITE);
  33.   tft.setTextSize(4);
  34.   tft.print("Hello");
  35.  
  36.   tft.setCursor(220,100);
  37.   tft.setTextColor(RED);
  38.   tft.setTextSize(4);
  39.   tft.print("YouTUBE!");
  40.  
  41.   tft.fillRect(80,200, 321, 60, RED);
  42.  
  43.   tft.setCursor(135,215);
  44.   tft.setTextColor(WHITE);
  45.   tft.setTextSize(4);
  46.   tft.print("Subscribe");
  47.  
  48.   tft.drawRect(0,0,480,320,WHITE);
  49.   delay(1000);
  50. }
  51.  
  52. void loop()
  53. {
  54.   tft.fillRect(80,200,321,60,BLACK);
  55.   delay(1000);
  56.   tft.fillRect(80,200,321,60,RED);
  57.   tft.setCursor(135,215);
  58.   tft.setTextColor(WHITE);
  59.   tft.setTextSize(4);
  60.   tft.print("Subscribe");
  61.   delay(1000);
  62. }

Így tudtam életet csiholni bele, 9341-esként kezeli.
(#) game4812 válasza kapu48 hozzászólására (») Jún 8, 2017 /
 
Volt egy kis időm újra foglalkozni vele, a fenti 2 sort ki-be kapcsolva nincs változás, ha viszont az LCD "case"-ekből kicsillagozok annyi oldalt, hogy a MemoryFree 250 byte szabad memóriát jelezzen az LCD-n, akkor küldte az adatokat a netre, tehát a softserial működött, de a Serial Monitorra semmit. Megtekergettem az enkódert, ami az interruptot használja, utána is küldte rendesen. Amikor a MemoryFree 192-t írt, már nem küldte.
A dolog softwareserial része, és így az interruptos esetleges probléma nem annyira fontos, mert a hardveres RX-TX-re tenném az ESP-t, de úgy nem akar menni, pedig azzal a kóddal 600 bájtot jelez, az biztosan elég.
Így írtam át a kódot, ebből:
  1. esp8266Module.println("AT+RST");    delay(100);
  2.     if (esp8266Module.find("OK"))
  3.     {Serial.println("Found OK");
  4.      Serial.println("Changing espmode");}
  5.      esp8266Module.flush();
  6.  esp8266Module.println(F("AT+CWMODE=1"));
  7.     if (esp8266Module.find("OK"))
  8.     {Serial.println("Mode changed");}
  9.     else if(esp8266Module.find("NO CHANGE")){
  10.     Serial.println("Already in mode 1");}     delay(100);
  11.      esp8266Module.flush();
  12.  esp8266Module.println(cmd); delay(20000);
  13.  if (esp8266Module.find("OK"))
  14.  { Serial.println("Connected to Access Point");}
  15.   else
  16.   {Serial.println("Could not connect to Access Point");}


Ez lett:
  1. Serial.println("AT+RST");    delay(100);
  2. Serial.flush();
  3. Serial.println(F("AT+CWMODE=1"));     delay(100);
  4. Serial.flush();
  5. Serial.println(cmd); delay(20000);


Rx-Tx-hez, Tx-Rx-hez van kötve, de megcserélve sem jó, az usb melletti LED-ek sem villognak, tudtommal azoknak is kellene, ha van adatforgalom. Valamiért nem indul a HardwareSerial-om? Ez mitől lehet?
A hozzászólás módosítva: Jún 8, 2017
(#) kapu48 válasza game4812 hozzászólására (») Jún 8, 2017 /
 
Javaslom, hogy mindig használd az F kapcsolót!

Ilyen hosszú stringeknél:
Serial.println("Could not connect to Access Point"); Így betölti a memóriába, lefoglalva sok helyet.
Serial.println(F("Could not connect to Access Point")); Így a Flashból olvassa a stringet.
És marad rengeteg memóriád szabadon.

Ha kinőtted a procit? Akkor nagyobbra kel váltani!
A hozzászólás módosítva: Jún 8, 2017
(#) game4812 válasza kapu48 hozzászólására (») Jún 8, 2017 /
 
Szia! Köszönöm, szoktam használni, láthatod például az 560. sor környékén az eredeti hozzászólásban, a hosszú programban. Ezeknél azért nem, mert, mint említettem az előző kommentemben, csak debug célból volt hozzákötve USB-vel a számítógéphez, a HW serialt használnám az ESPhez, tehát a végső programban ezek a "Could not connect to Access Point" sorok nem lesznek benne. Kikommentált LCD case-k esetén 76% Program Storage és 60% Dynamic Memory van felhasználva, tehát a hibát nem lehet "kinőtt proci"-ra fogni. Ha sikerül fixen működésre bírni, akkor át fogom írni a programot, hogy legyen elég hely, digitalRead, stb helyett közvetlenül a portokat fogom manipulálni, a librarykat is leegyszerűsítem, a hosszabb szövegek pedig mennek az EEPROM-ba.

Itt van egy Mega a fiókban, de abból akksitöltő lesz, amúgy sem tudom az Uno helyére betenni, át kellene építeni a dobozt.
(#) Kovidivi válasza game4812 hozzászólására (») Jún 8, 2017 /
 
Attól, hogy kiírja az Arduino, hogy van még szabad hely, nem jelenti azt, hogy futás közben nem fogy el a RAM-od. Elég csak néhány nagyobb tömb, amik folyamatosan a memóriában vannak, meg ilyen kiírások, mint amiket használsz, és máris betelik a RAM. Utána meg jönnek azok a hibák, amikre nincs magyarázat, furcsaságok, előidézhetetlen, beazonosíthatatlan programleállások. Még ha felraksz egy lib-et, ami kiírja, hogy mennyi a szabad RAM-od, az sem a valóságot fogja mutatni, hanem csak az aktuálisat, amikor fut a fv. Lehet, hogy amikor pedig elindul az LCD fv-ed, a RAM csurig telik, mikor lefutott, kiüríti a RAM-ot (sok helyi változó miatt felszabadul sok hely), és azt látja a RAM számoló fv, hogy 30% van használva.
(#) game4812 válasza Kovidivi hozzászólására (») Jún 8, 2017 /
 
Igen értem ezt, nem is problémázok rajta, ha megy a Softwareserial, és a Hardwareserial is, hagynom kell 250 byte helyet. (bár a soros porton ilyenkor nem küld jelet, de az internetre igen).
Viszont ha kikapcsolom a Softwareserialt, és átírom a kódot úgy, hogy a Hardwareserialt használja, az eredeti hardveres parancsokat pedig törlöm, akkor van 650 byteom, mégsem csinál semmit, tehát valószínűleg ilyenkor sem küld az Rx-Tx lábán az arduino adatot, ugyanúgy, mint az előző esetben.
Egy egyszerű, példa kódban küld, tehát nem hardveres a probléma. Ennek érdekelne a megoldása, mert szívesebben kötném az ESP-t a dedikált Rx-Tx-re. De ha nem találjuk meg, akkor marad a működő Softwareserial, és a Hardwareserialt nem indítom el rajta.
Következő: »»   352 / 847
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem