diff options
Diffstat (limited to 'f010_raznefunkcije.ino')
-rw-r--r-- | f010_raznefunkcije.ino | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/f010_raznefunkcije.ino b/f010_raznefunkcije.ino new file mode 100644 index 0000000..9613049 --- /dev/null +++ b/f010_raznefunkcije.ino @@ -0,0 +1,164 @@ +int x2i(char *s) +{ + int x = 0; + for(;;) { + char c = *s; + if (c >= '0' && c <= '9') { + x *= 16; + x += c - '0'; + } + else if (c >= 'A' && c <= 'F') { + x *= 16; + x += (c - 'A') + 10; + } + else if (c >= 'a' && c <= 'f') { + x *= 16; + x += (c - 'a') + 10; + } + else break; + s++; + } + return x; +} + +void explode(String s, String delimiter, String arr[], int ARR_LEN) { + // by timemage on #arduino/freenode + unsigned part_begin = 0; + for (size_t i = 0; i < ARR_LEN; ++i) { + const auto delim_index = s.indexOf(delimiter, part_begin); + const auto part_end = (delim_index >= 0) ? delim_index : s.length(); + + arr[i] = s.substring(part_begin, part_end); + + if (delim_index >= 0) { + part_begin = delim_index + delimiter.length(); + } + } +} + + +int pin2gpio(String in) { + in.toUpperCase(); + if (in == "A0") return int(A0); + if (in == "D0") return int(D0); + if (in == "D1") return int(D1); + if (in == "D2") return int(D2); + if (in == "D3") return int(D3); + if (in == "D4") return int(D4); + if (in == "D5") return int(D5); + if (in == "D6") return int(D6); + if (in == "D7") return int(D7); + if (in == "D8") return int(D8); + return in.toInt();// fallback to gpio +} + +String getContentType(String filename) { // convert the file extension to the MIME type + if (filename.endsWith(".html")) return "text/html"; + else if (filename.endsWith(".css")) return "text/css"; + else if (filename.endsWith(".js")) return "application/javascript"; + else if (filename.endsWith(".ico")) return "image/x-icon"; + else if (filename.endsWith(".jpg")) return "image/jpeg"; + else if (filename.endsWith(".jpeg")) return "image/jpeg"; + else if (filename.endsWith(".txt")) return "text/plain"; + else if (filename.endsWith(".pdf")) return "application/pdf"; + else if (filename.endsWith(".png")) return "image/png"; + else if (filename.endsWith(".zip")) return "application/zip"; + else if (filename.endsWith(".ttf")) return "font/ttf"; + else if (filename.endsWith(".gif")) return "image/gif"; + else if (filename.endsWith(".mp3")) return "application/ogg"; + else if (filename.endsWith(".ogg")) return "application/ogg"; + else if (filename.endsWith(".mp4")) return "application/ogg"; + else if (filename.endsWith(".gz")) return "application/x-gzip"; + else if (filename.endsWith(".xml")) return "text/xml"; + else if (filename.endsWith(".svg")) return "text/svg+xml"; + return "application/octet-stream"; +} + +bool writefile(String filepath, String contents) { + File file = SPIFFS.open(filepath, "w"); + if (!file) { + return false; + } + int bytesWritten = file.print(String(contents)); + if (bytesWritten == 0) { + return false; + } + file.close(); + return true; +} +String readfile(String filepath) { + File file = SPIFFS.open(filepath, "r"); + if (!file) { + return ""; + } + String filecontents; + while (file.available()) { + filecontents += char(file.read()); + } + file.close(); + return filecontents; +} + +String fihr(int code, String text) { // format inline html response + return "<body style=background:#000;color:#FFF;font-family:monospace><h1>"+String(code)+": "+text+" <a href=/>na koren spletišča (/)<a/>" + +"<button onclick=window.history.back();>nazaj</button></h1><hr><h2><i>"+program_ime+"/"+String(verzija[0])+"."+String(verzija[1])+"."+String(verzija[2]) + +"</i></h2></body>"; +} + + +const int NTP_PACKET_SIZE = 48; // NTP time is in the first 48 bytes of message +byte packetBuffer[NTP_PACKET_SIZE]; //buffer to hold incoming & outgoing packets + +time_t getNtpTime() +{ + IPAddress ntpServerIP; // NTP server's ip address + + while (Udp.parsePacket() > 0) ; // discard any previously received packets + Serial.println("Transmit NTP Request"); + // get a random server from the pool + WiFi.hostByName(ntpServerName, ntpServerIP); + Serial.print(ntpServerName); + Serial.print(": "); + Serial.println(ntpServerIP); + sendNTPpacket(ntpServerIP); + uint32_t beginWait = millis(); + while (millis() - beginWait < 1500) { + int size = Udp.parsePacket(); + if (size >= NTP_PACKET_SIZE) { + Serial.println("Receive NTP Response"); + Udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer + unsigned long secsSince1900; + // convert four bytes starting at location 40 to a long integer + secsSince1900 = (unsigned long)packetBuffer[40] << 24; + secsSince1900 |= (unsigned long)packetBuffer[41] << 16; + secsSince1900 |= (unsigned long)packetBuffer[42] << 8; + secsSince1900 |= (unsigned long)packetBuffer[43]; + return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR; + } + } + Serial.println("No NTP Response :-("); + return 0; // return 0 if unable to get the time +} + +// send an NTP request to the time server at the given address +void sendNTPpacket(IPAddress &address) +{ + // set all bytes in the buffer to 0 + memset(packetBuffer, 0, NTP_PACKET_SIZE); + // Initialize values needed to form NTP request + // (see URL above for details on the packets) + packetBuffer[0] = 0b11100011; // LI, Version, Mode + packetBuffer[1] = 0; // Stratum, or type of clock + packetBuffer[2] = 6; // Polling Interval + packetBuffer[3] = 0xEC; // Peer Clock Precision + // 8 bytes of zero for Root Delay & Root Dispersion + packetBuffer[12] = 49; + packetBuffer[13] = 0x4E; + packetBuffer[14] = 49; + packetBuffer[15] = 52; + // all NTP fields have been given values, now + // you can send a packet requesting a timestamp: + Udp.beginPacket(address, 123); //NTP requests are to port 123 + Udp.write(packetBuffer, NTP_PACKET_SIZE); + Udp.endPacket(); +} |