Почему показывает "0"
- Войдите на сайт для отправки комментариев
Сб, 11/06/2016 - 18:52
// This is a demo of the RBBB running as webserver with the Ether Card // 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php #define ANALOG_PIN A0 #define OUT_A 2 #define OUT_B 3 #define OUT_C 4 #include <EtherCard.h> int ran=0; // ethernet interface mac address, must be unique on the LAN static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; static byte myip[] = { 192,168,1,203 }; byte Ethernet::buffer[500]; BufferFiller bfill; void setup () { if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0) Serial.println(F("Failed to access Ethernet controller")); ether.staticSetup(myip); pinMode(OUT_A, OUTPUT); pinMode(OUT_B, OUTPUT); pinMode(OUT_C, OUTPUT); Serial.begin(9600); } static word homePage() { for (int i = 0b000; i <= 0b111; i++) { digitalWrite(OUT_A, bitRead(i, 0)); digitalWrite(OUT_B, bitRead(i, 1)); digitalWrite(OUT_C, bitRead(i, 2)); ran=analogRead(ANALOG_PIN); Serial.print(analogRead(ran)); Serial.print(" | "); } Serial.println(); bfill = ether.tcpOffset(); bfill.emit_p(PSTR( "HTTP/1.0 200 OK\r\n" "Content-Type: text/html\r\n" "Pragma: no-cache\r\n" "\r\n" "<title>Gauge Test</title>" "$D"), ran); return bfill.position(); } void loop () { word len = ether.packetReceive(); word pos = ether.packetLoop(len); if (pos) // check if valid tcp data is received ether.httpServerReply(homePage()); // send web page data }
Подскажите, почему в браузере у меня вместо 10230000001023 у меня просто "0", а в мониторе порта всё как и должно быть.
К контроллеру подключена микросхема 4051
Может разность показаний связана с разностью написанного в строках 36, 37?
Разобрался, забыл про цикл.
Код 1.js
Если включено
"gauge.setValue( Math.random() * 1200);"
Всё работает как и должно, стрелка прыгает в зависимости от сгенерированного числа.
Если делаю
То стрелка кажет показания пина A0, но немяет его, только после перезагрузки страници.
Как исправить?
Что выводите, то и показывает.
Просто подумайте, что означает глубокомысленная конструкция в строках 35-36?
Например, на пние ANALOG_PIN напряжение 3В, ran получает значение примерно 615. И что Вы выводите? Значение напряжения на 615-ом пине? У Вас есть такой?
UPD: ох, тут Вы уже всё поменяли ... ну, ладно, моё замечание относилось к первому посту. Всё равно посмотрите, чтобы впредь такого не писать.
Помогите со второй проблемой)
Не могу. Я понятия не имею, что за скрипты Вы включаете в строка 47, 48 и 51. Вам виднее.
https://github.com/Mikhus/canv-gauge
Почему-то показания обновляются только после обновления страницы
https://github.com/Mikhus/canv-gauge
Не, ну это Вы сами самотрите. Ваш код я глянул, про ошибку Вам написал, а скачивать какие-то скрипты, изучать их, простите, не могу.
r=analogRead(ANALOG_PIN);
это чтение происходит в void loop
но ответ html ответ происходит только тогда, когда я захожу 192.168.1.200
И получается что я беру данные analogRead(ANALOG_PIN); только в момент обращения к 192.168.1.200
как сделать чтобы это значение analogRead(ANALOG_PIN); динамически отображалось на html страничке без её перезагрузки?
Ну, насколько я понимаю, делать это вручную по-простому Вы не умеете и Вам нужна готовая "бмблиотека". Таковая существует. Погуглите по слову ajax - эта библиотека как раз для таких дел предназначена.
Только сразу предупреждаю, она прядка 70КБайт и живёт на сервере. Если у Вас сервер - Ардуино, то Вам необходимо будет иметь либо SD карту, либо внешний EEPROM достаточного размера, короче, Вам где-то надо эти 70КБ хранить, чтобы раздавать клиентам.
Ну или можно тоже самое сделать руками в несколько строк, тут Вам надо гуглить по словам "связывание данных". Например, здесь (но сам не читал и не знаю насколько понятно изложено).
Нашёл статью как раз про то что мне нужно.
http://startingelectronics.org/projects/arduino-projects/web-server-two-temperature-gauges/
Не понимаю как мне сделать передачу, у меня html страницы нет, она в самом коде ардуино
Ну, правильно. Вот в коде и всталяёте все нужные тэги.
Сначала отладьте на обычной странице (сервер не нужен, сделайте страницу в любом редакторе и грузите в браузер прямо из файла). Грузите, смотрите как работает, правьте, отлаживайте.
А как буде всё нормально работать, выдайте точно такой текст страницы из своего скетча.
И всё. Всё будет нормально.
С HTML страницей всё ясно, всё работает.
Текст страницы из ардуинки выдаёт нормально, работает, кажет.
Это всё понимаю.
куда и кому это передавать ? есть метод POST, например... Тут и GET можно передать, не совсем понятно, вернее - совсем не понятно, куда ты это передать собрался.
Текст страницы из ардуинки выдаёт нормально, работает, кажет.
Это всё понимаю.
Вы сделали страницу на диске, как я говорил? Если нет, то в дальнейшем помогайте себе сами. Если же сделали, то этот XML у Вас лежит отдельным файлом рядом с HTM, правильно? И он (данные из него) нормально показываются в браузере. Правильно? Но, похоже, Вы не понимаете, как это работает, иначе не было бы этого вопроса.
Давайте разбирать внимательно.
Тепереь Вы понимаете, как отдавать XML?
После того, как Ва сервер (Ардуино) отдал основную страницу, он должен ждать запросв на XML файл и отдавать XML. Потом снова ждать и снова отдавать. Разумеется при каждом запросе XML файла, Ваш сервер должен отдавать актуальные данные. Так и получится, что данные на странице постоянно обновляются.
Только обязательно отладьте всё на файлах и только когда всё будет Вас устраивать, переходите к ардуино. Иначе Вы не будете знать где не работает.
во 2 строке твоего хтмл, что за бред ?
<script src=\"<a href="
http:
//test1.ru/3.js%5C" rel="nofollow">http://test1.ru/3.js\</a>"></script>
да и в первой бредовато, тег титл не там где надо.. дальше и не смотрел.
del
В ответе от сервера нужно указать сколько байт передаешь, тип так Content-Length: 15\r\n
с AJAX разобрался ? если нет, то по простому можешь вставить между тегов
<head>
<meta http-equiv="refresh" content="10">
</head>
и страница будет обновлятся каждые 10 сек.
Спасибо что помогаете.
ЕвгенийП, разобрался я только с Html. Создал файл, всё работает, кажет 0, изначальное значение переменной. С файлом xml не разобрался, не знаю как.
Я решил пойти немного по другому пути, авось получится...
Подключил модуль SD карты.
Загрузил на карту файл index.htm
В ардуинку загрузил код из выше указанной статьи.
Запускаю.
Монитор порта выдаёт следующее:
Lion777, это да, это знаю Но хочется без обновления страницы, хочется разобраться.
ну тогда АЯКС напрямую или через JQuery или т.п.
ну почитать можно про АЯКС ? код ЯваСкрипт Си-подобный, похож на ардуино, примеров с АЯКС полно, вот ссылка почитать, похожее как у тебя, на англ. языке https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/SD-card-AJAX-XML-web-server/
https://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/AJAX-read-switches-analog/
Взял вот этот пример:
Не хочет соединяться с сервером
Не хочет соединяться с сервером
Ну, может, не в духе, или настроения нет - чего докопались к железке-то? Может, у неё голова болит?
А если серьёзно, то "не хочет соединяться с сервером" - говорит мне ровно столько же, как и фраза "нет настроения у железки". Может - при коннекте отваливается по таймауту, может - ещё тыщу причин: ни схемы подключения, ничего.
Если хотите грамотного ответа - правильно формулируйте вопрос. В правильно сформулированном, обычно, половина ответа уже содержится по определению.
Схема подключения.
Не удается получить доступ к сайту
Превышено время ожидания ответа от сайта 192.168.1.177
Жёлтый диодик на плате моргает
Таймаут, значит, что-то идёт не так. Попробуйте добавить отладочный код, распихайте Serial.println("тут сообщение") по коду и посмотрите в мониторе порта - происходит ли вообще что-либо при попытке соединиться.
Sergeyevd, Так Вы никогда не сделаете. У Вас подход неправильный.
Вам же говорили и я, и другие коллеги - почитайте про ajax, а ещё лучше сделайте свой короткий скрипт, чтобы не тащить аяксовские 70 КБ и на городить SD карту ради пустяков.
Вы же не хотите читать, а всё надеетесь найти волшебный готовый код.
Ну, смотрите, как это просто, чёрт возьми!
Делаете такую страницу:
К ней прилагается текстовый файл data.txt с данными, вот такой
Если их положить рядышком на сервере и HTM файл загрузить в браузер, то он покажет. текст
Temperature on the Mars surface is 56.
Humidity is 31.
а теперь, если файл с данными открыть (в лбом редактеоре) и менять значения, то в браузере эти значения будут меняться сами (обновляются раз в секунду или реже, если сеть тормозная).
Это то, что Вам нужно?
Если то, то сделайте следующее: Разместите эти два файла на сервере (любом, можно localhost) и убедитесь, что всё работает как я сказал.
После этого я подскажу как их можно менять по Вашему усмотрению и как из запихать в ардуино.
Только давайте Вы будете делать, что говорят. Если сразу начнёте пихать в Ардуино - помогайте себе сами.
Это то, что Вам нужно?
Если то, то сделайте следующее: Разместите эти два файла на сервере (любом, можно localhost) и убедитесь, что всё работает как я сказал.
Да, это то, что мне нужно.
Всё попробовал, всё работает.
После этого я подскажу как их можно менять по Вашему усмотрению и как из запихать в ардуино.
Внимательно читаю.
Евгений, сейчас хотел попробовать добавить это всё в свой код, но столкнулся с вопросом как загнать значение temperature в переменную джаваскрипта. Перепробовал столько всего....
//data_val = this.responseXML.getElementsById('a1');
//data_val2 = this.responseXML.getElementsByTagName('a2');
Так, теперь давайте попробуете с ардуино. Потом снова вернёмся к серверу. Но пока убедимся, что Вы можете это в ардуино перенести.
Вам надо сделать такой скетч сервера.
Шаг первый
1. Если пришёл GET запрос на файл HTM - Вы просто возвращаеете мой НТМ файл ничего не меняя.
2. Если пришёл GET запрос на файл data.txt - Вы возвращаете мой файл. Запросы на этот файл Вам будут валиться каждую секунду. Вот каждую секунду и возвращайте одно и тоже.
Если Вы всё сделаете правильно, будут показываться постоянные значения темпаратуры и влажности. Если показываются, значит всё нормально, преходим к
Шаг второй
1. Если пришёл GET запрос на файл HTM - Вы по-прежнему возвращаеете мой НТМ файл ничего не меняя.
2. Если пришёл GET запрос на файл data.txt - Вы возвращаете мой файл, но на этот раз какую-нибудь цифру (например, температуру) в нём постоянно меняете (например, поставьте глобальный счётчик и возвращайте каждый раз следующее число: 1, 2, 3 и т.д.)
Если Вы сделаете всё правильно, Вы в браузере будете видеть меняющееся каждую секунду число.
Если у Вас и это получится, дальше Вы знаете что делать. Если не знаете, завтра поговорим. Завтра же я помсотрю свой файл и поправлю его, чтобы меньше памяти жрал и вообще посмотрю, а то сегодня я его очень быстро писал, посмотрим, поправим. Также завтра я объясню всё, что в нём написано, чтобы Вы могли легко менять его под свои нужды.
Пока же попробуйте сделать два шага, которые я описал.
Евгений, сейчас хотел попробовать добавить это всё в свой код, но столкнулся с вопросом как загнать значение temperature в переменную джаваскрипта. Перепробовал столько всего....
Никак. Их там нет и не будет. Они будут дозапрашиваться каждую секунду. А файл HTM Вам вообще пока не надо менять.
Сделайте как я описал в двух шагах в предыдущем посте.
Соорудил скетч. Всё таки жду объяснений, не очень то получается у меня..
Превышено время ожидания ответа от сайта 192.168.1.177
У Вас в коде указан адрес 10.0.0.20
А адрес 192.168.1.177 от куда?
Соорудил скетч. Всё таки жду объяснений, не очень то получается у меня..
Не, Сергей Вы толком объясняйте, что не получается.
Например, Саму страницу без данных Вы в браузере видите или нет? Если нет, то проблема совсем не моих делах, а если видите, то в моих. Соответсвенно и искать проблему надо в разных местах. Так что подробнее, пожалуйста.
Пока же то, что сразу заметил.
1
В строке 58 должно быть text/plain а не text/html
2
Вместо строки 60, Вы должны возвращать нормальный документ, как было у меня, т.е. там должно быть не
"что-то как-то"
а
Сергей, более аккуратная версия скрипта, а также подробная инструкция как с ним работать в новой теме http://arduino.ru/forum/programmirovanie/microajax-dlya-arduino
Посмотрите.
Если не будет получаться, можете задавать вопросы хоть там, хоть здесь, только описывайте проблему подробнее, как я Вас просил.
У Вас в коде указан адрес 10.0.0.20
1
IPAddress ip(10, 0, 0, 20);
// IP address, may need to change depending on network
А адрес 192.168.1.177 от куда?
fogary, прошу прощенья, естественно в скетче адрес был 192.168.1.177, а сюда скопировал исходный вариант.
fogary, прошу прощенья, естественно в скетче адрес был 192.168.1.177, а сюда скопировал исходный вариант.
Сюда копируйте только тот вариант, который загружаете в ардуину. Вот прямо из окошка Arduino IDE и копируйте.
Jeka_M, соответственно
Таймаут, значит, что-то идёт не так. Попробуйте добавить отладочный код, распихайте Serial.println("тут сообщение") по коду и посмотрите в мониторе порта - происходит ли вообще что-либо при попытке соединиться.
Не работает наверное потому что ENC28J60 не работает со штатной библиотекой ентернет