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 */
A boolean-re ott a pont. A többit köszönöm, most nem van agyam felfogni ezeket. :-( A bajom az, hogy mennyire viszi el a hétköznapi földi halandó gondolkodását az, hogy össze-vissza kavarják a fejükben a dolgokat?
Ilyenkor, hogy is mondjam, akadok ki kissé, hogy milyen végtelenül következetlen az Arduino keretrendszer. És ilyenkor nem tudom eldönteni, hogy ez most bug vagy feature!?
És persze, nem nehéz átlátni a különböző változótípusok közötti átjárhatóságot, csak egy nulla szintű kezdő számára nem biztos, hogy helyes iránymutatás az, hogy "olvass és értelmezz valamit bináris módon, amit egy 16 bites decimálisan értelmezett térben tárolsz". A leírást köszönöm mindenesetre!
Alapvetően a fő kérdés az, hogy a buttonState miért int és miért nem bool?
A debugnak ez a szintje a circuits.io-n nálam már kiakaszt mindent. A rendes szimulációnál is kihullik a hajam néha, de ha belehasítanék egy ilyenbe, akkor megállna, mint a bot.
Hát pont ilyen ötletekre vadászok, mint ez a világítós.
Az a baj, hogy ezt egy közepesnél kevésbé szarabb rosszabb lépcsőházi automata tudja, ha van benne szervízüzemmód. És nem vagyok benne biztos, hogy drágább, mint az Arduinós megoldás bedobozolva, relével, stb.
A millis() overflow megoldást viszont tanulmányozom, köszi.
Igen, igazatok van. Valóban rosszul tettem fel a kérdést. Mentségemre szolgáljon hogy hulla fáradt voltam és még csak nem is értek hozzá :D Köszönöm mindenkinek a segítségeket. Próbálom memorizálni őket és ha legközelebb bármi bajom van akkor használni. Vargham, a te verziódat raktam össze(bár egyenlőre még csak próbapanelen). Tökéletesen működik, köszönöm!
A lámpa időzítős funkció közbeni lekapcsolására nincs szükség. Ez egy kinti lámpa lesz, ha valaki kimegy akkor megnyomja a gombot, a lámpa meg majd lekapcsol. Így működik a régi is. De ha valamit kell csinálni kint ami időigényesebb akkor bajos mindig nyomkodni a gombot, ezzel ez ki lesz küszöbölve.
A szimulátornak három hatalmas baja van: egyrészt roppant rendszerigényes (szerver és kliens oldalon is), másrészt nem real time, hanem lassúcska, harmadrészt nincs debug lehetőség egyáltalán.