Segítségek kérnék. Egy vezérléshez lenne szükségem 4 szint mélységű menüre. A menü vezérlését rotary encoderrel kellene megoldani. Az encoder gombja megnyomásakor felfüggeszteni a futást és a menübe lépni, ahol a megadott változóknak kellene új értéket adni (45 változó - 5 különböző típus). Készítettem egy táblázatot:
> Mennyire ajánlott az Arudino clone 1000 forint körül? Vagy a nano kicsit alatta?
Ajánlott. Ugyanaz az Atmel MCU van rajta.
Egy dologra kell figyelni: Rosszabb az összeszerelés minősége. Vásárlás után érdemes végignézni a forrasztásokat, eltávolítani a rövidzárakat, újraforrasztani a gyengéket.
> Mennyire megbizható a CH340-esek?
Vegyél pro mini klónt, az 1000 ft alatt van. ÉS akkor olyan USB-TTL átalakítót használsz hozzá, amilyet csak akarsz. Én a Silabs CP2101-et ajánlom. Veszel párat, és nem leszel gondban.
> Továbbá, le lehet kódolni a megirt programot? (eredetiben, vagy utánzatokban)?
> Mert eredetin se találtam semmiféle védelmet a rátöltött programkódjainkra.
Ugyanaz a mikrokontroller mindegyikben, így nincs értelme megkülönböztetni a kettőt.
A programot le lehet védeni, Google keresőszavak: atmega lock fuse
Mennyire ajánlott az Arudino clone 1000 forint körül? Vagy a nano kicsit alatta?
Mennyire megbizható a CH340-esek?
Továbbá, le lehet kódolni a megirt programot? (eredetiben, vagy utánzatokban)? Mert eredetin se találtam semmiféle védelmet a rátöltött programkódjainkra.
Sziasztok. Segítségét kérném valamelyik ügyes emberkének,aki érti az "arduino" alaplapok javításában. 1db (Alko Mega 3D v.1.0) alaplapom van és úgy kaptam meg még decemberben hogy jó volt(elméletileg). Na én ezt elbasztam nem kicsit,úgy hogy a hd44700 kijelző, teljesen eltünt.Itt ülök a gép előtt már lassan két hónapja,úgy hogy nem értek hozzá.Tanulok,bottolások mennek már csak az a baj hogy a nincs meg a szinkron a két gép között. 1x sikerült már szinkronizálni decemberben de újraraktam azóta 5x a windows 7et. Ftdi drivereket cserélgetem de mikor bármelyik bootolo arduino1.5 vagy még ujjjabbal bootol(botolás közbe megáll) időtullépésel.... Tudom hog az Atmega8 de az már régebben megvolt... Jelet kap a gép,probál is kontaktálni de stk500ra dobja hiáába az avr változtatások 5.11 vagy 6.0.1 az utóbbival eggyáltalán nem engedi... Valaki legyen szíves egy kis okosságal megdobni !! Köszönöm. Elér rég szenvedek ezzel,nem tudtam ilyen komplikált egy ilyen kis alaplap... Hát belenyultam. Alternatívák is jöhetnek,vagy elviszem barhová hogy jó legyen.. tyty
Elsőre az általam használt kódot javasolnám neked átszerkesztésre, idő hiányában most nem tudok foglalkozni vele.
Reléket cserélek SSR-re a szivattyúkhoz a vezérlő lefagyása miatt, ez egy javaslat.
Az Uno az egy Nano, csak a bootloader újratöltése történt meg a wdt aktiválásához.
/*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 LAKAS1 5 // relay2 #define PUFFER 4 // relay3 #define SZV2START 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,10,14,3,16,12,15);
//------- 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);
Sziasztok! Eléggé kezdő vagyok arduinoban. Valamikor régen tanítottak némi C nyelvet,némi pascalt, némi fogalmam van a programozásról, de nem túl sok...
Sok mindent szeretnék, de szép lassan, lépésről lépésre. Az végcél, egy otthoni fűtés-HMV-napkollektor vezérlés lenne. Pár 18b20 , arduino nano, és relés kimenetek segítségével. Alapból 2x16 os i2c buszos lcd.
Ameddig eljutottam, hogy 2-3 -x db 18b20 -at képes serial montorra kiírni. Az LCD -d is meg tudom "szólaltatni". Az első fennakadás , amiben szeretném a segítségeteket kérni, hogy a szenzorok hőfok értékét (attól függ, hogy a buszon hány darabot talál) 1-1 külön változóban szeretném tárolni (esetleg tömbben), hogy később az értékeket fel tudjam használni feltételként! Vagy egyenként LCD -re kiíratni...