Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   411 / 853
(#) proksa1 hozzászólása Jan 1, 2018 /
 
Sziasztok!

Régen nem jártam itt, de most egy olyan problémába ütköztem amit eddig nem sikerült megoldanom. Az arduinoval fordított kódjaim nem működnek. Sok kódon túlvagyok így nagyon amatőr hibákat nemhiszem h vétettem.

A dolog úgy kezdődött, hogy építettem egy áramkört Atmega1284-el amihez letöltöttem a MightyCore-t mert ezt az AVR-t az alap boardokat nem találni. 8MHz-es belső oszcillátor, egy LCD, uart, i2c, pár IO+ad, semmi ördöngősség. Azonban a program akármit írtam nemvolt hajlandó futni, a végén kínomban már minden kikommenteztem a lábak beállításai és a kijelző háttérvilágítás kapcsolgatásán keresztül, hogy abból lássam fut e a program. Nem futott... látszólag. Felforrasztottam egy led-et az egyik lábra amin viszont láttam hogy villogtatja a LED-et de csak 1.7V kerül rá az 5V helyett. MikroC for AVR-rel irt kis led villogtató program viszont azonnal fut.
Fuse bitek rendesen beállítva. Gondoltam a MightyCore sz*r majd ha lesz időm foglalkozok vele.

Jött egy új dolog MySensor Node-okat szerettem volna tovább építeni, 8 és 16MHzes kvarc oszcillátorokkal mert 3,3 és 5Vos fajtákat is készítettem. Ehhez is kellett letölteni a mysensor headeröket. Az AVR itt atmega328p volt(arduino pro @8MHz beállítás az IDE-ben), van amelyik meg se nyikkan, van amelyik periódikusan ujraindulgat ami az uartos debugból látszott. (Ezekből készítettem már régebben csak ott arduino nano volt összekötve vezetékekkel egy RFM69-el és működött, fuse bitek gyári értéken)

Új laptop, az Arduino 1.6.valami helyett 1.8.5 de a board+library mappákat átmásoltam a régi gépről.
Következő...atmega328p-vel szerelt arduino nano, és egy néhány soros rém egyszerű kód egy shift regiszteres óra meghajtására.... szintén újraindulgatós probléma, ha delay-ekkel teletűzdeltem néha tovább volt képes eljutni a program nemértem miért. wdt-t kikapcsoltam mert azthittem attól indulgat újra. Végül megint a MikroC-vel kellett megcsinálnom pedig utálom, de az működött. (egy végtelen whileba zárt növekvő változó uart küldése viszont mert teljesen jól)

+még egy eset. Szintén egyszerű már működő cuccot, néhány gomb,ad és uart-os MP3 modul vezérlés, altatással és interruptos felkeltéssel, atmega328p. A fusebiteket nyers atmega328p-n nem bántottam csak a 8as osztást kapcsoltam ki h 8mhzes belsőről járjon. A jelenség itt az hogy szintén nem indult a program, kínomban a fusebiteket is próbálgattam és ha a BOD-ot 101-re állítottam akkor általában elindul de nem mindíg, illetve az altatás után felébredés után ilyenkor is lefagyott.

A már működő cuccokról sajnos régi fordított hex-em nincsen, csak az ino fájlok.
Bárkinek bármi ötlete mi okozhatja ezt? Próbáltam külföldi fórumon keresgélni de nemigen találtam hasonló problémát.
(#) Gabó válasza tbarath hozzászólására (») Jan 1, 2018 /
 
Köszi addig próbálgattam, míg megoldottam a dolgot. Progiba is sikerült beillesztenem.
Most egy másik nyűg jött elő, hogy a következő lépcsőt nem bírom beilleszteni a programomba, mert fordítási hibát kapok.

#define ONE_WIRE_BUS 6
Ha ezt beillesztem, akkor a fordító ezzel a hibával fogad:
exit status 1
'ONE_WIRE_BUS' was not declared in this scope
Maga a program kezelne egy ds3231et, i2c-n lcd-t 2 pwm kinenetet, meg egy külső DS18B20at. A DS18B20hoz lévő programrészhez kellene ez.
(#) tbarath válasza Gabó hozzászólására (») Jan 2, 2018 /
 
Elvileg rossz helyen deklarálod. Bár én nem I2C LCD-vel használtam, de azért berakom a kódot, hátha segít:
  1. #include <LiquidCrystal.h>
  2. #include <OneWire.h>
  3. #include <DallasTemperature.h>
  4. #include <stdio.h>
  5.  
  6. // initialize the library with the numbers of the interface pins
  7. /*
  8. rs 9
  9. enable  7
  10. d4  5
  11. d5  4
  12. d6  3
  13. d7  2
  14. */
  15. LiquidCrystal lcd(9, 7, 5, 4, 3, 2);
  16.  
  17. // DS18S20 Temperature chip i/o
  18. OneWire ds(12);  // on pin 12
  19.  
  20. DallasTemperature sensors(&ds);
  21.  
  22.  
  23. #define LCD_WIDTH 16
  24. #define LCD_HEIGHT 2
  25.  
  26. byte maxsensors = 0;
  27. char buffer[10];
  28.  
  29. void scanSensors(void)
  30. {
  31.   byte i;
  32.   byte present = 0;
  33.   byte data[12];
  34.   byte addr[8];
  35.   while (ds.search(addr))
  36.   {
  37.     Serial.print("R=");
  38.     for( i = 0; i < 8; i++) {
  39.       Serial.print(addr[i], HEX);
  40.       Serial.print(" ");
  41.     }
  42.  
  43.     if ( OneWire::crc8( addr, 7) != addr[7]) {
  44.         Serial.print("CRC is not valid!\n");
  45.         return;
  46.     }
  47.    
  48.     if ( addr[0] == 0x10) {
  49.         Serial.print("Device is a DS18S20 family device.\n");
  50.         maxsensors++;
  51.     }
  52.     else {
  53.       if (addr[0] == 0x28) {
  54.         Serial.print("Device is a DS18B20 family device.\n");
  55.         maxsensors++;
  56.         Serial.print("Resolution is ");
  57.         Serial.print(sensors.getResolution(addr));
  58.         Serial.println(" bit");
  59.       }
  60.       else {
  61.         Serial.print("Device is unknown!\n");
  62.         Serial.print("Device ID: ");
  63.         //Serial.print(addr[0],HEX);
  64.         Serial.println(addr[0],HEX);
  65.         return;
  66.       }
  67.     }
  68.     // The DallasTemperature library can do all this work for you!
  69.     ds.reset();
  70.     ds.select(addr);
  71.     ds.write(0x44,1);         // start conversion, with parasite power on at the end
  72.     delay(1000);     // maybe 750ms is enough, maybe not
  73.     // we might do a ds.depower() here, but the reset will take care of it.
  74.     present = ds.reset();
  75.     ds.select(addr);    
  76.     ds.write(0xBE);         // Read Scratchpad
  77.     Serial.print("P=");
  78.     Serial.print(present,HEX);
  79.     Serial.print(" ");
  80.     for ( i = 0; i < 9; i++) {           // we need 9 bytes
  81.       data[i] = ds.read();
  82.       Serial.print(data[i], HEX);
  83.       Serial.print(" ");
  84.     }
  85.     Serial.print(" CRC=");
  86.     Serial.print( OneWire::crc8( data, 8), HEX);
  87.     Serial.println();
  88.   }
  89.   Serial.print("No more addresses.\n");
  90.   ds.reset_search();
  91.   delay(250);
  92. }
  93.  
  94. void setup() {
  95.   lcd.begin(LCD_WIDTH, LCD_HEIGHT, 1);
  96.   lcd.clear();
  97.   Serial.begin(9600);
  98.   sensors.begin();
  99.   scanSensors();
  100. }
  101.  
  102. void loop() {
  103.   sensors.requestTemperatures(); // minden eszköztől kérjük a hőmérséklet mérést...
  104.   for (int i=0;i<maxsensors;i++){
  105.     float f = sensors.getTempCByIndex(i);  // egyesével kiolvassuk a mért értéket
  106.     if (DEVICE_DISCONNECTED_C == f){
  107.       Serial.println("disconnected");
  108.     }
  109.     else{
  110.       dtostrf(f, 7, 3, buffer);
  111.       lcd.setCursor(0,0);
  112.       lcd.print(buffer);  // megjelenítjük a kijelzőn
  113.       Serial.print("Sensor ");
  114.       Serial.print(i,DEC);
  115.       Serial.println(buffer);
  116.     }
  117.     delay(100);
  118.   }
  119. }
A hozzászólás módosítva: Jan 2, 2018
(#) Gabó válasza tbarath hozzászólására (») Jan 2, 2018 /
 
Szóval ezért szívatott. Áthelyeztem a példád alapján, rögtön elfogadta!
(#) pisti hozzászólása Jan 2, 2018 /
 
Sziasztok!
Az ebay-ről akartam rendelni 4wd car kit-et, de már a harmadik eladót veszik le. Olyat szeretnék ahol van hozzá "könyv" is. Most olyanból nem találtam.
Valaki tudna-e segíteni a könyvben (pdf) elküldeni emailen.
Köszönettel!
(#) kapu48 válasza pisti hozzászólására (») Jan 3, 2018 /
 
Tessék válogatni:
Bővebben: Link
(#) kapu48 válasza pisti hozzászólására (») Jan 3, 2018 /
 
Még több:
Bővebben: Link
(#) RoliNyh hozzászólása Jan 3, 2018 /
 
Helló!
Ennyi a kód.:

  1. #include <DS3231.h>
  2. #include <LiquidCrystal.h>
  3.  
  4. DS3231 rtc(SDA, SCL);
  5. LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
  6. void setup() {
  7.  rtc.begin();
  8.  lcd.begin(16,2);
  9. }
  10. void loop() {
  11.  lcd.setCursor(0,0);
  12.  lcd.print("Time:  ");
  13.  lcd.print(rtc.getTimeStr());
  14.  
  15.  lcd.setCursor(0,1);
  16.  lcd.print("Date: ");
  17.  lcd.print(rtc.getDateStr());
  18.  
  19.  delay(1000);
  20. }

És a hiba.:
Idézet:

Arduino: 1.8.3 (Windows 7), Alaplap:"Arduino Nano, ATmega328P"

DS3231_RTC:4: error: no matching function for call to 'DS3231:S3231(const uint8_t&, const uint8_t&)'

DS3231 rtc(SDA, SCL);

^

D:\_Arduino_1.8.3_\Projekt\DS3231_RTC\DS3231_RTC\DS3231_RTC.ino:4:20: note: candidates are:

In file included from D:\_Arduino_1.8.3_\Projekt\DS3231_RTC\DS3231_RTC\DS3231_RTC.ino:1:0:

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:64:3: note: DS3231:S3231()

DS3231();

^

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:64:3: note: candidate expects 0 arguments, 2 provided

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:60:7: note: constexpr DS3231:S3231(const DS3231&)

class DS3231 {

^

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:60:7: note: candidate expects 1 argument, 2 provided

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:60:7: note: constexpr DS3231:S3231(DS3231&&)

D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\DS3231/DS3231.h:60:7: note: candidate expects 1 argument, 2 provided

D:\_Arduino_1.8.3_\Projekt\DS3231_RTC\DS3231_RTC\DS3231_RTC.ino: In function 'void setup()':

DS3231_RTC:7: error: 'class DS3231' has no member named 'begin'

rtc.begin();

^

D:\_Arduino_1.8.3_\Projekt\DS3231_RTC\DS3231_RTC\DS3231_RTC.ino: In function 'void loop()':

DS3231_RTC:13: error: 'class DS3231' has no member named 'getTimeStr'

lcd.print(rtc.getTimeStr());

^

DS3231_RTC:17: error: 'class DS3231' has no member named 'getDateStr'

lcd.print(rtc.getDateStr());

^

Többszörös könyvtárak találhatók ehhez: "LiquidCrystal.h"
Használt: D:\_Arduino_1.8.3_\Vazlatfuzet\libraries\LiquidCrystal
Nem használt: D:\_Arduino_1.8.3_\libraries\LiquidCrystal
exit status 1
no matching function for call to 'DS3231:S3231(const uint8_t&, const uint8_t&)'

Ennek a jelentésnek több információja lehetne
a "Bővebb kimenet mutatása fordításkor"
opció engedélyezésével a Fájl -> Beállítások-ban.


Most akkor mi is a probléma?
(#) icserny válasza RoliNyh hozzászólására (») Jan 3, 2018 / 1
 
Azt mondja, hogy az általad használt DS3231 könyvtár és a főprogram hívásai nem kompatibilisek. Olyan metódusokat hívsz a főprogramból, amiket a DS3231 könyvtár nem definiál.
(#) RoliNyh válasza icserny hozzászólására (») Jan 3, 2018 /
 
Kicseréltem a libet és megy mostmár...
(#) game4812 hozzászólása Jan 3, 2018 /
 
Sziasztok!
Egy saját Midi kontroller építésén gondolkozom. Úgy számoltam, hogy 22 potméterre, 34 mikrokapcsolóra, és 5 enkóderre lenne szükségem bemenetként, és kb. 50 LED kimenetre. A kérdésem az lenne, hogy ha nem szoftveresen prellmentesítek, és PWM sem kell a LED-ekre, a kapcsolók is csak ON-OFF jelet küldenek, hogy lehet kiszámolni, hogy mennyi a legkisebb elérhető késleltetés, érdemes-e 16Mhz-el nekikezdeni, vagy nagyobb lapot keressek? Alapvetően egy Megára gondoltam, mivel az interrupt lábak és a mikrokapcsolók elférnek ezen, az analóg jelek és 1 multiplexerrel, és a LED-eket, I2C-n keresztüli bővítőkről vezérelném (akár PWM is, de nem muszáj).

Amenyik kész kontrollerre ezeket a funkciókat fel tudnám programozni, használtan 80000 Ft környékén kezdődne, de építeni szeretek, az kezelőfelület külföldről 10K, (elég a 200Ft-os poti), a dobozolás szerintem olyan 20K, kell még bele egy jobb és egy gyengébb DAC, egy USB hub, 2 előerősítő, 1 mikrofonerősítő. A hardveres háttér része a kérdéses, ennek kiválasztásában kérném segítségeteket.
(#) kapu48 válasza game4812 hozzászólására (») Jan 3, 2018 / 1
 
Én inkán komolyabb uC-re bíznám a feladatot!
Mondjuk erre: STM32F4DISCOVERY

És itt 1 minta project: STM32F4 discovery board "Dekrispator" synth
Bővebben: Link

Bővebben: Link
A hozzászólás módosítva: Jan 3, 2018
(#) RoliNyh hozzászólása Jan 3, 2018 /
 
Próbálta már valaki ezt a projektet?
Sikerült már valakinek megfordítani a dátum kijelzést, tehát, hogy az év legyen elől?

Elvileg meglehetne, de valahogy nem tudok rájönni...
A hozzászólás módosítva: Jan 3, 2018
(#) kapu48 válasza RoliNyh hozzászólására (») Jan 3, 2018 / 1
 
Próbáld így:
  1. getDateStr(FOMAT_LONG, FORMAT_BIGENDIAN, ',');
(#) RoliNyh válasza kapu48 hozzászólására (») Jan 3, 2018 /
 
Na ez így jó is. Csak tudnám akkor a doksiba mi a falnak tesztnek oda szögletes zárójelet...
(#) kapu48 válasza RoliNyh hozzászólására (») Jan 3, 2018 / 1
 
A doksiban jelek között levő adatokat [nem kötelező megadni!]
Viszont ha megadod? a kodban a []-jeleket elkel hagyni.
A hozzászólás módosítva: Jan 3, 2018
(#) RoliNyh válasza kapu48 hozzászólására (») Jan 3, 2018 /
 
Akkor mostmár ezt is tudom. Csak el ne felejtsem...
(#) Brandyman hozzászólása Jan 4, 2018 /
 
Sziasztok,

Készítettem egy akvárium világítás vezérlést, ahol PWM-el szabályzom (IRF510-en keresztül) a LED szalagokat.
Fehéret, pirosat, kéket. A célom az volt, hogy ne egyszerűen csak be-, vagy kikapcsoljanak a fények, hanem megfelelően dimmelve szimulálja a beesteledést, és a pirkadatot.

Teljesen jól működik, de valamiért az egész zavaróan vibrál.... Olyan 2-5 Hz környéki a dolog és a fényerő mértéke változik, nem ki-be kapcsol, hanem az adott érték körül feljebb és lejjebb...
Tettem kondenzátorokat a kimenetekre, - és a bejövő tápra is, - valamelyest javult, de még mindig látni vélem a vibrálást....

Van rá valamilyen ötletetek? Találkoztatok ilyesmivel? Lehet, hogy a negyfrekvenciás terhelést nem szereti a táp?

Itt a kód is, a piros és kék szineken van egy 0.75-ös szorzó, mert nem kell a teljes fénye, valamint a kék éjszakára 50-es értéken marad.

Köszi előre is!

---------------------------------------
  1. #include <swRTC.h>
  2. swRTC rtc;
  3.  
  4. const byte Value[60] = {255,255,255,255,255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,85,80,75,70,65,60,55,50,45,40,35,30,25,20,15,10,5,0,0,0,0,0};
  5.  
  6. byte WhitePin = 9;
  7. byte RedPin = 10;
  8. byte BluePin = 6;
  9. byte PWM;
  10. int hr;
  11. int mins;
  12. int sec;
  13.  
  14. void setup()
  15. {
  16. rtc.stopRTC(); //stop the RTC
  17. rtc.setTime(20,40,0); //set the time here
  18. rtc.setDate(2,1,2018); //set the date here
  19. rtc.startRTC(); //start the RTC
  20. }
  21.  
  22. void loop()
  23. {
  24. hr = rtc.getHours();
  25. mins = rtc.getMinutes();
  26.  
  27. //Set White
  28. if (hr <= 6) PWM = 0;
  29. if (hr == 7) PWM = Value[59 - mins];
  30. if (hr >= 8 && hr <= 20) PWM = 255;
  31. if (hr == 21) PWM = Value[mins];
  32. if (hr >= 22) PWM = 0;
  33. analogWrite(WhitePin, PWM);
  34.  
  35. //Set Red
  36. if (hr <= 5) PWM = 0;
  37. if (hr == 6) PWM = Value[59 - mins] * 0.75;
  38. if (hr >= 7 && hr <= 21) PWM = 255 * 0.75;
  39. if (hr == 22)PWM = Value[mins] * 0.75;
  40. if (hr >= 23) PWM = 0;
  41. analogWrite(RedPin, PWM);
  42.  
  43. //Set Blue
  44. if (hr <= 5) PWM = 0;
  45. if (hr == 6) PWM = Value[59 - mins] * 0.75;
  46. if (hr >= 7 && hr <= 21) PWM = 255 * 0.75;
  47. if (hr == 22)PWM = Value[mins] * 0.75;
  48. if (hr >= 23) PWM = 0;
  49. if (PWM < 50) PWM = 50;
  50. analogWrite(BluePin, 50);
  51.  
  52. delay(10000);
  53. }
(#) kapu48 válasza Brandyman hozzászólására (») Jan 4, 2018 /
 
Próbáld meg külön megadni szinenként a pwm értékeket.

És az 50. sorod hibás!
Helyesen: analogWrite(BluePin, PWM);
(#) GPeti1977 válasza kapu48 hozzászólására (») Jan 4, 2018 /
 
Attól még rossz lesz, value byte típusú nem lehe 0.75 szorozni, ha int akkor value*3 /4.
(#) Brandyman válasza GPeti1977 hozzászólására (») Jan 4, 2018 /
 
Mindkettőtöknek igazat adok, de...

@kapu48: Ha külön számolom ki a PWM értékeket; a végeredmény ugyanaz, hiszen egy változót, ha újra felhasználok egy programban kicsivel később, az nemigen hat ki a korábbi számítások végeredményére. Az 50-es sor valóban hibás.

@GPeti1977: Valóban, byte-ot nem is lehet szorozni 0.75-el. Ezt a részét átnézem majd

Köszönöm a hozzászólásokat!
(#) csabagalcsaba hozzászólása Jan 4, 2018 /
 
Üdv mindenkinek!

Szeretnék egy kis segítséget kérni. Megcsináltam Arduino uno-val ezt a dallam lejátszót. Bővebben: Link
Sikerült megoldanom azt is, hogy gombnyomásra induljon a dallam. A 11-es analóg kimeneten adja ki a jelet. Hogyan tudnám megcsinálni, hogy két kimenet legyen ellen ütemben ehhez hasonlóan: Bővebben: Link
Ezt a másodikat is megcsináltam Attiny45 el. Annyi vele a probléma, hogy kb 1 mp hang fér el benne.
Az arduinoban elfér 4 mp, ez elég lenne. De két kimenetre lenne szükségem.
Valaki tudna ebben segíteni?
Köszönöm!
(#) gerleimarci válasza Brandyman hozzászólására (») Jan 4, 2018 /
 
Az nem lehet, hogy az RTC lib zavar be? Próbálj meg egy egyszerű progit, amiben megadsz minden színnek mondjuk egy 50%-os kitöltést, és megnézed, hogy úgy vibrál-e.
(#) RoliNyh hozzászólása Jan 4, 2018 /
 
Végzett már valaki olyan mérést/kísérletet akármit, hogy kiderítse egy grafikus kijelző meghajtása I2C vagy SPI protokollal használ kevesebb erőforrást, tehát FLASH -t és RAM -ot?
(#) Bakman válasza RoliNyh hozzászólására (») Jan 4, 2018 / 1
 
Elméletileg az SPI kevesebbet kér, cserébe több lábat emészt fel. I2C esetén eleve van eszközcímzés, míg SPI esetén ez csak egy szál vezeték.
(#) kissi válasza RoliNyh hozzászólására (») Jan 4, 2018 / 1
 
Szia!

Még nem csináltam ( én általában PIC-ezek !), de ezek hardver elemek és protokollok, azaz az erőforrás igényük ( a működésükhöz használt FLASH és RAM ) gyakorlatilag nem tér el számottevően !
Ami szerintem különbség lehet, az az, hogy az SPI sokkal nagyobb sebességgel tudja tolni az adatokat ( ha a vevőegység képes rá !) és ezért hamarabb van kész ugyanannak az információnak az átvitelével !
(#) Brandyman válasza kapu48 hozzászólására (») Jan 4, 2018 /
 
Nos, átvariáltam a kódot, és megváltoztattam a PWM frekvenciákat is (nagyobbra). Jelenleg nem látok vibrálást, de az esti - besötétedős - időszak még várat magára. Többet utána fogok tudni.

  1. #include <swRTC.h>
  2. swRTC rtc;
  3.  
  4. const byte WhiteValue[60] = {255, 255, 255, 255, 255, 250, 245, 240, 235, 230, 225, 220, 215, 210, 205, 200, 195, 190, 185, 180, 175, 170, 165, 160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0, 0, 0, 0, 0};
  5. const byte RedValue[60] = {190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 185, 180, 175, 170, 165, 160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0, 0, 0, 0, 0};
  6. const byte BlueValue[60] = {190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 185, 180, 175, 170, 165, 160, 155, 150, 145, 140, 135, 130, 125, 120, 115, 110, 105, 100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50};
  7.  
  8. byte WhitePin = 9;
  9. byte RedPin = 10;
  10. byte BluePin = 6;
  11.  
  12. byte PWM;
  13. int hr;
  14. int mins;
  15.  
  16. void setup()
  17. {
  18.   rtc.stopRTC(); //stop the RTC
  19.   rtc.setTime(17, 55, 0); //set the time here
  20.   rtc.setDate(4, 1, 2018); //set the date here
  21.   rtc.startRTC(); //start the RTC
  22.   setPwmFrequency(9, 8);  // (31250/8 = 3906 Hz)
  23.   setPwmFrequency(10, 8);  // (31250/8 = 3906 Hz)
  24.   setPwmFrequency(6, 8);  //  (62500/8 = 7812 Hz)
  25. }
  26.  
  27. void loop()
  28. {
  29.   hr = rtc.getHours();
  30.   mins = rtc.getMinutes();
  31.  
  32.   //Set White
  33.   if (hr <= 6) PWM = 0;
  34.   if (hr == 7) PWM = WhiteValue[59 - mins];
  35.   if (hr >= 8 && hr <= 20) PWM = 255;
  36.   if (hr == 21) PWM = WhiteValue[mins];
  37.   if (hr >= 22) PWM = 0;
  38.   analogWrite(WhitePin, PWM);
  39.  
  40.   //Set Red
  41.   if (hr <= 5) PWM = 0;
  42.   if (hr == 6) PWM = RedValue[59 - mins];
  43.   if (hr >= 7 && hr <= 21) PWM = 190;
  44.   if (hr == 22)PWM = RedValue[mins];
  45.   if (hr >= 23) PWM = 0;
  46.   analogWrite(RedPin, PWM);
  47.  
  48.   //Set Blue
  49.   if (hr <= 5) PWM = 50;
  50.   if (hr == 6) PWM = BlueValue[59 - mins];
  51.   if (hr >= 7 && hr <= 21) PWM =190;
  52.   if (hr == 22)PWM = BlueValue[mins];
  53.   if (hr >= 23) PWM = 50;
  54.   analogWrite(BluePin, PWM);
  55. }
  56.  
  57. void setPwmFrequency(int pin, int divisor)
  58. {
  59.   byte mode;
  60.   if (pin == 5 || pin == 6 || pin == 9 || pin == 10)
  61.   {
  62.     switch (divisor)
  63.     {
  64.       case 1: mode = 0x01; break;
  65.       case 8: mode = 0x02; break;
  66.       case 64: mode = 0x03; break;
  67.       case 256: mode = 0x04; break;
  68.       case 1024: mode = 0x05; break;
  69.       default: return;
  70.     }
  71.     if (pin == 5 || pin == 6)
  72.     {
  73.       TCCR0B = TCCR0B & 0b11111000 | mode;
  74.     } else
  75.     {
  76.       TCCR1B = TCCR1B & 0b11111000 | mode;
  77.     }
  78.   } else if (pin == 3 || pin == 11)
  79.   {
  80.     switch (divisor)
  81.     {
  82.       case 1: mode = 0x01; break;
  83.       case 8: mode = 0x02; break;
  84.       case 32: mode = 0x03; break;
  85.       case 64: mode = 0x04; break;
  86.       case 128: mode = 0x05; break;
  87.       case 256: mode = 0x06; break;
  88.       case 1024: mode = 0x07; break;
  89.       default: return;
  90.     }
  91.     TCCR2B = TCCR2B & 0b11111000 | mode;
  92.   }
  93. }
(#) Bakman válasza Brandyman hozzászólására (») Jan 4, 2018 / 1
 
Elnézést, hogy beleszólok de a három tömböt nagyon egyszerűen lehet helyettesíteni egy-egy képlettel és egy-két feltételes elágazással.

Shot_258.jpg
    
(#) Brandyman válasza Bakman hozzászólására (») Jan 4, 2018 /
 
Nyugodtan szólj bele, ezért van a Fórum.

A meglátás jogos, de egyrészt lusta voltam kimatekozni, másrészt pedig mivel ez a Nano nem lesz másra használva így azt gondoltam; nem gond, ha kicsit pazarlóbb a program a memóriával.

De ha meghatározod a megfelelő képletet; ígérem, kicserélem a programban, és törlöm a tömböket.
(#) Kera_Will válasza Brandyman hozzászólására (») Jan 4, 2018 /
 
Valóban ezen én is gondolkodtam.
Sima 255/60 osztás is meg tenné percenként kicsit növekedne ok persze a ez nem kerek szám.
4.25 így 60 * 4 az 240 nem lesz100%.
De ha még 5 el lépsz azzal se tévedsz sokat mert az utolsó 8 9 percre simán eléred a 255 .
De a tömbjeid értékei is azzal végződnek .
Tehát simán használhatod a 5 mint növekményt / csökkenést konstansként.
A kékre meg egy feltételt hogy este 50%-on álljon meg .
A halak biztosan nem panaszkodnak majd ,hogy 9 perccel gyorsabban süt be a "nap" teljesen .
Mikor eddig egyből rájuk villant
A hozzászólás módosítva: Jan 4, 2018
Következő: »»   411 / 853
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem