canv-gauge

Тема в разделе "Arduino & Shields", создана пользователем Ser8191, 12 июн 2016.

  1. Ser8191

    Ser8191 Нерд

    Здравствуйте. Помогите с кодом.

    Код (C++):
    #include <EtherCard.h>
    #define ANALOG_PIN A0
    #define OUT_A 2
    #define OUT_B 3
    #define OUT_C 4
    int r;
    // мак адрес вашего устройства
    static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 };
    // ИП вашего устройства
    static byte myip[] = { 192, 168, 1, 200 };
    byte Ethernet::buffer[500];
    BufferFiller bfill;

    void setup () {
       pinMode(OUT_A, OUTPUT);
      pinMode(OUT_B, OUTPUT);
      pinMode(OUT_C, OUTPUT);
    Serial.begin(9600);
    // так как по умолчанию CS должен коннектиться к 8 порту, а у нас к 10 указываем это
    // (последний аргумент - номер порта)
    ether.begin(sizeof Ethernet::buffer, mymac, 10);
    ether.staticSetup(myip);
    }
    void loop () {
       digitalWrite(OUT_A, bitRead(1, 0));
         digitalWrite(OUT_B, bitRead(1, 1));
         digitalWrite(OUT_C, bitRead(1, 2));
       r=analogRead(ANALOG_PIN);

    word pos = ether.packetLoop(ether.packetReceive());

       

    if (pos){
    bfill = ether.tcpOffset();
    bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "\r\n"

    "<title>Gauge Test</title>"

    "<script>var CANV_GAUGE_FONTS_PATH = '<a href="http://test1.ru/canv-gauge-master/fonts" rel="nofollow">http://test1.ru/canv-gauge-master/fonts</a>'</script>"
    "<script src=\"<a href="http://test1.ru/canv-gauge-master/gauge.min.js%5C" rel="nofollow">http://test1.ru/canv-gauge-master/gauge.min.js\</a>"></script>"
    "<canvas id=\"gauge\"></canvas>"
    "<div id=\"console\"></div>"
    "<script src=\"<a href="http://test1.ru/canv-gauge-master/1.js%5C" rel="nofollow">http://test1.ru/canv-gauge-master/1.js\</a>"></script>"
    "<script>"
    "gauge.onready = function() {"
    "setInterval( function() {"
    //"gauge.setValue( Math.random() * 1200);"
    "gauge.setValue($D);"
    "}, 1000);"
    "};"
    "</script>"
    ),
    r);
    ether.httpServerReply(bfill.position());
    }
    }

    Код (Java):
        var gauge = new Gauge({
            renderTo    : 'gauge',
            width       : 200,
            height      : 200,
            glow        : true,
            units       : 'Pin A0',
            title       : false,
            minValue    : 0,
            maxValue    : 1200,
            majorTicks  : ['100','200','300','400','500','600','700','800','900','1000','1100','1200'],
            minorTicks  : 2,
            strokeTicks : false,
            highlights  : [
                { from : 0,   to : 100, color : 'rgba(0,   255, 0, .15)' },
                { from : 100, to : 200, color : 'rgba(255, 255, 0, .15)' },
                { from : 200, to : 300, color : 'rgba(255, 30,  0, .25)' },
                { from : 300, to : 400, color : 'rgba(255, 0,  225, .25)' },
                { from : 400, to : 1200, color : 'rgba(0, 0,  255, .25)' }
            ],
            colors      : {
                plate      : '#222',
                majorTicks : '#f5f5f5',
                minorTicks : '#ddd',
                title      : '#fff',
                units      : '#ccc',
                numbers    : '#eee',
                needle     : { start : 'rgba(240, 128, 128, 1)', end : 'rgba(255, 160, 122, .9)' }
            }
        });



        gauge.draw();

    window.onresize= function() {
        gauge.updateConfig({
            width  : document.body.offsetWidth,
            height : document.body.offsetHeight
        });
    };


    Если включено
    "gauge.setValue( Math.random() * 1200);"
    Всё работает как и должно, стрелка прыгает в зависимости от генерированного числа.
    Если делаю
    "gauge.setValue($D);"
    То стрелка кажет показания пина A0, но не меняет его, только после перезагрузки странницы.
    Как исправить?Как сделать это динамическое обновление?
     
  2. Ser8191

    Ser8191 Нерд

    r=analogRead(ANALOG_PIN);
    это чтение происходит в void loop
    но ответ html ответ происходит только тогда, когда я захожу 192.168.1.200
    И получается что я беру данные analogRead(ANALOG_PIN); только в момент обращения к 192.168.1.200

    как сделать чтобы это значение analogRead(ANALOG_PIN); динамически отображалось на html страничке без её перезагрузки?
     
  3. ostrov

    ostrov Гуру

    Код (C++):
    Refresh: 3
    Автообновление страницы каждые 3 сек.
     
  4. Ser8191

    Ser8191 Нерд

    Мне не нужно чтобы обновлялась вся страница, так как та будет несколько графических термометров.
     
  5. Ser8191

    Ser8191 Нерд