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   717 / 845
(#) Rober_4 válasza Massawa hozzászólására (») Dec 18, 2021 /
 
Sajnos a régi kapcsolási rajzom már nincs meg.
Viszont ez alapján nekilátok.
(Hátha)
Köszönöm a segítséget!
(#) Massawa válasza Rober_4 hozzászólására (») Dec 18, 2021 / 1
 
Itt megtalálsz mindent:

Minden ami MIDI
(#) kistee válasza Rober_4 hozzászólására (») Dec 20, 2021 /
 
MIDI-hez jó a 6N136, vagy 6N138 is. Én is azt használom, a HEstore-ban kapható.
(#) trickentrack hozzászólása Dec 24, 2021 /
 
Sziasztok!

Levilágítót építek, egy levilágítót építek arduinos időzítővel. Bővebben: Link
Teszi szépen a dolgát a program, viszont az nem tetszik, hogy másodpercben lehet csak beállítani az időt. Hogy kéne módosítani a programot, hogy az utolsó két digiten a másodpercet 1-59 között, az elsőn pedig a percet állítsam?
Előre is köszönöm, kellemes ünnepeket!
Program
Videó
A hozzászólás módosítva: Dec 24, 2021
(#) mnyugger válasza trickentrack hozzászólására (») Dec 24, 2021 /
 
Nyomd meg a rotaryt.
(#) wbt válasza trickentrack hozzászólására (») Dec 24, 2021 /
 
Ha csak kijelzés módosítása kell, akkor /60 a perc, maradék a másodperc, ha külön állítani szeretnéd, akkor 1 bit (az említett gombnyomással) vagy 1-et vagy 60-at ad hozzá a változóhoz. Vagy lehet még úgy, hogy ha nyomva van, akkor +60, ha nincs, akkor +1.
(#) trickentrack válasza mnyugger hozzászólására (») Dec 24, 2021 /
 
Kicsot rosszul fogalmaztam, az a problemam, hogy mondjuk masfel percet csak ugy tudok beallítani, hogy 90mp. Ugy szeretnem, hogy 1perc 30mpet allitsak.
(#) Kari55 hozzászólása Dec 25, 2021 /
 
Sziasztok építettem egy hétszegmenses órát Arduino nanoval és DS3231 RTC-vel. Az a probléma vele, hogy nem tartja meg, áramszünet után az időt. Mellékelem a programkódot, kérlek nézzétek át mi lehet a baj vele.
Előre is köszönöm.

  1. #include <RTClib.h>
  2. #include <LedControl.h>
  3. //=======================================================================================
  4. // data pin, clock, latch
  5. double hold;
  6. LedControl lc = LedControl(4, 2, 3, 1); //LedControl(DIN, CLK, CS, 1);
  7. RTC_DS3231 rtc; //I used DS3231 instead of DS1307
  8. //========================================================================================
  9. void setup() {
  10. rtc.begin();
  11. lc.shutdown(0, false);
  12. lc.setIntensity(0, 4); // display brightness (0..15)
  13. lc.clearDisplay(0); // erase display
  14. rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //set clock as computer clock
  15. //rtc.adjust(DateTime(2020, 7, 12, 10, 57, 00));
  16. }
  17. //========================================================================================
  18. void loop() {
  19. hold = millis();
  20. while ((hold + 30000) > millis() ) {
  21. DateTime now = rtc.now();
  22. setCol3(now.hour());// Display hour min second hh-mm-ss
  23. setCol2(now.minute());
  24. setCol1(now.second());
  25. lc.setChar (0, 5, '-', false);
  26. lc.setChar (0, 2, '-', false);
  27. }
  28. hold = millis();
  29. while ((hold + 5000) > millis() ) {
  30. DateTime now = rtc.now();
  31. setCol2(now.month()); // Display US date format MM-DD-YY
  32. setCol1(now.day());
  33. setCol3(now.year()-2000);
  34. lc.setChar (0, 5, '-', false);
  35. lc.setChar (0, 2, '-', false);
  36. }
  37. }
  38. //========================================================================================
  39. void setCol1 (byte jam) {
  40. String strBuffer = Konversi(jam);
  41. byte pjg = strBuffer.length() + 1;
  42. char val[pjg];
  43. strBuffer.toCharArray(val, pjg);
  44. lc.setChar (0, 1, val[0], false);
  45. lc.setChar (0, 0, val[1], false);
  46. }
  47. //========================================================================================
  48. void setCol2 (byte mnt) {
  49. String strBuffer = Konversi(mnt);
  50. byte pjg = strBuffer.length() + 1;
  51. char val[pjg];
  52. strBuffer.toCharArray(val, pjg);
  53. lc.setChar (0, 4, val[0], false);
  54. lc.setChar (0, 3, val[1], false);
  55. }
  56. void setCol3 (byte dtk) {
  57. String strBuffer = Konversi(dtk);
  58. byte pjg = strBuffer.length() + 1;
  59. char val[pjg];
  60. strBuffer.toCharArray(val, pjg);
  61. lc.setChar (0, 7, val[0], false);
  62. lc.setChar (0, 6, val[1], false);
  63. }
  64. String Konversi(int nilai) {
  65. if (nilai < 10) {
  66. return "0" + String(nilai);
  67. }
  68. else {
  69. return String(nilai);
  70. }
  71. }
(#) neogeo2 válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
A kapcsolást meg tudod mutatni?
(#) gabilow válasza Kari55 hozzászólására (») Dec 25, 2021 1 /
 
Üdv!
Cseréld ki az elemet a DS3231-ben.
Áldott Ünnepeket mindenkinek!
(#) Kari55 válasza neogeo2 hozzászólására (») Dec 25, 2021 /
 
Sajnos azt már nem találom.
(#) neogeo2 válasza gabilow hozzászólására (») Dec 25, 2021 /
 
Ha gyári modul, akkor lehet ez a baj. De lehet valamilyen saját tervezésű panel is.
(#) Kari55 válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
Az már megvolt, sőt az rtc modult is cseréltem.
(#) vargham válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
Ez a sor a setup függvényben:
  1. rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

A program fordításának időpontját írja bele az RTC-be, minden egyes indításkor.
(#) Kari55 válasza vargham hozzászólására (») Dec 25, 2021 /
 
Akkor ezt tiltsam le azaz kommenteljem beállítás után?
A hozzászólás módosítva: Dec 25, 2021
(#) Régi motoros hozzászólása Dec 25, 2021 1 /
 
Üdvözletem kellemes karácsonyt mindenkinek!

Ez érdekes, most hogy írtátok, nekem is van egy ilyen modulom, igaz csak deszkamodell, bár már egy éve raktam össze, amolyan kísérletképp csak. Szóval ott van a polcon, nem is törődtem vele.
Na most csak ránéztem, és az enyém pontosan 1 év 17 percet késik...

A 18650-es csak az RTC modulnak szolgáltatja a készenléti feszültséget, az ardut nem táplálja.
Mikor összetákoltam, fel volt töltve az aksi, most rámértem és még 3.8V a feszültsége, tehát nem merült le. Programfeltöltéskor volt beállítva az idő, tehát kb 1 perc+- hiba volt a beállítás miatt maximum.
Most akkor elfelejtett évszámot ugrani vagy mi történhetett?

  1. #include <DS3231.h>
  2. #include <LiquidCrystal.h>
  3.  
  4. DS3231 rtc(SDA, SCL);
  5. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  6.  
  7. void setup()
  8.   {
  9.   rtc.begin();
  10.   lcd.begin(16,2);
  11.  
  12.   rtc.setDOW(5);             // Hét napjának beállítása: (1 Monday, 2 Tuesday, 3 Wednesday, 4 Thursday, 5 Friday, 6 Saturday, 7 Sunday)
  13.   rtc.setTime(17, 01, 0);    // Idő beállítás: (óra, perc, másodperc)
  14.   rtc.setDate(21, 8, 2020);  // Dátum beállítás: (nap, hónap, év)
  15.   }
  16.  
  17. void loop()
  18.   {
  19.   lcd.setCursor(0,0);
  20.   //lcd.print("Time:  ");
  21.   lcd.print(rtc.getTimeStr());
  22.  
  23.   lcd.setCursor(9,0);
  24.   lcd.print(rtc.getTemp());
  25.   lcd.print("\xDF" "C");
  26.   //lcd.print((char)223);
  27.   //lcd.println("C");
  28.  
  29.   lcd.setCursor(0,1);
  30.   lcd.print("Date: ");
  31.   lcd.print(rtc.getDateStr(FORMAT_LONG, FORMAT_BIGENDIAN, '.'));
  32.  
  33.   delay(1000);
  34.   }
(#) vargham válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
Például. De inkább írd meg úgy a szoftvert, hogy állítható legyen az idő nyomógombokkal. Kicsit fapados, hogy program fordítással és feltöltséssel lehet beállítani.
(#) Kari55 válasza vargham hozzászólására (») Dec 25, 2021 /
 
Sajnos programoznnnni nem tudok.
(#) Josi777 válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
Az általad beírt kódban a 14. és 15. sort így módosítsd, értelem szerűen az akkori dátummal és időponttal:
  1. //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //set clock as computer clock
  2. rtc.adjust(DateTime(2020, 7, 12, 10, 57, 00));

Majd ezt töltsd fel az Arduino lapkára. Miután elindult az óra, akkor ismét módosítsd a programkódot erre:
  1. //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //set clock as computer clock
  2. //rtc.adjust(DateTime(2020, 7, 12, 10, 57, 00));

Majd ismét töltsd fel. Így az RTC-ben tárolt időpontot nem fogod felülírni minden egyes bekapcsolásnál.
(#) Kari55 válasza Josi777 hozzászólására (») Dec 25, 2021 /
 
Csak ezt a beállítást használom,
  1. rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //set clock as computer clock

beállítás után kikommentelem.
A másik sor mindíg kommentelve van.
A hozzászólás módosítva: Dec 25, 2021
(#) Csokiskifli hozzászólása Dec 25, 2021 /
 
Sziasztok!

Van egy Arduino UNO R3 .Tudnátok segíteni abban, hogy ha összekötöm az arduinot a pc-vel akkor nem jeleníti meg az arduino IDE programban az arduino alaplapot a portok listájában. Mi lehet a gond? hogy tudom megoldani? Eredeti az arduino alaplap

Köszönöm
(#) Josi777 válasza Kari55 hozzászólására (») Dec 25, 2021 /
 
Mindegy, hogy melyiket használod, az a lényeg, hogy miután feltöltötted a programot úgy, hogy nem volt kikommentelve, töltsd rá ismét, de már úgy, hogy ki van kommentelve!
Azért, mert az első feltöltéskor, pontosabban, amikor elindul a program, az rtc.adjust() beállítja az RTC-t. De ha ez benne marad, akkor az Arduino minden egyes újraindításakor az C fordító által az akkori időpontot és dátumot fordítja bele abba a file-ba, ami beleírsz az Arduino lapkába.
(#) Josi777 válasza Csokiskifli hozzászólására (») Dec 25, 2021 /
 
Az Arduino IDE alatt, az Eszközök -> Port után elvileg meg kéne jelennie annak a portnak a száma, amin az Arduino alaplapot érzékeli. Ha nem jelenik meg, akkor leggyakoribb hiba a rossz minőségű USB kábel, valamint lehet még driver hiba is, főleg, ha nem WIN10 alatt használod (azt nem írtad, hogy a PC-n milyen oprendszer van). Van, amikor a PC egy másik USB csatlakozóján működik. Amúgy ha rádugod az USB-re, akkor hallatszik a Windows rendszerhangja?
(#) tbarath válasza Csokiskifli hozzászólására (») Dec 25, 2021 /
 
Ha nem eredeti az Uno, akkor olvasd el a topic tetején található szöveget!
(#) Kari55 válasza Josi777 hozzászólására (») Dec 26, 2021 /
 
Köszönöm, így tettem.
(#) szitko hozzászólása Dec 26, 2021 /
 
Sziasztok.
Atmega2560-al szeretnék 10 kapcsolót (relét) figyelni megszakításból, de az adatlap szerint csak 6 láb képes erre.
Külső eszköz nélkül, hogy lehetne ezt megoldani?
(#) zaza99 hozzászólása Dec 26, 2021 /
 
Sziasztok!
Kellemes Ünnepeket Nektek először is!

Megépítettem az alábbi kapcsolást, de DS1307 helyett csak DS1302-es RTC-m van át lehet írni a kódot hozzá?
Tudnátok segíteni?

  1. int digit1 = 11; //PWM Display pin 12 (digit1 is common anonds A1 from right side)
  2. int digit2 = 10; //PWM Display pin 9 (digit2 is  common A2)
  3. int digit3 = 9; //PWM Display pin 8 (digit3 is common anods A3)
  4. int digit4 = 6; //PWM Display pin 6 (digit4 is common anods, from left side)
  5. int segA = 2; //Display pin 11
  6. int segB = 3; //Display pin 7
  7. int segC = 4; //Display pin 4
  8. int segD = 5; //Display pin 2
  9. int segE = 12; //Display pin 1
  10. int segF = 7; //Display pin 10
  11. int segG = 8; //Display pin 5
  12. int segDP = 13; // Display pin 3
  13. int pin = 1;
  14. #include <Wire.h>
  15. #include "RTClib.h"
  16. RTC_DS1307 RTC;
  17. byte SW0 = A0;
  18. byte SW1 = A1;
  19. byte SW2 = A2;
  20.  
  21. // use for hexa in zecimal conversion
  22. int zh, uh, ore;
  23. int zm, um, miniti;
  24.  
  25. void setup() {
  26.  
  27.  //  Serial.begin(57600);
  28.   Wire.begin();
  29.   RTC.begin();
  30. // RTC.adjust(DateTime(__DATE__, __TIME__));
  31. // if you need set clock... just remove // from line above this
  32.  
  33. // part code for flashing LED
  34. Wire.beginTransmission(0x68);
  35. Wire.write(0x07); // move pointer to SQW address
  36. // Wire.write(0x00); // turns the SQW pin off
  37.  Wire.write(0x10); // sends 0x10 (hex) 00010000 (binary) to control register - turns on square wave at 1Hz
  38. // Wire.write(0x13); // sends 0x13 (hex) 00010011 (binary) 32kHz
  39.  
  40. Wire.endTransmission();
  41.  
  42.   if (! RTC.isrunning()) {
  43.     Serial.println("RTC is NOT running!");
  44.     // following line sets the RTC to the date & time this sketch was compiled
  45.     RTC.adjust(DateTime(__DATE__, __TIME__));
  46.   }
  47.  
  48.  
  49. // dht.begin();
  50.  
  51.   pinMode(segA, OUTPUT);
  52.   pinMode(segB, OUTPUT);
  53.   pinMode(segC, OUTPUT);
  54.   pinMode(segD, OUTPUT);
  55.   pinMode(segE, OUTPUT);
  56.   pinMode(segF, OUTPUT);
  57.   pinMode(segG, OUTPUT);
  58.   pinMode(segDP, OUTPUT);
  59.   pinMode(pin, OUTPUT);
  60.  
  61.   pinMode(digit1, OUTPUT);
  62.   pinMode(digit2, OUTPUT);
  63.   pinMode(digit3, OUTPUT);
  64.   pinMode(digit4, OUTPUT);
  65.  
  66. //  pinMode(13, OUTPUT);
  67.  
  68. // Serial.begin(9600);
  69.  //Serial.println("test for niq_ro");
  70.  
  71.  pinMode(SW0, INPUT);  // for this use a slide switch
  72.   pinMode(SW1, INPUT);  // N.O. push button switch
  73.   pinMode(SW2, INPUT);  // N.O. push button switch
  74.  
  75.   digitalWrite(SW0, HIGH); // pull-ups on
  76.   digitalWrite(SW1, HIGH);
  77.   digitalWrite(SW2, HIGH);
  78.  
  79.  
  80.  
  81. }
  82.  
  83. void loop() {
  84.  
  85.   DateTime now = RTC.now();
  86.   int timp = now.hour()*100+now.minute();
  87. //   int timp = (now.minute(), DEC);
  88. //   displayNumber(12); // this is number to diplay
  89. //   int timp = 1234;
  90. // Serial.print(now.hour(), DEC);
  91.  // Serial.print(":");
  92.  // Serial.print(now.minute(), DEC);
  93.  // Serial.print(" -> ");
  94.  // Serial.print(timp);
  95.  // Serial.println(" !");
  96.  
  97. // display parts  
  98.    for(int i = 250 ; i >0  ; i--) {
  99.      if (timp >= 1000) displayNumber01(timp);
  100.      else displayNumber02(timp);
  101.    }
  102.  
  103.    for(int i = 250 ; i >0  ; i--) {
  104.      if (timp >= 1000) displayNumber03(timp);
  105.      else displayNumber04(timp);
  106.    }
  107.  
  108.   if (!(digitalRead(SW0))) set_time(); // hold the switch to set time
  109.   //blinking
  110.  
  111. }
  112.  
  113.  
  114. void set_time()   {
  115.   byte minutes1 = 0;
  116.   byte hours1 = 0;
  117.   byte minutes = 0;
  118.   byte hours = 0;
  119.  
  120.   while (!digitalRead(SW0))  // set time switch must be released to exit
  121.   {
  122.     minutes1=minutes;
  123.     hours1=hours;
  124.    
  125.      
  126.     while (!digitalRead(SW1)) // set minutes
  127.     {
  128.      minutes++;  
  129.    // converting hexa in zecimal:
  130.     zh = hours / 16;
  131.     uh = hours - 16 * zh ;
  132.     ore = 10 * zh + uh;
  133.     zm = minutes / 16;
  134.     um = minutes - 16 * zm ;
  135.     miniti = 10 * zm + um;
  136.    
  137.      for(int i = 20 ; i >0  ; i--) {
  138.      displayNumber01(ore*100+miniti);
  139.      }
  140.  
  141.      
  142.       if ((minutes & 0x0f) > 9) minutes = minutes + 6;
  143.       if (minutes > 0x59) minutes = 0;
  144.     //  Serial.print("Minutes = ");
  145.       if (minutes >= 9) Serial.print("0");
  146.     //  Serial.println(minutes, HEX);
  147.     delay(150);    
  148.     }
  149.  
  150.     while (!digitalRead(SW2)) // set hours
  151.     {
  152.      hours++;          
  153.      
  154.    // converting hexa in zecimal:
  155.     zh = hours / 16;
  156.     uh = hours - 16 * zh ;
  157.     ore = 10 * zh + uh;
  158.     zm = minutes / 16;
  159.     um = minutes - 16 * zm ;
  160.     miniti = 10 * zm + um;
  161.    
  162.      for(int i = 20 ; i >0  ; i--) {
  163.      displayNumber01(ore*100+miniti);
  164.      }
  165.    
  166.      
  167.       if ((hours & 0x0f) > 9) hours =  hours + 6;
  168.       if (hours > 0x23) hours = 0;
  169.   //    Serial.print("Hours = ");
  170.       if (hours <= 9) Serial.print("0");
  171.       Serial.println(hours, HEX);
  172.     delay(150);
  173.     }
  174.  
  175.     Wire.beginTransmission(0x68); // activate DS1307
  176.     Wire.write(0); // where to begin
  177.     Wire.write(0x00);          //seconds
  178.     Wire.write(minutes);          //minutes
  179.     Wire.write(0x80 | hours);    //hours (24hr time)
  180.     Wire.write(0x06);  // Day 01-07
  181.     Wire.write(0x01);  // Date 0-31
  182.     Wire.write(0x05);  // month 0-12
  183.     Wire.write(0x09);  // Year 00-99
  184.     Wire.write(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7.
  185.     Wire.endTransmission();
  186.  
  187.     // converting hexa in zecimal:
  188.     zh = hours / 16;
  189.     uh = hours - 16 * zh ;
  190.     ore = 10 * zh + uh;
  191.     zm = minutes / 16;
  192.     um = minutes - 16 * zm ;
  193.     miniti = 10 * zm + um;
  194.    
  195.      for(int i = 20 ; i >0  ; i--) {
  196.      displayNumber01(ore*100+miniti);
  197.      }
  198.  //  delay(150);
  199.    
  200.   }
  201.  
  202. }
  203.  
  204.  
  205.  
  206. void displayNumber01(int toDisplay) {
  207. #define DISPLAY_BRIGHTNESS  500
  208.  
  209. #define DIGIT_ON  HIGH
  210. #define DIGIT_OFF  LOW
  211.  
  212.   for(int digit = 4 ; digit > 0 ; digit--) {
  213.  
  214.     //Turn on a digit for a short amount of time
  215.     switch(digit) {
  216.     case 1:
  217.      digitalWrite(digit1, DIGIT_ON);
  218.      digitalWrite(segDP, HIGH);
  219.       break;
  220.    case 2:
  221.       digitalWrite(digit2, DIGIT_ON);
  222.       digitalWrite(segDP, LOW);
  223.       break;
  224.     case 3:
  225.       digitalWrite(digit3, DIGIT_ON);
  226.       digitalWrite(segDP, HIGH);
  227.       break;
  228.     case 4:
  229.       digitalWrite(digit4, DIGIT_ON);
  230.       digitalWrite(segDP, HIGH);
  231.       break;
  232.     }
  233.     lightNumber(toDisplay % 10);
  234.     toDisplay /= 10;
  235.     delayMicroseconds(DISPLAY_BRIGHTNESS);
  236.  
  237.      //Turn off all segments
  238.     lightNumber(10);
  239.  
  240.     //Turn off all digits
  241.     digitalWrite(digit1, DIGIT_OFF);
  242.     digitalWrite(digit2, DIGIT_OFF);
  243.     digitalWrite(digit3, DIGIT_OFF);
  244.     digitalWrite(digit4, DIGIT_OFF);
  245. }
  246. }
  247.  
  248. void displayNumber02(int toDisplay) {
  249. #define DISPLAY_BRIGHTNESS  500
  250.  
  251. #define DIGIT_ON  HIGH
  252. #define DIGIT_OFF  LOW
  253.  
  254.   for(int digit = 4 ; digit > 0 ; digit--) {
  255.  
  256.     //Turn on a digit for a short amount of time
  257.     switch(digit) {
  258.     case 1:
  259.      lightNumber(10);
  260.      digitalWrite(segDP, HIGH);
  261.      break;
  262.    case 2:
  263.       digitalWrite(digit2, DIGIT_ON);
  264.       digitalWrite(segDP, LOW);
  265.       break;
  266.     case 3:
  267.       digitalWrite(digit3, DIGIT_ON);
  268.       digitalWrite(segDP, HIGH);
  269.       break;
  270.     case 4:
  271.       digitalWrite(digit4, DIGIT_ON);
  272.       digitalWrite(segDP, HIGH);
  273.       break;
  274.     }
  275.     lightNumber(toDisplay % 10);
  276.     toDisplay /= 10;
  277.     delayMicroseconds(DISPLAY_BRIGHTNESS);
  278.  
  279.      //Turn off all segments
  280.     lightNumber(10);
  281.  
  282.     //Turn off all digits
  283.     digitalWrite(digit1, DIGIT_OFF);
  284.     digitalWrite(digit2, DIGIT_OFF);
  285.     digitalWrite(digit3, DIGIT_OFF);
  286.     digitalWrite(digit4, DIGIT_OFF);
  287. }
  288. }
  289.  
  290. void displayNumber03(int toDisplay) {
  291. #define DISPLAY_BRIGHTNESS  500
  292.  
  293. #define DIGIT_ON  HIGH
  294. #define DIGIT_OFF  LOW
  295.  
  296.   for(int digit = 4 ; digit > 0 ; digit--) {
  297.  
  298.     //Turn on a digit for a short amount of time
  299.     switch(digit) {
  300.     case 1:
  301.      digitalWrite(digit1, DIGIT_ON);
  302.      digitalWrite(segDP, HIGH);
  303.       break;
  304.    case 2:
  305.       digitalWrite(digit2, DIGIT_ON);
  306.       digitalWrite(segDP, HIGH);
  307.       break;
  308.     case 3:
  309.       digitalWrite(digit3, DIGIT_ON);
  310.       digitalWrite(segDP, HIGH);
  311.       break;
  312.     case 4:
  313.       digitalWrite(digit4, DIGIT_ON);
  314.       digitalWrite(segDP, HIGH);
  315.       break;
  316.     }
  317.     lightNumber(toDisplay % 10);
  318.     toDisplay /= 10;
  319.     delayMicroseconds(DISPLAY_BRIGHTNESS);
  320.  
  321.      //Turn off all segments
  322.     lightNumber(10);
  323.  
  324.     //Turn off all digits
  325.     digitalWrite(digit1, DIGIT_OFF);
  326.     digitalWrite(digit2, DIGIT_OFF);
  327.     digitalWrite(digit3, DIGIT_OFF);
  328.     digitalWrite(digit4, DIGIT_OFF);
  329. }
  330. }
  331.  
  332. void displayNumber04(int toDisplay) {
  333. #define DISPLAY_BRIGHTNESS  500
  334.  
  335. #define DIGIT_ON  HIGH
  336. #define DIGIT_OFF  LOW
  337.  
  338.   for(int digit = 4 ; digit > 0 ; digit--) {
  339.  
  340.     //Turn on a digit for a short amount of time
  341.     switch(digit) {
  342.     case 1:
  343.      lightNumber(10);
  344.      digitalWrite(segDP, HIGH);
  345.      break;
  346.    case 2:
  347.       digitalWrite(digit2, DIGIT_ON);
  348.       digitalWrite(segDP, HIGH);
  349.       break;
  350.     case 3:
  351.       digitalWrite(digit3, DIGIT_ON);
  352.       digitalWrite(segDP, HIGH);
  353.       break;
  354.     case 4:
  355.       digitalWrite(digit4, DIGIT_ON);
  356.       digitalWrite(segDP, HIGH);
  357.       break;
  358.     }
  359.     lightNumber(toDisplay % 10);
  360.     toDisplay /= 10;
  361.     delayMicroseconds(DISPLAY_BRIGHTNESS);
  362.  
  363.      //Turn off all segments
  364.     lightNumber(10);
  365.  
  366.     //Turn off all digits
  367.     digitalWrite(digit1, DIGIT_OFF);
  368.     digitalWrite(digit2, DIGIT_OFF);
  369.     digitalWrite(digit3, DIGIT_OFF);
  370.     digitalWrite(digit4, DIGIT_OFF);
  371. }
  372. }
  373.  
  374.  
  375. //Given a number, turns on those segments
  376. //If number == 10, then turn off number
  377. void lightNumber(int numberToDisplay) {
  378.  
  379. #define SEGMENT_ON  LOW
  380. #define SEGMENT_OFF HIGH
  381.  
  382.   switch (numberToDisplay){
  383.  
  384.   case 0:
  385.     digitalWrite(segA, SEGMENT_ON);
  386.     digitalWrite(segB, SEGMENT_ON);
  387.     digitalWrite(segC, SEGMENT_ON);
  388.     digitalWrite(segD, SEGMENT_ON);
  389.     digitalWrite(segE, SEGMENT_ON);
  390.     digitalWrite(segF, SEGMENT_ON);
  391.     digitalWrite(segG, SEGMENT_OFF);
  392.     break;
  393.  
  394.   case 1:
  395.     digitalWrite(segA, SEGMENT_OFF);
  396.     digitalWrite(segB, SEGMENT_ON);
  397.     digitalWrite(segC, SEGMENT_ON);
  398.     digitalWrite(segD, SEGMENT_OFF);
  399.     digitalWrite(segE, SEGMENT_OFF);
  400.     digitalWrite(segF, SEGMENT_OFF);
  401.     digitalWrite(segG, SEGMENT_OFF);
  402.     break;
  403.  
  404.   case 2:
  405.     digitalWrite(segA, SEGMENT_ON);
  406.     digitalWrite(segB, SEGMENT_ON);
  407.     digitalWrite(segC, SEGMENT_OFF);
  408.     digitalWrite(segD, SEGMENT_ON);
  409.     digitalWrite(segE, SEGMENT_ON);
  410.     digitalWrite(segF, SEGMENT_OFF);
  411.     digitalWrite(segG, SEGMENT_ON);
  412.     break;
  413.  
  414.   case 3:
  415.     digitalWrite(segA, SEGMENT_ON);
  416.     digitalWrite(segB, SEGMENT_ON);
  417.     digitalWrite(segC, SEGMENT_ON);
  418.     digitalWrite(segD, SEGMENT_ON);
  419.     digitalWrite(segE, SEGMENT_OFF);
  420.     digitalWrite(segF, SEGMENT_OFF);
  421.     digitalWrite(segG, SEGMENT_ON);
  422.     break;
  423.  
  424.   case 4:
  425.     digitalWrite(segA, SEGMENT_OFF);
  426.     digitalWrite(segB, SEGMENT_ON);
  427.     digitalWrite(segC, SEGMENT_ON);
  428.     digitalWrite(segD, SEGMENT_OFF);
  429.     digitalWrite(segE, SEGMENT_OFF);
  430.     digitalWrite(segF, SEGMENT_ON);
  431.     digitalWrite(segG, SEGMENT_ON);
  432.     break;
  433.  
  434.   case 5:
  435.     digitalWrite(segA, SEGMENT_ON);
  436.     digitalWrite(segB, SEGMENT_OFF);
  437.     digitalWrite(segC, SEGMENT_ON);
  438.     digitalWrite(segD, SEGMENT_ON);
  439.     digitalWrite(segE, SEGMENT_OFF);
  440.     digitalWrite(segF, SEGMENT_ON);
  441.     digitalWrite(segG, SEGMENT_ON);
  442.     break;
  443.  
  444.   case 6:
  445.     digitalWrite(segA, SEGMENT_ON);
  446.     digitalWrite(segB, SEGMENT_OFF);
  447.     digitalWrite(segC, SEGMENT_ON);
  448.     digitalWrite(segD, SEGMENT_ON);
  449.     digitalWrite(segE, SEGMENT_ON);
  450.     digitalWrite(segF, SEGMENT_ON);
  451.     digitalWrite(segG, SEGMENT_ON);
  452.     break;
  453.  
  454.   case 7:
  455.     digitalWrite(segA, SEGMENT_ON);
  456.     digitalWrite(segB, SEGMENT_ON);
  457.     digitalWrite(segC, SEGMENT_ON);
  458.     digitalWrite(segD, SEGMENT_OFF);
  459.     digitalWrite(segE, SEGMENT_OFF);
  460.     digitalWrite(segF, SEGMENT_OFF);
  461.     digitalWrite(segG, SEGMENT_OFF);
  462.     break;
  463.  
  464.   case 8:
  465.     digitalWrite(segA, SEGMENT_ON);
  466.     digitalWrite(segB, SEGMENT_ON);
  467.     digitalWrite(segC, SEGMENT_ON);
  468.     digitalWrite(segD, SEGMENT_ON);
  469.     digitalWrite(segE, SEGMENT_ON);
  470.     digitalWrite(segF, SEGMENT_ON);
  471.     digitalWrite(segG, SEGMENT_ON);
  472.     break;
  473.  
  474.   case 9:
  475.     digitalWrite(segA, SEGMENT_ON);
  476.     digitalWrite(segB, SEGMENT_ON);
  477.     digitalWrite(segC, SEGMENT_ON);
  478.     digitalWrite(segD, SEGMENT_ON);
  479.     digitalWrite(segE, SEGMENT_OFF);
  480.     digitalWrite(segF, SEGMENT_ON);
  481.     digitalWrite(segG, SEGMENT_ON);
  482.     break;
  483.  
  484.   // all segment are ON
  485.   case 10:
  486.     digitalWrite(segA, SEGMENT_OFF);
  487.     digitalWrite(segB, SEGMENT_OFF);
  488.     digitalWrite(segC, SEGMENT_OFF);
  489.     digitalWrite(segD, SEGMENT_OFF);
  490.     digitalWrite(segE, SEGMENT_OFF);
  491.     digitalWrite(segF, SEGMENT_OFF);
  492.     digitalWrite(segG, SEGMENT_OFF);
  493.     break;
  494.  
  495.   }
  496. }

clock.jpg
    
(#) mateatek válasza szitko hozzászólására (») Dec 26, 2021 / 1
 
Pin Change Interrupt-ot 24 lábra állíthatsz be.
(#) vargham válasza mateatek hozzászólására (») Dec 26, 2021 /
 
Pontosan. Csak arra kell figyelni, hogy ez mind egy ISR-be fut be. Tehát el kell tárolni a bemenetek állapotát. Az ISR-ben pedig lekérdezni az aktuálisat, és összehasonlítani az eltárolttal, hogy kiderüljön, melyik megváltozása okozta a megszakítást.
(#) szitko válasza mateatek hozzászólására (») Dec 26, 2021 /
 
Köszi.
Megtaláltam PCICR regiszter, port B C D.
Nem láttam a fától az erdőt.
Következő: »»   717 / 845
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