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.
Označeno štítky: chyba v kodu maturita online meteostanice
- Toto téma obsahuje celkem 3 odpovědi. Do diskuze (2 diskutující) se naposledy zapojil uživatel Zbyšek Voda a poslední změna proběhla před 8 roky a 8 měsíci.
-
AutorPříspěvky
-
16.2.2016 v 10:09 #6046SociÚč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 0x77boolean 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″;// 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í serveruSerial.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
}
}16.2.2016 v 13:24 #6047Zbyšek VodaSprávceDobrý den, ještě nám sem prosím zkopírujte text chybové hlášky.
Díky17.2.2016 v 20:00 #6078SociÚčastníkArduino: 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 scopeTento výpis by měl více informací s
„Zobrazit více informací během kompilace“
povoleno v Soubor > Vlastnosti18.2.2016 v 11:48 #6080Zbyšek VodaSprávceNejvě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í:)
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.