Путем писания пятой точкой, сообразил такую версию кода: Код (Text): #include <Wire.h> // Common library #include "DHT.h" // DHT11 & DHT22 Library #include "af_BMP085.h" // Simple library for BMP085 #include <EtherCard.h> // ENC28J60 Library #include <LiquidCrystal_I2C.h> // Display with PFC8574 // BMP085: SDA->A4 / SCL->A5 // DHT11: DATA->A0 // DHT22: DATA->A1 // JACK: DATA->D4 // DISPLAY-I2C: SDA->A4 SCL->A5 BACKLIGHT->D5 // ENC28J60: SCK->D13 MOSI->D12 MISO->D11 INT->D2 RST->RST CS->D10 // ISP: SCK->D13 MOSI->D12 MISO->D11 RST->RST // DIODE GREEN: + -> D8 // DIODE ORANGE: + -> D7 // BUZZER: SIGNAL -> D9 // ANEMOMETER -> D3 (INT1) // Setting vars //#define BACKLIGHT_PIN 5 // Display backlight with npn-transistor #define DHT_S1_PIN A1 // DHT22 / AM2302 #define DHT_S2_PIN A0 // DHT11 //#define D_ORANGE_PIN 7 // Diode orange //#define D_GREEN_PIN 8 // Diode green //#define BUZZER_PIN 9 // Buzzer //#define WIND_PIN 3 // Anemometer //uint8_t wind[8] = {B11000,B00011,B00100,B11000,B00011,B00100,B11000}; //ветер uint8_t home[8] = {B00100,B01010,B11111,B10001,B10101,B10001,B11111}; //домик uint8_t sun[8] = {B00100,B10101,B01110,B11011,B01110,B10101,B00100}; //солнышко uint8_t mmhg[8] = {B01110,B01110,B01110,B01110,B11111,B01110,B00100}; //давление uint8_t temp_w_cel[8] = {B00011,B00011,B01100,B10010,B10000,B10010,B01100}; //ц с градусом uint8_t hum[8] = {B00000,B00100,B01010,B01010,B10001,B11111,B01110}; //влажность short int humidity = 0, temp_dht = 0, humidity2 = 0, temp_dht2 = 0, temp = 0;//temp_bmp = 0, static uint8_t mymac[6] = { ххх }; LiquidCrystal_I2C lcd(0x20,4,5,6,0,1,2,3,7, POSITIVE); const char website[12] = "narodmon.ru"; static byte hisip[] = { 94, 19, 113, 221 }; static byte dnsip[] = {8, 8, 8, 8}; int32_t pressure_pa = 0, pressure_mm = 0; volatile byte half_revolutions = 0; byte Ethernet::buffer[500]; float tavgwspeed = 0; float avgwspeed = 0; //unsigned int avgrpm=0; float wspeed=0; short int taws = 0; Adafruit_BMP085 bmp; dht dht_s1, dht_s2; Stash stash; unsigned long DisplayTime; unsigned long lDisplayTime; unsigned long NMTime; unsigned long lNMTime; unsigned long AnemoTime; unsigned long lAnemoTime; unsigned long ResetTime; unsigned long lResetTime; void(* resetFunc) (void) = 0; void setup() { // LCD pinMode(5, INPUT); // set pin to input digitalWrite(5, HIGH); // turn on pullup resistors lcd.home(); lcd.begin(24,2); // lcd.createChar(0, wind); lcd.createChar(1, home); lcd.createChar(2, sun); lcd.createChar(3, mmhg); lcd.createChar(4, temp_w_cel); lcd.createChar(5, hum); lcd.setCursor(0,0); lcd.print("[Online Meteostation v3]"); delay(3000); lcd.clear(); // ETHERNET if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0) { lcd.setCursor(0,0); lcd.print("ETH ERR"); } else { lcd.setCursor(0,0); lcd.print("ETH OK"); } if (!ether.dhcpSetup()) { lcd.setCursor(8,0); lcd.print("DHCP ERR"); } else { lcd.setCursor(8,0); lcd.print("DHCP OK"); } ether.copyIp(ether.dnsip, dnsip); ether.copyIp(ether.hisip, hisip); /* if (!ether.dnsLookup(website)){ lcd.setCursor(17,0); lcd.print("DNS ERR"); } else { lcd.setCursor(17,0); lcd.print("DNS OK"); }*/ while (ether.clientWaitingGw()) { ether.packetLoop(ether.packetReceive()); lcd.setCursor(0,1); lcd.print("GW OK"); } delay(4000); lcd.clear(); // BMP085 bmp.begin(); // Narodmon.ru Update nm_upd(); // Display Update DisplayTotal(); // 600000 - 10 min // 60000 - min // 1000 - sec // 100 - millisec // 10 - microsec // 1 sec = 1000ms = 1000000uS attachInterrupt(1, rpm_fun, FALLING); DisplayTime = millis(); // считываем время, прошедшее с момента запуска программы NMTime = millis(); AnemoTime = millis(); ResetTime = millis(); lDisplayTime = DisplayTime; lNMTime = NMTime; lAnemoTime = AnemoTime; lResetTime = ResetTime; } void loop() { DisplayTime = millis(); // считываем время, прошедшее с момента запуска программы if(DisplayTime >= (lDisplayTime + 60000)){ // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд DisplayTotal(); // включаем/выключаем LED lDisplayTime = DisplayTime; // в loopTime записываем новое значение } NMTime = millis(); // считываем время, прошедшее с момента запуска программы if(NMTime >= (lNMTime + 300000)){ // сравниваем текущий таймер с переменной lDisplayTime + 300 секунд nm_upd(); // включаем/выключаем LED lNMTime = NMTime; // в loopTime записываем новое значение } AnemoTime = millis(); // считываем время, прошедшее с момента запуска программы if(AnemoTime >= (lAnemoTime + 60000)){ // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд anemometer(); // включаем/выключаем LED lAnemoTime = AnemoTime; // в loopTime записываем новое значение } ResetTime = millis(); // считываем время, прошедшее с момента запуска программы if(ResetTime >= (lResetTime + 86400000)){ // сравниваем текущий таймер с переменной lDisplayTime + 60 секунд resetFunc(); lResetTime = ResetTime; // в loopTime записываем новое значение } // Ethernet ping answer ether.packetLoop(ether.packetReceive()); } // Narodmon.ru Update void nm_upd(){ lcd.clear(); lcd.setCursor(0,0); lcd.print("Now updating narodmon.ru"); MS_BMP085(); MS_DHT11(); // MS_DHT22(); byte sd = stash.create(); stash.println("ID=ххх"); stash.println("&ххх="); stash.println(temp_dht); stash.println("&ххх="); stash.println(humidity); stash.println("&ххх="); stash.println(pressure_mm); stash.save(); Stash::prepare(PSTR("POST http://narodmon.ru/post.php HTTP/1.0" "\r\n" "Host: narodmon.ru" "\r\n" "Content-Length: $D" "\r\n" "\r\n" "$H"), stash.size(), sd); ether.tcpSend(); stash.cleanup(); delay(3000); lcd.clear(); DisplayTotal(); } // Main display view void DisplayTotal() { MS_SensUpdate(); lcd.clear(); lcd.setCursor(0,0); lcd.write(byte(2));//sun lcd.setCursor(3,0); lcd.write(byte(3));//mmhg lcd.print(pressure_mm); lcd.setCursor(9,0); lcd.write(byte(5));//hum if ( humidity == 0 ) { lcd.print(" "); } lcd.print(humidity); if (temp_dht == 0) { lcd.print(" "); } else if (temp_dht <= 9) { lcd.print(" +"); } else if (temp_dht >= 10) { lcd.print(" +"); }; lcd.print(temp_dht); lcd.write(byte(4));//cel lcd.print(" "); lcd.setCursor(20,0); // lcd.write(byte(0));//wind lcd.print("W"); lcd.print(wspeed); lcd.setCursor(0,1); lcd.write(byte(1));//home lcd.print(" "); lcd.write(byte(3));//mmhg lcd.print(pressure_mm); lcd.print(" "); lcd.write(byte(5));//hum lcd.print(humidity2); if ( temp_dht2 >= 1 ) { lcd.print(" +"); } else if (temp_dht2 == 0) { lcd.print(" "); } else if (temp_dht2 >= 10) { lcd.print(" +"); }; lcd.print(temp_dht2); lcd.write(byte(4));//cel lcd.setCursor(20,1); lcd.print("W"); // lcd.write(byte(0));//wind lcd.print(avgwspeed); /* [S][ ][-][>][ ][p][7][4][5][ ][ ][h][6][0][ ][+][2][5][c*][ ][ ][ w][2][6] [H][ ][-][>][ ][p][7][4][5][ ][ ][h][4][5][ ][+][2][3][c*][ ][+][2][3][c*] Total: 24x02 */ } // Sensors // Update all sensors one time void MS_SensUpdate() { MS_BMP085(); MS_DHT22(); MS_DHT11(); } // Update only BMP085 void MS_BMP085() { // temp_bmp = bmp.readTemperature(); pressure_pa = bmp.readPressure(); pressure_mm = pressure_pa/133.3; } // Update only DHT22 void MS_DHT22() { if (dht_s1.read22(DHT_S1_PIN) == DHTLIB_OK) { humidity = dht_s1.humidity; temp_dht = dht_s1.temperature; temp = temp_dht; } else { temp = temp_dht; } } // Update only DHT11 void MS_DHT11() { if (dht_s2.read11(DHT_S2_PIN) == DHTLIB_OK) { humidity2 = dht_s2.humidity; temp_dht2 = dht_s2.temperature; temp = temp_dht2; } else { temp = temp_dht2; } } void rpm_fun() { half_revolutions++; } void anemometer(){ wspeed = half_revolutions * 0.60288; // метров в минуту wspeed = wspeed / 60; // метров в секунду if (taws == 10){ avgwspeed = tavgwspeed / 10; // средняя скорость tavgwspeed = 0; taws = 0; } else if (taws <= 9) { tavgwspeed = tavgwspeed + wspeed; // накапливание taws++; } else if (taws >= 11) { taws = 0; } half_revolutions = 0; } Оно все работает, при условии, что подключен USBasp и он (USBasp) воткнут в усб компьютера. При отсутствии программатора происходит следующее: Запуск - Езернет инит - отправка данных на народмон - вывод на дисплей - всё, тут всё виснет. Т.е. отображаются данные на момент вывода и не происходит более ни отправки ни обновления на дисплее. Что делать, чтобы не зависало без программатора?
Добавлю. Если убрать код анемометра целиком (прерывания и обсчет и вывод) - не зависает. В чем ошибка?