День добрый. Установил новый IDE и в него старые дополнения от старого экземпляра добавил. Диск у меня слетал и я систему поставил на SSD а тот остался. И на нём вся старая инфа. Взял готовый скетч Код (C++): #include <OneWire.h> #include <EtherCard.h> // настройки Ethernet #define BUF_SIZE 512 byte mac[] = { 0x00, 0x04, 0xA3, 0x21, 0xCA, 0x38 }; // MAC-адрес byte fixed = false; // =false: пробовать получить адрес по DHCP, // в случае неудачи использовать статический; // =true: сразу использовать статический uint8_t ip[] = { 169, 254, 8, 200 }; // Статический IP-адрес uint8_t subnet[] = { 255, 255, 0, 0 }; // Маска подсети uint8_t gateway[] = { 192, 168, 1, 20 }; // Адрес шлюза uint8_t dns[] = { 192, 168, 1, 20 }; // Адрес DNS-сервера (необязателен) byte Ethernet::buffer[BUF_SIZE]; static BufferFiller bfill; // used as cursor while filling the buffer // настройки OneWire #define DS18B20PIN 9 OneWire ds(DS18B20PIN); // команды DS18B20 void setConversionTime(byte conf) { ds.reset(); ds.skip(); // skip ROM ds.write(0x4E); // write scratchpad ds.write(0); // Th ds.write(0); // Tl ds.write(conf); // configuration } void startConversionAll() { ds.reset(); ds.skip(); // skip ROM ds.write(0x44,0); // start conversion delay(10); } void setup(void) { Serial.begin(57600); delay(2000); /* Проверяем, что контроллер Ethernet доступен для работы */ Serial.println("Initialising the Ethernet controller"); if (ether.begin(sizeof Ethernet::buffer, mac, 10) == 0) { Serial.println( "Ethernet controller NOT initialised"); while (true); } // Пытаемся получить адрес динамически Serial.println("Attempting to get an IP address using DHCP"); if (ether.dhcpSetup()) { ether.printIp("Got an IP address using DHCP: ", ether.myip); } else { // Если DHCP не доступен, используем статический ip-адрес ether.staticSetup(ip, gateway, dns); ether.printIp("DHCP FAILED, using fixed address: ", ether.myip); fixed = true; } } char okHeader[] PROGMEM = "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n" ; char authorLink[] PROGMEM = "</pre><hr>Read about me <a href=\"<a href="">http://mk90.blogspot.com\</a>" target=\"_blank\">here</a>" ; static void homePage (BufferFiller& buf) { buf.emit_p(PSTR("$F\r\n" "<title>Arduino web-thermometr</title>" "<h2>DS18B20 Network:</h2>" "<pre>"), okHeader); byte counter = 0; byte addr[8]; byte data[12]; setConversionTime(0x7F); // установить 9-битное разрешение startConversionAll(); // запустить конвертацию температуры delay(100); // на конвертацию 9-битного значения требуется 93,75 мс // ищем устройства и выводим результаты ds.reset_search(); delay(250); while (ds.search(addr)) { buf.emit_p(PSTR("$D: "),++counter); if ( OneWire::crc8(addr, 7) != addr[7]) { buf.emit_p(PSTR("- address CRC is not valid!\n")); continue; } else if (addr[0] != 0x28) { buf.emit_p(PSTR("- is not a DS18B20 family device!\n")); continue; } ds.reset(); ds.select(addr); ds.write(0xBE); // читать scratchpad for (byte k=0; k<9; k++) { // нам потребуется 9 байт data[k] = ds.read(); } if ( OneWire::crc8( data, 8) != data[8]) { buf.emit_p(PSTR("- value CRC is not valid!\n")); continue; } buf.emit_p(PSTR(" $D.$D °C\n"), *(int *)data/16, (int) (abs(*(int *)data % 16) * 0.625)); } buf.emit_p(PSTR("\nTotal: $D devices."), counter); buf.emit_p(authorLink); } void loop(void) { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) { bfill = ether.tcpOffset(); char* data = (char *) Ethernet::buffer + pos; Serial.println(data); // распечатываем запрос для отладки if (strncmp("GET / ", data, 6) == 0) homePage(bfill); else bfill.emit_p(PSTR( "HTTP/1.0 401 Unauthorized\r\n" "Content-Type: text/html\r\n" "\r\n" "<h1>401 Unauthorized</h1>")); // отправить ответ клиенту ether.httpServerReply(bfill.position()); } } Решил его скомпелировать. А там выдаются ошибки: Никак не пойму что где нужно исправить или обновить. Уже вроде все дополнения обновил. И ещё, в домашней папке создаётся каталог "./arduino15". И вот пока этот каталог принудительно не удалить, выдаётся ошибка "Ваша копия IDE установленно в подпапку вашей папки со скетчами. Пожалуйста переместите IDE в другую папку". И что делать, ума не прилажу. Уже всё что мог куда мог перенёс. И там где у меня мои наработки, находятся вне каталога с IDE.
Для использования модификатора переменной PROGMEM надо подключить #include <avr/pgmspace.h>, ну и переменные okHeader, authorLink, homePage объявить константными.
Я правильно понимаю, нужно в самом скетче добавить строчку: #include <avr/pgmspace.h>, ? И переменные, где как константы объявить? В начале скетча? И просто их сделать строковыми текстовыми константами?
Верно. Добавить const при объявлении переменной Код (C++): const char okHeader[] PROGMEM = const char authorLink[] PROGMEM =
Понятно. А по ошибке "Ваша копия IDE установленно в подпапку вашей папки со скетчами. Пожалуйста переместите IDE в другую папку". и созданию папки в домашнем каталоге? ("./arduino15") Ничего не подскажите?