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   540 / 838
(#) suszitibi válasza kapu48 hozzászólására (») Jún 14, 2019 /
 
Most automatán ismételgeti a dúr akkordot. Átmásoltam a tiédet. Ha lenyomom mindkét gombot, akkor elhallgat.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 14, 2019 /
 
Szerintem a MIDI program ilyen, ismétel amig nem állitod le?

Variáld a feltétel vizsgálatokat.
(#) proba válasza morgo hozzászólására (») Jún 14, 2019 /
 
Hát használd. A benne lévő kvarc sem műszer pontosságú, régen volt olyan javaslat, és működött is, hogy tápfeszültség változtatással elhangolták. Amúgy azokban is van biztos pontos. Csak az a kérdés milyen pontos műszert akarsz, ha nem órához / egyéb nagy pontosságú helyre kell kb elég lehet. Amit a kvarcokról gondolok, az szerint a minél nagyobb, nem pontosabb. Legjobbak a 32Khz környékiek. Ebből csinálsz egy időalapot, az arduinóval meg számoltatsz, az alaplap órajele meg lehet olyan amilyet akarsz, a pontossága nem számít, csak a kijelzést, meg a gombokat intézi. Viszont ha ebbe gondolkodsz, komolyan bele kell ásnod magad a számlálók hardveres kialakításába.
(#) suszitibi válasza kapu48 hozzászólására (») Jún 14, 2019 /
 
Eddig működött rendesen, egy nyomó gombbal. Adott gombhoz hozta a kívánt akkordot. Most u.ezt kellene tegye, csak két gombkombináció megnyomásával. Valami kizáró függvény kellene, ami csak akkor enged bármit, ha a kívánt két gomb van lenyomva.
(#) morgo válasza proba hozzászólására (») Jún 15, 2019 /
 
Ez akár járható út is lehet. Úgyis van a Mega dobozában DS3231, az meg tudná biztosítani az órajelet. Valamiért ez eddig nem jött képbe. Köszi az ötletet!
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Összehoztam neked, valami gomb beolvasást próbára!
Telepíted:
// Include the Bounce2 library found here :
Bővebben: Link
Ez lekezeli a gombok prrel mentesítését, és beolvasását.
Nem tudom, mit használsz? Én az UNO Pin számozását adtam meg!
  1. #include <MIDI.h>
  2.  
  3. // Include the Bounce2 library found here :
  4. #include <Bounce2.h>
  5.  
  6. MIDI_CREATE_DEFAULT_INSTANCE();
  7.  
  8. // a 12 hang és 4 húr nyomogombjai:
  9. //UNO pins: https://www.flickr.com/photos/28521811@N04/8520970405
  10. /*
  11. uint8_t As    = 28;    //A5;
  12. uint8_t Es    = 1;
  13. uint8_t B     = 3;
  14. uint8_t F     = 4;
  15. uint8_t C     = 5;
  16. uint8_t G     = 6;
  17. uint8_t D     = 7;
  18. uint8_t A     = 8;
  19. uint8_t E     = 9;
  20. uint8_t H     = 10;
  21. uint8_t Fis   = 11;
  22. uint8_t Cis   = 12;
  23. uint8_t dur   = 23;    //A0;
  24. uint8_t moll  = 24;    //A1;
  25. uint8_t sept  = 25;    //A2;
  26. uint8_t szuk  = 26;    //A3;
  27. */
  28. #define LED_PIN 13
  29.  
  30. enum billentyuk {
  31.   // nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
  32.  As = 0,
  33.  Es,
  34.  B,
  35.  F,
  36.  C,
  37.  G,
  38.  D,
  39.  A,
  40.  E,
  41.  H,
  42.  Fis,
  43.  Cis,
  44.  Dur,
  45.  Moll,
  46.  Sept,
  47.  Szuk
  48.  };
  49. #define NUM_BUTTONS 16
  50. // UNO Board Butons Pins értékek
  51. const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
  52.  
  53. int ledState = LOW;
  54. Bounce * buttons = new Bounce[NUM_BUTTONS];
  55.  
  56. void setup()
  57. {
  58.     MIDI.begin(1);
  59.  
  60.   for (int i = 0; i < NUM_BUTTONS; i++) {
  61.     buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP  );       //setup the bounce instance for the current button
  62.     buttons[i].interval(25);              // interval in ms
  63.   }
  64.  
  65.    // Setup the LED :
  66.   pinMode(LED_PIN, OUTPUT);
  67.   digitalWrite(LED_PIN, ledState);
  68.  
  69. }
  70.  
  71. void loop()
  72. {
  73.     // C dur
  74.    
  75.          // lenyomtak a C-t és a dur-t
  76.     buttons[C].update();
  77.     buttons[Dur].update();
  78.     /**
  79.     @brief Returns true if pin signal transitions from low to high.
  80.     */
  81.     if( buttons[C].rose() && buttons[Dur].rose())         // lenyomtak a C-t és a dur-t
  82.     {  
  83.        
  84.         MIDI.sendNoteOn( 48, 100, 1 );         // kikuldom a B-durnak megfelelo noteOn-okat
  85.         MIDI.sendNoteOn( 52, 100, 1 );
  86.         MIDI.sendNoteOn( 55, 100, 1 );
  87.                
  88.         do{
  89.             buttons[C].update();
  90.             buttons[Dur].update();  
  91.          /**
  92.             @brief Returns true if pin signal transitions from high to low.
  93.             Itt bármelyiket felengedik? Tovább megy.
  94.          */        
  95.         }while( buttons[C].fell()==LOW && buttons[Dur].fell()==LOW);  // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
  96.        
  97.        
  98.         // itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
  99.  
  100.         MIDI.sendNoteOff( 48, 0, 1 );        
  101.         MIDI.sendNoteOff( 52, 0, 1 );
  102.         MIDI.sendNoteOff( 55, 0, 1 );      
  103.                    
  104.     }
  105.  
  106.     // F dur
  107.     buttons[F].update();
  108.     buttons[Dur].update();  
  109.     // Ha mindkettőt megnyomták?
  110.     if( buttons[F].rose() && buttons[Dur].rose())        
  111.     {  
  112.         MIDI.sendNoteOn( 41, 100, 1 );        
  113.         MIDI.sendNoteOn( 45, 100, 1 );
  114.         MIDI.sendNoteOn( 48, 100, 1 );
  115.        
  116.        do{
  117.             buttons[F].update();
  118.             buttons[Dur].update();  
  119.          /**
  120.             @brief Returns true if pin signal transitions from high to low.
  121.             Itt bármelyiket felengedik? Tovább megy.
  122.          */        
  123.         }while( buttons[F].fell()==LOW && buttons[Dur].fell()==LOW);  // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
  124.  
  125.         MIDI.sendNoteOff( 41, 0, 1 );        
  126.         MIDI.sendNoteOff( 45, 0, 1 );
  127.         MIDI.sendNoteOff( 48, 0, 1 );      
  128.                    
  129.     }
  130.  
  131. }  // loop


Remélem, boldogulsz vele?
Cserében kérem, hogy tájékoztass részletesen az eredményeidről!
A hozzászólás módosítva: Jún 15, 2019
(#) suszitibi válasza kapu48 hozzászólására (») Jún 15, 2019 /
 
Szia
Köszönöm, hogy ennyit segítesz.
Elkezdem az elejétől.
Az első elektronika, ami alapján tovább akartam menni, egy lábbal vezérelhető, kíséretautomata vezérlő volt. Ott úgy nézett ki a dolog, hogy 13 akkord hangjai voltak beírva és az adott gomb alacsony szintre billentésével, megszólalt a szintetizátoron, az adott akkord.
Ott azt feltételezi, hogy alaphelyzetben, minden bemenet magas szinten van. Minden akkordnak külön van utasítás, ha mégsem magas szinten van, akkor küldje az akkord kódjait.
Lehet, hogy egyszerűen meg kellett volna fordítani a szinteket és hozzá igazítani a kívánt logikai műveletet?
Amit most szeretnék: egy gitár formájú kütyü, aminél a nyak részen lenne 12 gomb az alaphangoknak. Ha valamelyik alacsony szintre kerül, még nem történik semmi.
A húrok pengetős részének helyén, lenne négy gomb (érintő szenzor). Ezek lennének az akkord bemenetek. Ha lenyomom pl. a C gombot a nyakon és megérintem a dúr érzékelőt, akkor kiküldené a C dúr akkord kódjait. 12 hang x 4 akkord = 48 variáció.
Ehhez szerettem volna átalakítani az első kapcsolást, ami egy gombos módban, nagyon jól működik.
Prell mentesítésre igazán nincs szükség, mert az érintő szenzorban és a Hall szenzorokban is van.
Megpróbálom, amit küldtél.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Én azt feltételeztem, hogy mezei gombokkal vezérled, és a prrelezés miatt nem boldogulsz!
De így ennek a szűrése tényleg csak időpocsékolás!

Idézet:
„Ott azt feltételezi, hogy alaphelyzetben, minden bemenet magas szinten van. Minden akkordnak külön van utasítás, ha mégsem magas szinten van, akkor küldje az akkord kódjait.

Ezt is csak most közlöd! A példaprogramodban pont fordítva volt alkalmazva a szintek figyelése!
A hozzászólás módosítva: Jún 15, 2019
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Akkor az egész feltétel kezelést meg kellene cserélni!
Az if(ekben levők mennek a while(be)), a while(az ifbe).
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Megcsináltam a fent irt javításokat:

  1. #include <MIDI.h>
  2.  
  3. // Include the Bounce2 library found here :
  4. #include <Bounce2.h>
  5.  
  6. MIDI_CREATE_DEFAULT_INSTANCE();
  7.  
  8. // a 12 hang és 4 húr nyomogombjai:
  9. //UNO pins: https://www.flickr.com/photos/28521811@N04/8520970405
  10. /*
  11. uint8_t As    = 28;    //A5;
  12. uint8_t Es    = 1;
  13. uint8_t B     = 3;
  14. uint8_t F     = 4;
  15. uint8_t C     = 5;
  16. uint8_t G     = 6;
  17. uint8_t D     = 7;
  18. uint8_t A     = 8;
  19. uint8_t E     = 9;
  20. uint8_t H     = 10;
  21. uint8_t Fis   = 11;
  22. uint8_t Cis   = 12;
  23. uint8_t dur   = 23;    //A0;
  24. uint8_t moll  = 24;    //A1;
  25. uint8_t sept  = 25;    //A2;
  26. uint8_t szuk  = 26;    //A3;
  27. */
  28. #define LED_PIN 13
  29.  
  30. enum billentyuk {
  31.   // nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
  32.  As = 0,
  33.  Es,
  34.  B,
  35.  F,
  36.  C,
  37.  G,
  38.  D,
  39.  A,
  40.  E,
  41.  H,
  42.  Fis,
  43.  Cis,
  44.  Dur,
  45.  Moll,
  46.  Sept,
  47.  Szuk
  48.  };
  49. #define NUM_BUTTONS 16
  50. // UNO Board Butons Pins értékek
  51. const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
  52.  
  53. int ledState = LOW;
  54. Bounce * buttons = new Bounce[NUM_BUTTONS];
  55.  
  56. void setup()
  57. {
  58.     MIDI.begin(1);
  59.  
  60.   for (int i = 0; i < NUM_BUTTONS; i++) {
  61.     buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP  );       //setup the bounce instance for the current button
  62.     buttons[i].interval(25);              // interval in ms
  63.   }
  64.  
  65.    // Setup the LED :
  66.   pinMode(LED_PIN, OUTPUT);
  67.   digitalWrite(LED_PIN, ledState);
  68.  
  69. }
  70.  
  71. void loop()
  72. {
  73.     // C dur
  74.    
  75.          // lenyomtak a C-t és a dur-t
  76.     buttons[C].update();
  77.     buttons[Dur].update();
  78.     /**
  79.     @brief Returns true if pin signal transitions from high to low.
  80.     */
  81.     if( buttons[C].fell()==LOW && buttons[Dur].fell()==LOW)         // lenyomtak a C-t és a dur-t
  82.     {  
  83.        
  84.         MIDI.sendNoteOn( 48, 100, 1 );         // kikuldom a B-durnak megfelelo noteOn-okat
  85.         MIDI.sendNoteOn( 52, 100, 1 );
  86.         MIDI.sendNoteOn( 55, 100, 1 );
  87.                
  88.         do{
  89.             buttons[C].update();
  90.             buttons[Dur].update();  
  91.          /**
  92.           * @brief Returns true if pin signal transitions from low to high.
  93.             Itt bármelyiket felengedik? Tovább megy.
  94.          */        
  95.         }while( buttons[C].rose() && buttons[Dur].rose());  // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
  96.        
  97.        
  98.         // itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
  99.  
  100.         MIDI.sendNoteOff( 48, 0, 1 );        
  101.         MIDI.sendNoteOff( 52, 0, 1 );
  102.         MIDI.sendNoteOff( 55, 0, 1 );      
  103.                    
  104.     }
  105.  
  106.     // F dur
  107.     buttons[F].update();
  108.     buttons[Dur].update();  
  109.     // Ha mindkettőt megnyomták?
  110.     // @brief Returns true if pin signal transitions from high to low.
  111.     if( buttons[F].fell()==LOW && buttons[Dur].fell()==LOW )        
  112.     {  
  113.         MIDI.sendNoteOn( 41, 100, 1 );        
  114.         MIDI.sendNoteOn( 45, 100, 1 );
  115.         MIDI.sendNoteOn( 48, 100, 1 );
  116.        
  117.        do{
  118.             buttons[F].update();
  119.             buttons[Dur].update();  
  120.          /**
  121.             * @brief Returns true if pin signal transitions from low to high.
  122.             Itt bármelyiket felengedik? Tovább megy.
  123.          */        
  124.         }while(buttons[F].rose() && buttons[Dur].rose());  // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
  125.  
  126.         MIDI.sendNoteOff( 41, 0, 1 );        
  127.         MIDI.sendNoteOff( 45, 0, 1 );
  128.         MIDI.sendNoteOff( 48, 0, 1 );      
  129.                    
  130.     }
  131.  
  132. }  // loop
(#) suszitibi válasza kapu48 hozzászólására (») Jún 15, 2019 /
 
Ezt a bounce témát letöltöttem, de nincs benne telepíthető fájl. Mit csináljak vele?
Library fájlt sem látok benne, amit be tudnék tenni az Arduino könyvtárba.

Azért nem mondtam a működést, mert én sem értem igazán. Egy barátom segített példakódokkal, tömbvázlatokkal, úgy született meg. Úgy látom, nem lett a legoptimálisabb. Igaz, amire lett írva, ahhoz tökéletes.
A kíséret vezérlőben, minden akkordot külön megvizsgál. Azt feltételezi, hogy alaphelyzetben, magas szinten van a bemenet. "if"
Aztán jön az "else", ha mégsem magas szint, vagyis alacsony, akkor kiküldi az akkordokat. Aztán figyeli, hogy mikor lesz újra magas szint, akkor küldi a note off-okat.
Itt szerintem nem kellene figyelni, hanem alapértelmezetté tenni, hogy mind magas szinten van. Ha valamelyik változna, akkor küldeni a note on-t, ha újra változik, akkor note off.
Még nagyon kezdő vagyok az egészben, bocs, ha hülyeségeket írok.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Csak simán bekel másolni a ’Arduino\libraries\ -be.
Megkeresed. Az arduino a Beállításoknál felül kiírja.

Nálam itt van: c:\Users\Kapu48\Documents\Arduino189\libraries\Bounce2\
Értelemszerűen nálad más nevek lesznek.


Ezt rohadtul túl bonyolítottad!
Minek else ág? Ha a főágat nem is használod.

Az én változatom mintha egyszerűbb és átláthatóbb lenne.

Nálam a fő ágban van, ami nálad az else-ben lenne.
Megvizsgáljuk az esedékes gombokat, ha teljesülnek a feltételek?
Végrehajtjuk az if-ben levőket.
Ha nem, akkor megyünk tovább a következő if ágra …
A hozzászólás módosítva: Jún 15, 2019
(#) kapu48 válasza kapu48 hozzászólására (») Jún 15, 2019 /
 
Így minden ágban csak az esedékes gombok neveit kel megváltoztatni.
Az if-ben és előtte a buttons[??].update();-ben
és a while-ben és előtte buttons[??].update();-ban.

Könnyen folytatni tudod a többi hang előállítását.

Ha akarod használni az egygombos vezérlést is, akkor értelemszerűen csak egy gomb feltételeit vizsgálod az if-ekben, és while-kben.(Bár szerintem ezen még agyalni kel!
A hozzászólás módosítva: Jún 15, 2019
(#) kapu48 válasza suszitibi hozzászólására (») Jún 15, 2019 /
 
Ha olyan jók a gombjaid, mint ahogyan mondod?

Akkor leveheted a várakozások beállítását a 63. sorban: 5ms késést már a füled sem vesz észre.
  1. buttons[i].interval(5);              // interval in 5 ms
(#) game4812 válasza Tasznka hozzászólására (») Jún 16, 2019 /
 
Szia!
Most volt időm foglalkozni vele újra, a belinkelt képen látható kóddal működik szépen. Végülis arról van szó, hogy felső állásban "0 = ON", középsőben "1 = ON", alsóban meg "2 = ON". A PC program pedig úgy veszi, mintha nyomva tartva lenne 1-1 gomb. De amikor váltok, előtte ki kell kapcsolni az előző állás gombját, a PC program logikája szerint ezt úgy lehet, hogy küldök még egy "ON" jelet az előző állásra.
A "first1" nem szép megoldás, csak amikor elindul a program, akkor még ugye nem kell kikapcsolni semmit. És a fenti logika miatt 2 "ON" jel futna be a programba, és borítja az egészet. Így meg felső állásban állnak a kapcsolók, amikor indítom a programot, tehát középre kapcsolva csak az "1 = ON"-t küldi ki elsőnek, onnantól meg megy minden, ahogy kell.
(#) suszitibi válasza kapu48 hozzászólására (») Jún 16, 2019 /
 
Szia
Na csak most jutottam ide. A könyvtár dolog OK. Feltöltöttem a programodat. Sajnos így sem jó, folyamatosan küldi a kódokat, gyorsan egymás után.

midi ox.jpg
    
(#) kapu48 válasza suszitibi hozzászólására (») Jún 16, 2019 /
 
Szia!
Közben én átgondoltam az egészet. És rájöttem, hogy nem jók a feltétel vizsgálatok!
  1. #include <MIDI.h>
  2.  
  3. // Include the Bounce2 library found here :
  4. #include <Bounce2.h>
  5.  
  6. MIDI_CREATE_DEFAULT_INSTANCE();
  7.  
  8. // a 12 hang és 4 húr nyomogombjai:
  9. //UNO pins: https://www.flickr.com/photos/28521811@N04/8520970405
  10. /*
  11. uint8_t As    = 28;    //A5;
  12. uint8_t Es    = 1;
  13. uint8_t B     = 3;
  14. uint8_t F     = 4;
  15. uint8_t C     = 5;
  16. uint8_t G     = 6;
  17. uint8_t D     = 7;
  18. uint8_t A     = 8;
  19. uint8_t E     = 9;
  20. uint8_t H     = 10;
  21. uint8_t Fis   = 11;
  22. uint8_t Cis   = 12;
  23. uint8_t dur   = 23;    //A0;
  24. uint8_t moll  = 24;    //A1;
  25. uint8_t sept  = 25;    //A2;
  26. uint8_t szuk  = 26;    //A3;
  27. */
  28. #define LED_PIN 13
  29.  
  30. enum billentyuk {
  31.   // nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
  32.  As = 0,
  33.  Es,
  34.  B,
  35.  F,
  36.  C,
  37.  G,
  38.  D,
  39.  A,
  40.  E,
  41.  H,
  42.  Fis,
  43.  Cis,
  44.  Dur,
  45.  Moll,
  46.  Sept,
  47.  Szuk
  48.  };
  49. #define NUM_BUTTONS 16
  50. // UNO Board Butons Pins értékek
  51. const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
  52.  
  53. int ledState = LOW;
  54. Bounce * buttons = new Bounce[NUM_BUTTONS];
  55.  
  56. void setup()
  57. {
  58.     MIDI.begin(1);
  59.  
  60.   for (int i = 0; i < NUM_BUTTONS; i++) {
  61.     buttons[i].attach( BUTTON_PINS[i] , INPUT_PULLUP  );       //setup the bounce instance for the current button
  62.     //buttons[i].interval(25);              // interval in 25ms
  63.     buttons[i].interval(5);              // interval in 5ms
  64.   }
  65.  
  66.    // Setup the LED :
  67.   pinMode(LED_PIN, OUTPUT);
  68.   digitalWrite(LED_PIN, ledState);
  69.  
  70. }
  71.  
  72. void loop()
  73. {
  74.     // C dur
  75.    
  76.          // lenyomtak a C-t és a dur-t
  77.     buttons[C].update();
  78.     buttons[Dur].update();
  79.     /**
  80.     @brief Returns true if pin signal transitions from high to low.
  81.     */
  82.     if( buttons[C].fell()==HIGH && buttons[Dur].fell()==HIGH)         // lenyomtak a C-t és a dur-t
  83.     {  
  84.        
  85.         MIDI.sendNoteOn( 48, 100, 1 );         // kikuldom a B-durnak megfelelo noteOn-okat
  86.         MIDI.sendNoteOn( 52, 100, 1 );
  87.         MIDI.sendNoteOn( 55, 100, 1 );
  88.                
  89.         do{
  90.             buttons[C].update();
  91.             buttons[Dur].update();  
  92.          /**
  93.           * @brief Returns true if pin signal transitions from low to high.
  94.             Itt bármelyiket felengedik? Tovább megy.
  95.          */        
  96.         }while( buttons[C].rose()==LOW && buttons[Dur].rose()==LOW);  // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
  97.        
  98.        
  99.         // itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
  100.  
  101.         MIDI.sendNoteOff( 48, 0, 1 );        
  102.         MIDI.sendNoteOff( 52, 0, 1 );
  103.         MIDI.sendNoteOff( 55, 0, 1 );      
  104.                    
  105.     }
  106.  
  107.     // F dur
  108.     buttons[F].update();
  109.     buttons[Dur].update();  
  110.     // Ha mindkettőt megnyomták?
  111.     // @brief Returns true if pin signal transitions from high to low.
  112.     if( buttons[F].fell()==HIGH && buttons[Dur].fell()==HIGH )        
  113.     {  
  114.         MIDI.sendNoteOn( 41, 100, 1 );        
  115.         MIDI.sendNoteOn( 45, 100, 1 );
  116.         MIDI.sendNoteOn( 48, 100, 1 );
  117.        
  118.        do{
  119.             buttons[F].update();
  120.             buttons[Dur].update();  
  121.          /**
  122.             * @brief Returns true if pin signal transitions from low to high.
  123.             Itt bármelyiket felengedik? Tovább megy.
  124.          */        
  125.         }while(buttons[F].rose()==LOW && buttons[Dur].rose()==LOW);  // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
  126.  
  127.         MIDI.sendNoteOff( 41, 0, 1 );        
  128.         MIDI.sendNoteOff( 45, 0, 1 );
  129.         MIDI.sendNoteOff( 48, 0, 1 );      
  130.                    
  131.     }
  132.  
  133. }  // loop

Itt az újabb javítás.
Még én sem használtam ezt a Bounce2 libet.
(#) suszitibi válasza kapu48 hozzászólására (») Jún 16, 2019 /
 
Most teljesen más adatokat, de most is küldi folyamatosan. Először nem csinált semmit. Megfordítottam a HIGH és LOW értékeket, így küldi a kódokat, folyamatosan.
Azt gondoltam, egyszerűbb lesz megcsinálni. Gondolkodtam félvezetőkkel kivitelezni, de eléggé megdrágítaná és rengeteg dióda, meg tranzisztor kellene hozzá.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 16, 2019 /
 
Akkor azt javaslom dobjuk ki a bounce könyvtárat!
És oldjuk meg hagyományos digitalRead-al.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 16, 2019 /
 
Talán most jó lesz!
Ki szedtem a Bouncet.

  1. #include <MIDI.h>
  2.  
  3.  
  4. MIDI_CREATE_DEFAULT_INSTANCE();
  5.  
  6. // a 12 hang és 4 húr nyomogombjai:
  7. //UNO pins: https://www.flickr.com/photos/28521811@N04/8520970405
  8. /*
  9. uint8_t As    = 28;    //A5;
  10. uint8_t Es    = 1;
  11. uint8_t B     = 3;
  12. uint8_t F     = 4;
  13. uint8_t C     = 5;
  14. uint8_t G     = 6;
  15. uint8_t D     = 7;
  16. uint8_t A     = 8;
  17. uint8_t E     = 9;
  18. uint8_t H     = 10;
  19. uint8_t Fis   = 11;
  20. uint8_t Cis   = 12;
  21. uint8_t dur   = 23;    //A0;
  22. uint8_t moll  = 24;    //A1;
  23. uint8_t sept  = 25;    //A2;
  24. uint8_t szuk  = 26;    //A3;
  25. */
  26. #define LED_PIN 13
  27.  
  28. enum billentyuk {
  29.   // nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
  30.  As = 0,
  31.  Es,
  32.  B,
  33.  F,
  34.  C,
  35.  G,
  36.  D,
  37.  A,
  38.  E,
  39.  H,
  40.  Fis,
  41.  Cis,
  42.  Dur,
  43.  Moll,
  44.  Sept,
  45.  Szuk
  46.  };
  47. #define NUM_BUTTONS 16
  48. // UNO Board Butons Pins értékek
  49. const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
  50.  
  51. int ledState = LOW;
  52.  
  53.  
  54. void setup()
  55. {
  56.     MIDI.begin(1);
  57.  
  58.   for (int i = 0; i < NUM_BUTTONS; i++) {
  59.     pinMode( BUTTON_PINS[i] , INPUT_PULLUP  );       //setup the bounce instance for the current button
  60.  
  61.   }
  62.  
  63.    // Setup the LED :
  64.   pinMode(LED_PIN, OUTPUT);
  65.   digitalWrite(LED_PIN, ledState);
  66.  
  67. }
  68.  
  69. void loop()
  70. {
  71.     // C dur
  72.    
  73.          // lenyomtak a C-t és a dur-t
  74.  
  75.     if( digitalRead(BUTTON_PINS[C])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH)         // lenyomtak a C-t és a dur-t
  76.     {  
  77.        
  78.         MIDI.sendNoteOn( 48, 100, 1 );         // kikuldom a B-durnak megfelelo noteOn-okat
  79.         MIDI.sendNoteOn( 52, 100, 1 );
  80.         MIDI.sendNoteOn( 55, 100, 1 );
  81.                
  82.         do{
  83.        
  84.         }while( digitalRead(BUTTON_PINS[C])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW);  // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
  85.        
  86.        
  87.         // itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
  88.  
  89.         MIDI.sendNoteOff( 48, 0, 1 );        
  90.         MIDI.sendNoteOff( 52, 0, 1 );
  91.         MIDI.sendNoteOff( 55, 0, 1 );      
  92.                    
  93.     }
  94.  
  95.     // F dur
  96.  
  97.     // Ha mindkettőt megnyomták?
  98.  
  99.     if( digitalRead(BUTTON_PINS[F])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH )        
  100.     {  
  101.         MIDI.sendNoteOn( 41, 100, 1 );        
  102.         MIDI.sendNoteOn( 45, 100, 1 );
  103.         MIDI.sendNoteOn( 48, 100, 1 );
  104.        
  105.        do{
  106.  
  107.         //    Itt bármelyiket felengedik? Tovább megy.        
  108.         }while(digitalRead(BUTTON_PINS[F])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW);  // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
  109.  
  110.         MIDI.sendNoteOff( 41, 0, 1 );        
  111.         MIDI.sendNoteOff( 45, 0, 1 );
  112.         MIDI.sendNoteOff( 48, 0, 1 );      
  113.                    
  114.     }
  115.  
  116. }  // loop
(#) kapu48 válasza suszitibi hozzászólására (») Jún 16, 2019 /
 
Talán most jó lesz!
Ki szedtem a Bouncet.

  1. #include <MIDI.h>
  2.  
  3.  
  4. MIDI_CREATE_DEFAULT_INSTANCE();
  5.  
  6. // a 12 hang és 4 húr nyomogombjai:
  7. //UNO pins: https://www.flickr.com/photos/28521811@N04/8520970405
  8. /*
  9. uint8_t As    = 28;    //A5;
  10. uint8_t Es    = 1;
  11. uint8_t B     = 3;
  12. uint8_t F     = 4;
  13. uint8_t C     = 5;
  14. uint8_t G     = 6;
  15. uint8_t D     = 7;
  16. uint8_t A     = 8;
  17. uint8_t E     = 9;
  18. uint8_t H     = 10;
  19. uint8_t Fis   = 11;
  20. uint8_t Cis   = 12;
  21. uint8_t dur   = 23;    //A0;
  22. uint8_t moll  = 24;    //A1;
  23. uint8_t sept  = 25;    //A2;
  24. uint8_t szuk  = 26;    //A3;
  25. */
  26. #define LED_PIN 13
  27.  
  28. enum billentyuk {
  29.   // nevek felsorolása egyezzen a BUTTON_PINS tömb pin számozás sorrendel!
  30.  As = 0,
  31.  Es,
  32.  B,
  33.  F,
  34.  C,
  35.  G,
  36.  D,
  37.  A,
  38.  E,
  39.  H,
  40.  Fis,
  41.  Cis,
  42.  Dur,
  43.  Moll,
  44.  Sept,
  45.  Szuk
  46.  };
  47. #define NUM_BUTTONS 16
  48. // UNO Board Butons Pins értékek
  49. const uint8_t BUTTON_PINS[NUM_BUTTONS] = {28, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 23, 24, 25, 26};
  50.  
  51. int ledState = LOW;
  52.  
  53.  
  54. void setup()
  55. {
  56.     MIDI.begin(1);
  57.  
  58.   for (int i = 0; i < NUM_BUTTONS; i++) {
  59.     pinMode( BUTTON_PINS[i] , INPUT_PULLUP  );       //setup the bounce instance for the current button
  60.  
  61.   }
  62.  
  63.    // Setup the LED :
  64.   pinMode(LED_PIN, OUTPUT);
  65.   digitalWrite(LED_PIN, ledState);
  66.  
  67. }
  68.  
  69. void loop()
  70. {
  71.     // C dur
  72.    
  73.          // lenyomtak a C-t és a dur-t
  74.  
  75.     if( digitalRead(BUTTON_PINS[C])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH)         // lenyomtak a C-t és a dur-t
  76.     {  
  77.        
  78.         MIDI.sendNoteOn( 48, 100, 1 );         // kikuldom a B-durnak megfelelo noteOn-okat
  79.         MIDI.sendNoteOn( 52, 100, 1 );
  80.         MIDI.sendNoteOn( 55, 100, 1 );
  81.                
  82.         do{
  83.        
  84.         }while( digitalRead(BUTTON_PINS[C])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW);  // megvarom, mig elengedik a C vagy Dur gombot, addig nem lepek tovabb.
  85.        
  86.        
  87.         // itt mar elengedte a C-t vagy dur-t, kikuldom a noteOff-okat
  88.  
  89.         MIDI.sendNoteOff( 48, 0, 1 );        
  90.         MIDI.sendNoteOff( 52, 0, 1 );
  91.         MIDI.sendNoteOff( 55, 0, 1 );      
  92.                    
  93.     }
  94.  
  95.     // F dur
  96.  
  97.     // Ha mindkettőt megnyomták?
  98.  
  99.     if( digitalRead(BUTTON_PINS[F])==HIGH && digitalRead(BUTTON_PINS[Dur])==HIGH )        
  100.     {  
  101.         MIDI.sendNoteOn( 41, 100, 1 );        
  102.         MIDI.sendNoteOn( 45, 100, 1 );
  103.         MIDI.sendNoteOn( 48, 100, 1 );
  104.        
  105.        do{
  106.  
  107.         //    Itt bármelyiket felengedik? Tovább megy.        
  108.         }while(digitalRead(BUTTON_PINS[F])==LOW && digitalRead(BUTTON_PINS[Dur])==LOW);  // megvarom, mig elengedik a F vagy Dur gombot, addig nem lepek tovabb.
  109.  
  110.         MIDI.sendNoteOff( 41, 0, 1 );        
  111.         MIDI.sendNoteOff( 45, 0, 1 );
  112.         MIDI.sendNoteOff( 48, 0, 1 );      
  113.                    
  114.     }
  115.  
  116. }  // loop


Nálunk zivatar van, kiléptem. (Féltem a gépet a villámcsapástól!)
(#) suszitibi válasza kapu48 hozzászólására (») Jún 17, 2019 /
 
Szia
Sajnos így sem, folyamatosan küldi az akkordok kódjait.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 17, 2019 /
 
Ezt nem értem!
Mit értesz folyamatos alatt?
Előbb talán azt kellene tisztázni, hogy a gombnyomásokra, hogyan reagál.

Van logikai analizátorod? Nagyon kellene látni milyen jelalakok, jönnek azoktól a Hal gomboktól.
A hozzászólás módosítva: Jún 17, 2019
(#) kapu48 válasza suszitibi hozzászólására (») Jún 17, 2019 /
 
Ha megnyomod a gombokat, akkor lesznek LOW szinten, akkor kezdünk 1 akkordot.
Aztán amíg LOW-on maradnak addig várunk a while-ben.
Akkor minden feltétel vizsgálatnál a LOW-ot kel figyelni.

Még az elképzelhető, hogy nem folyamatos jelet kapsz a gomboktól.
Hanem csak impulzusokat.
A hozzászólás módosítva: Jún 17, 2019
(#) suszitibi válasza kapu48 hozzászólására (») Jún 17, 2019 /
 
A folyamatos azt jelenti, hogy nem kell semmit nyomni, önállóan küldi a kódokat. Itt nem a prellezésről van szó, hanem az alap működésről.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 17, 2019 /
 
Egyem a szívedet, én nem látom, hogy mi van nálad!

Olyan nehéz lenne leírnod, hogy amikor nyomod a gombot akkor szalad, vagy nem is kel őket nyomnod?

Szerintem már minden létező variációt kipróbáltunk.
Szóval jelalakot kellene nézni. Mert így csak vaktában lövöldözünk.
(#) kapu48 válasza suszitibi hozzászólására (») Jún 17, 2019 /
 
Ha ezek mátrixba kötött gombok, és multiplexelt a vezérlésük. Akkor mi itt rághatjuk a kefét csutkára.
(#) sector99 hozzászólása Jún 17, 2019 /
 
Sziasztok !
Az én feladatom talán könnyebben orvosolható. Teljesen kezdő vagyok Arduino programozásban. A feladat - másoknak - biztosan egyszerű: 3 állású kapcsoló, (nem nyomógomb) egyenáramú motor H híddal meghajtva - 1. jobbra forog; 2. balra forog; 3. felváltva jobbra majd balra forog;
A HW egy Attiny85, USB-s. Arra gondoltam hogy 1 pin analóg beolvasás H, szint, L szint és 2.5 V szint.
Kettő digi kimenet a jobbra és balra forgáshoz. A kérdésem, hogy milyen programszerkezetet célszerű használni a beolvasáshoz ? (if.... , swith....case; stb.) A beolvasás ráér akár 10...20 másodpercenként is, mert lényegtelen, hogy mikor reagál az átkapcsolásra.
Előre is köszi !
(#) Jacksonps2 válasza pipi hozzászólására (») Jún 17, 2019 /
 
Hát az a baj, hogy azok a portok számítógépeknek (jövőben) , illetve internetre vannak a helyeken, szal meg van a szerepük, erre a célra nem használhatom fel őket, de amúgy mindegy is, mert utóbb megtudtam, hogy ahol a mérleg van ott nincs is semmilyen csatlakozó, illetve oda úgyis be kell húzni kábelt.
(#) Jacksonps2 válasza KoblogPerGyok hozzászólására (») Jún 17, 2019 /
 
Lehet , hogy ez lesz a végén, mármint egy app, ami induláskor indul és menti a megadott helyre, csak még kevés vagyok ehhez, pontosabban nem foglalkoztam ilyesmivel még eddig, de utána járok ennek a VB.NETnek, sokat hallottam már erről. Köszi.
Következő: »»   540 / 838
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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