Close

Problém s kodem u online meteorologické stanice.

Úvodní stránka Fórum Software Jazyky Jazyk Wiring Problém s kodem u online meteorologické stanice.

Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Autor
    Příspěvky
  • #6046
    Soci
    Účastník

    Dobrý den chtěl bych poprosit o radu u tohoto kodu.
    Je to moje maturitní práce takže je to celkem akutní.
    Když přidám do tohoto kodu, část na vytvoření webu vypíše chybu s get short.
    Už vážně nevím co dál.
    #include <Wire.h>
    #include <SoftwareSerial.h>// import the serial library
    #include <dht.h>
    #include <Ethernet.h>
    #include <SPI.h>

    #define dht_apin A0 // Analog Pin sensor is connected to
    dht DHT;
    // nastaví adresu pro senzor tlaku
    #define ADR 0x77

    boolean zacatekCteni = false;

    byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9C, 0xB7}; //MAC adresa
    IPAddress ip(192,168,1,177); //IP adresa
    EthernetServer server = EthernetServer(80); //port
    static char baseurl[]=“http://192.168.1.177&#8243;;

    // inicializace proměných
    short ac1 = 0;
    short ac2 = 0;
    short ac3 = 0;
    short b1 = 0;
    short b2 = 0;
    short mb = 0;
    short mc = 0;
    short md = 0;
    unsigned short ac6, ac4, ac5;
    long UT, b5;

    // nastavení přesnosti čidla OSS
    // 0 až 3 (0 nejmenší)
    byte OSS = 3;

    void setup()
    {

    Ethernet.begin(mac, ip); //vytvoření serveru
    server.begin(); //spuštění serveru

    Serial.begin(9600);
    Wire.begin();

    //získání kalibračních hodnot ze senzoru
    ac1 = GetShort(0xAA, 0xAB);
    ac2 = GetShort(0xAC, 0xAD);
    ac3 = GetShort(0xAE, 0xAF);
    ac4 = GetShort(0xB0, 0xB1);
    ac5 = GetShort(0xB2, 0xB3);
    ac6 = GetShort(0xB4, 0xB5);
    b1 = GetShort(0xB6, 0xB7);
    b2 = GetShort(0xB8, 0xB9);
    mb = GetShort(0xBA, 0xBB);
    mc = GetShort(0xBC, 0xBD);
    md = GetShort(0xBE, 0xBF);
    }

    void loop()
    {
    EthernetClient client = server.available(); // vytvorenie spojenia
    if (client)
    {
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected())
    {
    if (client.available())
    {
    if(!sentHeader)
    {
    client.println(„HTTP/1.1 200 OK“); // hlavička html stránky
    client.println(„Content-Type: text/html“);
    client.println(„<script type=text/javascript>“);
    client.println();
    sentHeader = true;

    client.println(„<table border=0 cellpadding=20 cellspacing=0 align=left>“); //tabulka a její nastavení
    client.println(„<tr>“);

    client.println(„</table>“);

    client.println(„</body>“);

    }

    DHT.read11(dht_apin);
    Serial.print(„Vlhkost: „);
    Serial.print(DHT.humidity);
    Serial.println(„% „);

    UT = GetUT();
    short teplota = GetTemperature(UT);
    Serial.print(„Teplota: „);
    Serial.print((float)teplota/10);
    Serial.println(“ st.C“);

    long tlak = GetPressure(ReadUP());
    Serial.print(„Tlak: „);
    Serial.print((float)tlak/100);
    Serial.println(“ hPa“);

    // výpočet nadmořské výšky
    // za p0 si dosaďte sou hodnotu pro tlak ve vaší
    // oblasti přepočtený na hladinu moře v Pa
    long p0 = 100400;
    float vyska = (float)44330 * (1 – pow(((float) tlak/p0), 0.190295));
    Serial.print(„Nadm. vyska: „);
    Serial.print((float)vyska);
    Serial.println(“ m“);

    // obnovovat budeme každých 5 vteřin
    delay (5000);
    // jeden řádek mezi daty vynecháme
    Serial.println();
    }

    //funkce pro získání kalibračních hodnot
    short GetShort(byte adr1, byte adr2)
    {
    byte b1, b2;
    Wire.beginTransmission(ADR);
    Wire.write(adr1);
    Wire.endTransmission();
    Wire.requestFrom(ADR,1);
    if (Wire.available()) b1 = Wire.read();

    Wire.beginTransmission(ADR);
    Wire.write(byte(adr2));
    Wire.endTransmission();
    Wire.requestFrom(ADR,1);
    if (Wire.available()) b2 = Wire.read();
    short r = b2 + (unsigned short)(b1 << 8);
    return r;
    }

    // získá nekompenzovanou hodnotu teploty
    long GetUT()
    {
    byte b1, b2, b3;

    Wire.beginTransmission(ADR);
    Wire.write(0xF4);
    Wire.write(0x2E);
    Wire.endTransmission();

    delay(5);

    Wire.beginTransmission(ADR);
    Wire.write(0xF6);
    Wire.endTransmission();
    Wire.requestFrom(ADR,1);
    if (Wire.available()) b1 = Wire.read();

    Wire.beginTransmission(ADR);
    Wire.write(0xF7);
    Wire.endTransmission();
    Wire.requestFrom(ADR,1);
    if (Wire.available()) b2 = Wire.read();

    long ut = ((long)b1<<8) + b2;
    return ut;
    }

    // získá nekompenzovanou hodnotu tlaku
    unsigned long ReadUP()
    {
    unsigned char msb, lsb, xlsb;
    unsigned long up = 0;

    Wire.beginTransmission(ADR);
    Wire.write(0xF4);
    Wire.write(0x34 + (OSS<<6));
    Wire.endTransmission();

    // čekání na konverzi podle nastavené přesnosti
    delay(2 + (3<<OSS));

    Wire.beginTransmission(ADR);
    Wire.write(0xF6);
    Wire.endTransmission();
    Wire.requestFrom(ADR, 3);

    // přečte tři bajty
    while(Wire.available() < 3)
    ;
    msb = Wire.read();
    lsb = Wire.read();
    xlsb = Wire.read();

    // a poté z nich složí hodnotu
    up = (((unsigned long) msb << 16) | ((unsigned long) lsb << 8) | (unsigned long) xlsb) >> (8-OSS);

    return up;
    }

    // funkce pro získání teploty z UT
    short GetTemperature(unsigned int ut)
    {
    long x1, x2;
    x1 = (((long)ut – (long)ac6)*(long)ac5) >> 15;
    x2 = ((long)mc << 11)/(x1 + md);
    b5 = x1 + x2;
    return ((b5 + 8)>>4);
    }

    // funkce pro výpočet tlaku
    long GetPressure(unsigned long up)
    {
    long x1, x2, x3, b3, b6, p;
    unsigned long b4, b7;

    b6 = b5 – 4000;
    // Calculate B3
    x1 = (b2 * (b6 * b6)>>12)>>11;
    x2 = (ac2 * b6)>>11;
    x3 = x1 + x2;
    b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;

    // Calculate B4
    x1 = (ac3 * b6)>>13;
    x2 = (b1 * ((b6 * b6)>>12))>>16;
    x3 = ((x1 + x2) + 2)>>2;
    b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;

    b7 = ((unsigned long)(up – b3) * (50000>>OSS));
    if (b7 < 0x80000000)
    p = (b7<<1)/b4;
    else
    p = (b7/b4)<<1;

    x1 = (p>>8) * (p>>8);
    x1 = (x1 * 3038)>>16;
    x2 = (-7357 * p)>>16;
    p += (x1 + x2 + 3791)>>4;

    return p;

    }
    client.stop(); // koniec relácie
    }
    }

    #6047
    Zbyšek Voda
    Správce

    Dobrý den, ještě nám sem prosím zkopírujte text chybové hlášky.
    Díky

    #6078
    Soci
    Účastník

    Arduino: 1.6.6 (Windows 8.1), Vývojová deska: „Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“

    C:\Users\Mates\Documents\Arduino\celykod_2.0\celykod_2.0.ino: In function ‚void setup()‘:

    celykod_2.0:46: error: ‚GetShort‘ was not declared in this scope

    ac1 = GetShort(0xAA, 0xAB);

    ^

    C:\Users\Mates\Documents\Arduino\celykod_2.0\celykod_2.0.ino: In function ‚void loop()‘:

    celykod_2.0:99: error: ‚GetUT‘ was not declared in this scope

    UT = GetUT();

    ^

    celykod_2.0:100: error: ‚GetTemperature‘ was not declared in this scope

    short teplota = GetTemperature(UT);

    ^

    celykod_2.0:105: error: ‚ReadUP‘ was not declared in this scope

    long tlak = GetPressure(ReadUP());

    ^

    celykod_2.0:105: error: ‚GetPressure‘ was not declared in this scope

    long tlak = GetPressure(ReadUP());

    ^

    celykod_2.0:129: error: a function-definition is not allowed here before ‚{‚ token

    {

    ^

    celykod_2.0:148: error: a function-definition is not allowed here before ‚{‚ token

    {

    ^

    celykod_2.0:176: error: a function-definition is not allowed here before ‚{‚ token

    {

    ^

    celykod_2.0:209: error: a function-definition is not allowed here before ‚{‚ token

    {

    ^

    celykod_2.0:219: error: a function-definition is not allowed here before ‚{‚ token

    {

    ^

    celykod_2.0:253: error: expected ‚}‘ at end of input

    }

    ^

    exit status 1
    ‚GetShort‘ was not declared in this scope

    Tento výpis by měl více informací s
    „Zobrazit více informací během kompilace“
    povoleno v Soubor > Vlastnosti

    #6080
    Zbyšek Voda
    Správce

    Největší problém bude v tom, že máte funkce getShort() a další deklarované UVNITŘ funkce loop().

    Funkce musíte deklarovat mimo tělo ostatních funkcí:)

Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Pro reakci na toto téma se musíte přihlásit.