Nekem ilyen esetekben (önállóan működik, két szoftvert egyesítve nem) az szokott lenni, hogy a változókat kavarom (globális) és/vagy két függvény is beletúr ugyanabba. A kódodat nem látom, így nem tudok róla nyilatkozni, hogy mi lehet a gond.
Aztán: táp. A táp fontos, a logikai vonalak zajvédelme úgyszintén. Részletesen a linken. De előbb szoftveresen nézelődnék (Serial debug).
A kijelzett értéknél, hogy sporoljak a karakterekkel ezt változtattam.
Ez volt.: ,,
lcd.print(getTempCByIndex(1);
kerekites = sensors.getTempCByIndex(1)/1; // Ez elvileg huleség. Itt azonban a tizedes vesszo utani ertek eltunik lcd.print(kerekites); //Itt irja be a 1-es szenzor adatát
void loop() { // LCD első sor********************** sensors.requestTemperatures(); delay(500); //fontos ha 11 vagy 12 a resolution lcd.setCursor(0,0); //0. sor 0. karakter a kezdő cím lcd.print("Puffer horetegek"); // LCD második sor_1_********************** lcd.setCursor(0,1); //0. sor 0. karakter a kezdő cím lcd.print("1"); lcd.print("/"); lcd.setCursor(3,1); //0. sor 3. karakter a kezdő cím lcd.print(sensors.getTempCByIndex(0)); //Itt irja be a 1-es szenzor adatát lcd.print("C"); lcd.print(char(223)); // LCD második sor_2_********************** lcd.setCursor(10,1); //1. sor 10. karakter a kezdő cím lcd.print("2"); lcd.print("/"); lcd.setCursor(13,1); //1. sor 13. karakter a kezdő cím lcd.print(sensors.getTempCByIndex(1)); //Itt irja be a 2-es szenzor adatát lcd.print("C"); lcd.print(char(223)); // LCD harmadik sor_1_********************** lcd.setCursor(0,2); //2. sor 0. karakter a kezdő cím lcd.print("3"); lcd.print("/"); lcd.setCursor(3,2); //2. sor 3. karakter a kezdő cím lcd.print(sensors.getTempCByIndex(2)); //Itt irja be a 3-as szenzor adatát lcd.print("C"); lcd.print(char(223)); // LCD harmadik sor_2_********************** lcd.setCursor(10,2); //2. sor 10. karakter a kezdő cím lcd.print("2"); lcd.print("/"); lcd.setCursor(13,2); //2. sor 13. karakter a kezdő cím lcd.print(sensors.getTempCByIndex(3)); // Itt irja be a 1-es szenzor adatát lcd.print("C"); lcd.print(char(223)); // LCD negyedik sor********************** lcd.setCursor(0,3); //3. sor 10. karakter a kezdő cím lcd.print("F"); lcd.print("u"); lcd.print("s"); lcd.print("t"); lcd.print("h"); lcd.print(char(239));//ö betű kiirasa //Max6675 még nem megy! :-(
Hát valami nem kerek vele az tuti.... Lehet, hogy a nyákon van valami bibi a com portok kivezetésével... Passz, de a lényeg, hogy már müxik az új alappanelemmel.
/*Arduino Uno, ATmega328 YourDuino.com Example: Multiple DS18B20 Temperature Sensors Displayed on 4x20 character LCD display
DS18B20 Pinout (Left to Right, pins down, flat side toward you) - fekete = Ground - sárga = Signal (Pin 2): (with 3.3K to 4.7K resistor to +5 or 3.3 ) - zöld = +5 or +3.3 V */
#include <SPI.h> #include <SD.h> #include <avr/wdt.h> #include <OneWire.h> #include <DallasTemperature.h> #include <DS1624.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <MAX6675.h> DS1624 temperature1(0x48); DS1624 temperature2(0x4E); DS1624 temperature3(0x4D); DS1624 temperature4(0x4F); #define DS3231_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } /*-----( Declare Constants and Pin Numbers )-----*/ // Data wire is plugged into port 2 on the Arduino (can be changed) #define ONE_WIRE_BUS 2 // NOTE: No ";" on #define #define SZV1START 3 // relay1 #define SZV2START 4 // relay2 #define PUFFER 5 // relay3 #define LAKAS1 6 // relay4 #define BYPASS 7 // relay5 #define LAKAS2 8 // relay6 /*-----( Declare objects )-----*/ // Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS);
// Pass address of our oneWire instance to Dallas Temperature. DallasTemperature sensors(&oneWire);
// Start the LCD display library LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display int LED1 = 13; // Status LED Pin int CS = 10; // CS pin on MAX6675 int SO = 11; // SO pin of MAX6675 int SCLK = 9; // SCLK pin of MAX6675 int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F) float fusthofok = 0.0; // Temperature output variable float lakaskW = 0.0; float kazankW = 0.0; // Initialize the MAX6675 Library for our chip MAX6675 temp(CS,SO,SCLK,units);
// Setup Serial output and LED Pin // MAX6675 Library already sets pin modes for MAX6675 chip! /*-----( Declare Variables )-----*/ // Assign the addresses of your 1-Wire temp sensors. // See the tutorial on how to obtain these addresses: // http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Read%20individual
wdt_disable(); lcd.init(); // initialize the lcd lcd.backlight(); Serial.begin(9600); // set the initial time here: //DS3231 seconds, minutes, hours, day, date, month, year //setDS3231time(30,12,11,13,13,04,16);
//------- Initialize the Temperature measurement library-------------- sensors.begin(); // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster) sensors.setResolution(pufferfent, 10); //T1 sensors.setResolution(puffer1_3, 10); //T2 sensors.setResolution(puffer2_3, 10); //T3 sensors.setResolution(pufferlent, 10); //T4 temperature1.start(); temperature2.start(); temperature3.start(); temperature4.start(); pinMode(LED1, OUTPUT); pinMode(SZV1START, OUTPUT); pinMode(LAKAS1, OUTPUT); pinMode(PUFFER, OUTPUT); pinMode(SZV2START,OUTPUT); pinMode(LAKAS2,OUTPUT); pinMode(BYPASS,OUTPUT); digitalWrite(SZV1START, HIGH); // szv1 áll digitalWrite(LAKAS1, HIGH); digitalWrite(PUFFER, HIGH); // pufferre állítja az irányváltó1-et digitalWrite(SZV2START, HIGH); // szv2 áll digitalWrite(LAKAS2, HIGH); digitalWrite(BYPASS, HIGH); // bypassra állítja irányváltó2-őt
pinMode(A0, OUTPUT); SD.begin(A0); if (!SD.begin(A0)) {
if (SD.exists("datalog.csv")) { Serial.println("datalog.csv exists."); } else { Serial.println("datalog.csv doesn't exist."); } wdt_enable(WDTO_8S); }//--(end setup )--- void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour)); // set hours Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday) Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } /*void displayTime() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); // send it to the serial monitor Serial.print(hour, DEC); // convert the byte variable to a decimal number when displayed Serial.print(":"); if (minute<10) { Serial.print("0"); } Serial.print(minute, DEC); Serial.print(":"); if (second<10) { Serial.print("0"); } Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC); Serial.print("/"); Serial.print(year, DEC); Serial.print(" Day of week: "); switch(dayOfWeek){ case 1: Serial.println("Sunday"); break; case 2: Serial.println("Monday"); break; case 3: Serial.println("Tuesday"); break; case 4: Serial.println("Wednesday"); break; case 5: Serial.println("Thursday"); break; case 6: Serial.println("Friday"); break; case 7: Serial.println("Saturday"); break; } }*/
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
SD.begin(A0); byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); digitalWrite(LED1, HIGH); // turn the LED on (HIGH is the voltage level) delay(100); // wait for a second digitalWrite(LED1, LOW); // turn the LED off by making the voltage LOW delay(100); // wait for a second
// if the file is available, write to it: if (dataFile) { dataFile.println(dataString); dataFile.close(); } // if the file isn't open, pop up an error: else { //Serial.println("error opening datalog.txt"); } delay (500);
Akkor hibás volt a másik lapka? Létezik olyan, hogy csak egy adott funkciója "megy tönkre"? Mivel a másik soros porton amin az USB van oda-vissza kommunikál.
Az okról nem tudok nyilatkozni, millió egy lehet. Ha a mérés valóban így inkonzisztens, ahogy írod, akkor a néhány héttel ezelőtt részleteiben tárgyalt átlagolós módszer hozhat megoldást, mivel bármely 5 mérés legalacsonyabb és legmagasabb értékét kiejted az átlagból, a maradék viszonylag nagy megbízhatósággal az elvárt eredményt fogja hozni. Persze tesztelni kell, és az sem árt, ha a probléma forrását szünteted meg.
Az arduino.cc fórumán olvasva javasolnak kondenzátorokat az érzékelő kimenete és a föld közé, a kábel mindkét végére (0,1 uF), ezzel a zaj jelentős részét ki tudod szűrni (de nem mindet). Hathatós megoldás lehet még a mérés gyakoriságának csökkentése (akár több másodperces, esetleg egy perces közökkel). Nekem előfordult, hogy fordítva kötöttem be, akkor produkált furcsa méréseket (meg jelentős melegedést is). Üdv,
/* YourDuino Example: Find Address of a DS18B20 Temperature Sensor Cut and paste the address to a text file for later use. V1.1 01/17/2013 Questions: terry@yourduino.com
Connections: DS18B20 Pinout (Left to Right, pins down, flat side toward you) - Left = Ground - Center = Signal (Pin 2): (with 3.3K to 4.7K resistor to +5 or 3.3 ) - Right = +5 or +3.3 V This sketch looks for 1-wire devices and prints their addresses (serial number) to the Serial Monitor in a format that is useful in Arduino sketches. Based on example at: http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html */