Объединить 2 скетча
- Войдите на сайт для отправки комментариев
Ср, 28/06/2017 - 00:18
Добрый вечер. В теме ардуино я совсем новичок.
Созрела идея сделать метеостанцию с передачей данных на народный мониторинг. До самой передачи данных еще далековато, т.к. банально пока что не получается объединить пару скетчей в 1.
Имеется 2 датчика BMP180 и SI7021. Все это прицепил на Arduino UNO. По отдельности каждый датчик свою функцию выполняет при помощи таких скетчей:
SI7021
// Distributed with a free-will license. // Use it any way you want, profit or free, provided it fits in the licenses of its associated works. // SI7021 // This code is designed to work with the SI7021_I2CS I2C Mini Module available from ControlEverything.com. // https://www.controleverything.com/content/Humidity?sku=SI7021_I2CS#tabs-... #include <Wire.h> // SI7021 I2C address is 0x40(64) #define Addr 0x40 void setup() { // Initialise I2C communication as MASTER Wire.begin(); // Initialise serial communication, set baud rate = 9600 Serial.begin(9600); // Start I2C transmission Wire.beginTransmission(Addr); // Stop I2C transmission Wire.endTransmission(); delay(300); } void loop() { unsigned int data[2]; // Start I2C transmission Wire.beginTransmission(Addr); // Send humidity measurement command, NO HOLD MASTER Wire.write(0xF5); // Stop I2C transmission Wire.endTransmission(); delay(500); // Request 2 bytes of data Wire.requestFrom(Addr, 2); // Read 2 bytes of data // humidity msb, humidity lsb if(Wire.available() == 2) { data[0] = Wire.read(); data[1] = Wire.read(); } // Convert the data float humidity = ((data[0] * 256.0) + data[1]); humidity = ((125 * humidity) / 65536.0) - 6; // Start I2C transmission Wire.beginTransmission(Addr); // Send temperature measurement command, NO HOLD MASTER Wire.write(0xF3); // Stop I2C transmission Wire.endTransmission(); delay(500); // Request 2 bytes of data Wire.requestFrom(Addr, 2); // Read 2 bytes of data // temp msb, temp lsb if(Wire.available() == 2) { data[0] = Wire.read(); data[1] = Wire.read(); } // Convert the data float temp = ((data[0] * 256.0) + data[1]); float cTemp = ((175.72 * temp) / 65536.0) - 46.85; float fTemp = cTemp * 1.8 + 32; // Output data to serial monitor Serial.print("Влажность : "); Serial.print(humidity); Serial.println(" % RH"); Serial.print("Температура : "); Serial.print(cTemp); Serial.println(" C"); delay(30000); }
BMP180
#include <Wire.h> #include <Adafruit_BMP085.h> #define one_wire-bus 2 Adafruit_BMP085 bmp; void setup() { Serial.begin(9600); if (!bmp.begin()) { Serial.println("Could not find a valid BMP085 sensor, check wiring!"); while (1) {} } } void loop() { Serial.print("Temperature = "); Serial.print(bmp.readTemperature()); Serial.println(" *C"); Serial.print("Pressure = mm Hg"); Serial.print(bmp.readPressure()); Serial.println(" mm Hg"); // Calculate altitude assuming 'standard' barometric // pressure of 1013.25 millibar = 101325 Pascal Serial.print("Altitude = "); Serial.print(bmp.readAltitude()); Serial.println(" meters"); Serial.print("Pressure at sealevel (calculated) = "); Serial.print(bmp.readSealevelPressure()/133.3); Serial.println(" mm"); // you can get a more precise measurement of altitude // if you know the current sea level pressure which will // vary with weather and such. If it is 1015 millibars // that is equal to 101500 Pascals. Serial.print("Real altitude = "); Serial.print(bmp.readAltitude(101500)); Serial.println(" meters"); Serial.println(); delay(25000); }
Объединить воедино никак не удается, на выходе или ошибки или же идут показания только от SI7021.
Вот что компилятор забраковал из последнего
// Distributed with a free-will license. // Use it any way you want, profit or free, provided it fits in the licenses of its associated works. // SI7021 // This code is designed to work with the SI7021_I2CS I2C Mini Module available from ControlEverything.com. // https://www.controleverything.com/content/Humidity?sku=SI7021_I2CS#tabs-... #include <Wire.h> #include <Adafruit_BMP085.h> // SI7021 I2C address is 0x40(64) #define Addr 0x40 #define one_wire-bus 2 Adafruit_BMP085 bmp; void setup() { // Initialise I2C communication as MASTER Wire.begin(); // Initialise serial communication, set baud rate = 9600 // Start I2C transmission Wire.beginTransmission(Addr); // Stop I2C transmission Wire.endTransmission(); Serial.begin(9600); if (!bmp.begin()) { Serial.println("Could not find a valid BMP085 sensor, check wiring!"); while (1) {} delay(300); } void loop() { unsigned int data[2]; // Start I2C transmission Wire.beginTransmission(Addr); // Send humidity measurement command, NO HOLD MASTER Wire.write(0xF5); // Stop I2C transmission Wire.endTransmission(); delay(500); // Request 2 bytes of data Wire.requestFrom(Addr, 2); // Read 2 bytes of data // humidity msb, humidity lsb if(Wire.available() == 2) { data[0] = Wire.read(); data[1] = Wire.read(); } // Convert the data float humidity = ((data[0] * 256.0) + data[1]); humidity = ((125 * humidity) / 65536.0) - 6; // Start I2C transmission Wire.beginTransmission(Addr); // Send temperature measurement command, NO HOLD MASTER Wire.write(0xF3); // Stop I2C transmission Wire.endTransmission(); delay(500); // Request 2 bytes of data Wire.requestFrom(Addr, 2); // Read 2 bytes of data // temp msb, temp lsb if(Wire.available() == 2) { data[0] = Wire.read(); data[1] = Wire.read(); } // Convert the data float temp = ((data[0] * 256.0) + data[1]); float cTemp = ((175.72 * temp) / 65536.0) - 46.85; float fTemp = cTemp * 1.8 + 32; // Output data to serial monitor Serial.print("Влажность : "); Serial.print(humidity); Serial.println(" % RH"); Serial.print("Температура : "); Serial.print(cTemp); Serial.println(" C"); }
exit status 1
a function-definition is not allowed here before '{' token
Буду признателен за любую помощь
Я вам сейчс очень мягко намекну что ошибка
a function-definition is not allowed here before '{' token
на уровне детского сада. И связана со строкой 35.
После этого - что вы там с датчиками могли напортачить даже смотреть не стал.
это понятно, что строка 35, но вот что с этим делать никак не пойму. Эта строка выглядит точно так же как и в скетче для SI7021, но там ошибки нету.
Андрей, вы извините, но базовый синтаксис вам ни кто объяснять не будет. Это как программа начальной школы. Вы же в магазине не спрашиваете почему 2+2=4
в чем разница между этими фрагментами кода?
Я собственно и не скрывал, что я ничего не понимаю, не хотите объяснить, зачем вообще чтото писать?
Визуально никакого.
Но в выложенном вашем первом посте разница есть.
Потому киайте что у вас сейчас)
в выложенном коде я пытался жирным тегом подсветить проблемный участок, отсюда он и выглядит по другому
Только что по новой перебрал вариант, о чудо оно запустилось, пока не успел сообразить как я это сделал)
но давление стало вычислятся как то криво
если в объединенном коде добавлять строку из BMP180
то появляется вышеуказанная ошибка
Андрей88, объединить можне не любые два скетча, а только те, что допускают объединение.
Одним из ризнаков скетча, допускающего объединение с другими, является отсутствие delay().
У Вас delay() встречается в обоих скетчах, следовательно, объединить их нельзя.
ну может не всегда это невозможно. Все таки получилось несколько иным способом
Для SI7021 нашел другой скетч с жк-дисплеем. При попытке выдрать из скетча ЖК-дисплей запускать его не удавалось. Пришлось качать библиотеку для жк-дисплея, чтобы компилятор не ругался. Потом приделал туда BMP-180. Вроде нормально считает теперь. С предыдущим скетчем так и не понял, почему давление стало криво считаться. В итоге вышло вот что
Андрей88, объединить можне не любые два скетча, а только те, что допускают объединение.
Одним из ризнаков скетча, допускающего объединение с другими, является отсутствие delay().
У Вас delay() встречается в обоих скетчах, следовательно, объединить их нельзя.
дык, запретил я хнёй заниматься ещё три года тому...
ну может не всегда это невозможно.
Может быть.
Но подтверждающих примеров я еще не видел.
Все таки получилось несколько иным способом
Для SI7021 нашел другой скетч с жк-дисплеем.
У Вас какие-то проблемы с логикой. Если невозможно объединить два конкретные скетча, это совсем не значит, что нельзя объединить два других, написать все с нуля или сделать целую кучу промежуточных вариантов.