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   516 / 838
(#) kapu48 válasza Helios hozzászólására (») Márc 16, 2019 /
 
Az enkodereknek 2 bemenet kel. Van még plusz 3 bemeneted?

És a magyarázat:
Bővebben: Link
(#) Helios válasza kapu48 hozzászólására (») Márc 16, 2019 /
 
Szia!

A problémám a következő: a 4 gomb közül 2 a menüben az előre és hátra irányt vezérli, egy pedig maga a menü előhívása. Azt szeretném, hogy az encoder SW gombja lenne a menü, az A és B pedig az elöre és hátra irány. Én ehhez suta vagyok, sajnos nem tudom megcsinálni.
(#) kapu48 válasza Helios hozzászólására (») Márc 16, 2019 /
 
A meglevő menü gomb kezelést meghagyod.
A két irány választó gomb rutinjait lecseréled a fenti linkben szereplő rutinra.
(#) Helios hozzászólása Márc 16, 2019 /
 
A 10(minusz,hátra),11(plusz,elöre),12(menü)-es lenne az a 3 gomb.
(#) kapu48 hozzászólása Márc 16, 2019 /
 
Ezt gyorsan töröld! És rakdbbe a lenti zöld gombok "kód" zárójelei közé
(#) Helios válasza kapu48 hozzászólására (») Márc 16, 2019 /
 
  1. void loop() {                                                             //A menü és gomb vezérlés
  2.   if (digitalRead(12) == HIGH) {
  3.     menu++;
  4.     cl();
  5.     in_d = 0;
  6.     if (menu > 4) {
  7.       menu = 0;
  8.     }
  9.   }
  10.  
  11.   if (analogRead(A1) > 900) {
  12.     in++;
  13.     menu = 5;
  14.     w = 1;
  15.     in_d = 1;
  16.     cl();
  17.     if (in > 4 || in < 1) {
  18.       in = 1;
  19.     }
  20.   }
  21.  
  22.   if (menu == 0) {
  23.     if (digitalRead(11) == HIGH) {
  24.       vol++;
  25.       w = 1;
  26.       if (vol > 48) {
  27.         vol = 48;
  28.       }
  29.     }
  30.     if (digitalRead(10) == HIGH) {
  31.       vol--;
  32.       w = 1;
  33.       if (vol < 0) {
  34.         vol = 0;
  35.       }
  36.     }
  37.     if (w == 1) {
  38.       audio();
  39.       cl();
  40.       time = millis();
  41.       w = 0;
  42.       w1 = 1;
  43.     }
  44.     lcd.setCursor(0, 0); lcd.print("Volume   ");
  45.     lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
  46.     vol_d = vol / 2;
  47.     if (vol_d >= 0) {
  48.       for (z = 0; z <= vol_d; z++) {
  49.         lcd.setCursor(z / 2, 1);
  50.         lcd.write((uint8_t)0);
  51.       }
  52.     }
  53.     if (vol_d % 2 == 0) {
  54.       lcd.setCursor(z / 2, 1);
  55.       lcd.write((uint8_t)1);
  56.     }
  57.     lcd.setCursor(13, 1); lcd.print(vol);
  58.   }
  59.  
  60.   if (menu == 1) {
  61.     if (digitalRead(11) == HIGH) {
  62.       bass++;
  63.       w = 1;
  64.       if (bass > 7) {
  65.         bass = 7;
  66.       }
  67.     }
  68.     if (digitalRead(10) == HIGH) {
  69.       bass--;
  70.       w = 1;
  71.       if (bass < -7) {
  72.         bass = -7;
  73.       }
  74.     }
  75.     if (w == 1) {
  76.       audio();
  77.       cl();
  78.       time = millis();
  79.       w1 = 1;
  80.       w = 0;
  81.     }
  82.     lcd.setCursor(0, 0); lcd.print("Bass      ");
  83.     lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
  84.     for (z = -7; z <= bass; z++) {
  85.       lcd.setCursor(z + 7, 1);
  86.       lcd.write((uint8_t)0);
  87.     }
  88.   }
  89.  
  90.   if (menu == 2) {
  91.     if (digitalRead(11) == HIGH) {
  92.       mids++;
  93.       w = 1;
  94.       if (mids > 7) {
  95.         mids = 7;
  96.       }
  97.     }
  98.     if (digitalRead(10) == HIGH) {
  99.       mids--;
  100.       w = 1;
  101.       if (mids < -7) {
  102.         mids = -7;
  103.       }
  104.     }
  105.     if (w == 1) {
  106.       audio();
  107.       cl();
  108.       time = millis();
  109.       w1 = 1;
  110.       w = 0;
  111.     }
  112.     lcd.setCursor(0, 0); lcd.print("Mids      ");
  113.     lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
  114.     for (z = -7; z <= mids; z++) {
  115.       lcd.setCursor(z + 7, 1);
  116.       lcd.write((uint8_t)0);
  117.     }
  118.   }
  119.  
  120.   if (menu == 3) {
  121.     if (digitalRead(11) == HIGH) {
  122.       treb++;
  123.       w = 1;
  124.       if (treb > 7) {
  125.         treb = 7;
  126.       }
  127.     }
  128.     if (digitalRead(10) == HIGH) {
  129.       treb--;
  130.       w = 1;
  131.       if (treb < -7) {
  132.         treb = -7;
  133.       }
  134.     }
  135.     if (w == 1) {
  136.       audio();
  137.       cl();
  138.       time = millis();
  139.       w1 = 1;
  140.       w = 0;
  141.     }
  142.     lcd.setCursor(0, 0); lcd.print("Trebble   ");
  143.     lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
  144.     for (z = -7; z <= treb; z++) {
  145.       lcd.setCursor(z + 7, 1);
  146.       lcd.write((uint8_t)0);
  147.     }
  148.   }
  149.  
  150.   if (menu == 4) {
  151.     if (digitalRead(11) == HIGH) {
  152.       balans++;
  153.       w = 1;
  154.       if (balans > 4) {
  155.         balans = 4;
  156.       }
  157.     }
  158.     if (digitalRead(10) == HIGH) {
  159.       balans--;
  160.       w = 1;
  161.       if (balans < -4) {
  162.         balans = -4;
  163.       }
  164.     }
  165.     lcd.setCursor(0, 0);
  166.     if (balans >= 0) {
  167.       lcd.print("-");
  168.     } else {
  169.       lcd.print("+");
  170.     }
  171.     lcd.print(abs(balans)); lcd.print(" dB ");
  172.     lcd.print(" <>  ");
  173.     if (balans >= 0) {
  174.       lcd.print("+");
  175.     } else {
  176.       lcd.print("-");
  177.     }
  178.     lcd.print(abs(balans)); lcd.print(" dB ");
  179.     lcd.setCursor(0, 1); lcd.print("R");
  180.     lcd.setCursor(15, 1); lcd.print("L");
  181.     if (balans < 0) {
  182.       lcd.setCursor(balans + 7, 1);
  183.       lcd.write((uint8_t)0);
  184.     }
  185.     if (balans > 0) {
  186.       lcd.setCursor(balans + 8, 1);
  187.       lcd.write((uint8_t)0);
  188.     }
  189.     if (balans == 0) {
  190.       lcd.setCursor(7, 1);
  191.       lcd.write((uint8_t)0);
  192.       lcd.setCursor(8, 1);
  193.       lcd.write((uint8_t)0);
  194.     }
  195.     if (w == 1) {
  196.       audio();
  197.       cl();
  198.       time = millis();
  199.       w1 = 1;
  200.       w = 0;
  201.     }
  202.   }
  203.  
  204.   if (in_d == 1) {
  205.     g1();
  206.     if (digitalRead(11) == HIGH) {
  207.       gain++;
  208.       w = 1;
  209.       if (gain > 15) {
  210.         gain = 15;
  211.       }
  212.     }
  213.     if (digitalRead(10) == HIGH) {
  214.       gain--;
  215.       w = 1;
  216.       if (gain < 0) {
  217.         gain = 0;
  218.       }
  219.     }
  220.     g2();
  221.     lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
  222.     lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
  223.     if (w == 1) {
  224.       audio();
  225.       cl();
  226.       time = millis();
  227.       w1 = 1;
  228.       w = 0;
  229.     }
  230.   }
(#) kapu48 válasza Helios hozzászólására (») Márc 16, 2019 /
 
Mivel csak kód töredéket kaptam, nem tudtam ellenőrző fordítást végezni!

Így képzeltem a cserét:
  1. #defune MINUSZ_BUTTON   10
  2. #defune PLUSZ_BUTTON    11
  3. #define MENU_BUTTON             12
  4.  
  5.  #define outputA 11
  6.  #define outputB 10
  7.  
  8.  int counter = 0;
  9.  int aState;
  10.  int aLastState;
  11.  
  12. int encoder();
  13.  
  14.                         //A menu es gomb vezerles
  15. void loop() {
  16.         int readEncoder = encoder();                                                                                                                                                                                                           
  17.   if (digitalRead(12) == HIGH) {
  18.     menu++;
  19.     cl();
  20.     in_d = 0;
  21.     if (menu > 4) {
  22.       menu = 0;
  23.     }
  24.   }
  25.  
  26.   if (analogRead(A1) > 900) {
  27.     in++;
  28.     menu = 5;
  29.     w = 1;
  30.     in_d = 1;
  31.     cl();
  32.     if (in > 4 || in < 1) {
  33.       in = 1;
  34.     }
  35.   }
  36.  
  37.   if (menu == 0) {
  38.     if (readEncoder == 1) {
  39.       vol++;
  40.       w = 1;
  41.       if (vol > 48) {
  42.         vol = 48;
  43.       }
  44.     }
  45.     if (readEncoder == 2) {
  46.       vol--;
  47.       w = 1;
  48.       if (vol < 0) {
  49.         vol = 0;
  50.       }
  51.     }
  52.     if (w == 1) {
  53.       audio();
  54.       cl();
  55.       time = millis();
  56.       w = 0;
  57.       w1 = 1;
  58.     }
  59.     lcd.setCursor(0, 0); lcd.print("Volume   ");
  60.     lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
  61.     vol_d = vol / 2;
  62.     if (vol_d >= 0) {
  63.       for (z = 0; z <= vol_d; z++) {
  64.         lcd.setCursor(z / 2, 1);
  65.         lcd.write((uint8_t)0);
  66.       }
  67.     }
  68.     if (vol_d % 2 == 0) {
  69.       lcd.setCursor(z / 2, 1);
  70.       lcd.write((uint8_t)1);
  71.     }
  72.     lcd.setCursor(13, 1); lcd.print(vol);
  73.   }
  74.  
  75.   if (menu == 1) {
  76.     if (readEncoder == 1) {
  77.       bass++;
  78.       w = 1;
  79.       if (bass > 7) {
  80.         bass = 7;
  81.       }
  82.     }
  83.     if (readEncoder == 2) {
  84.       bass--;
  85.       w = 1;
  86.       if (bass < -7) {
  87.         bass = -7;
  88.       }
  89.     }
  90.     if (w == 1) {
  91.       audio();
  92.       cl();
  93.       time = millis();
  94.       w1 = 1;
  95.       w = 0;
  96.     }
  97.     lcd.setCursor(0, 0); lcd.print("Bass      ");
  98.     lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
  99.     for (z = -7; z <= bass; z++) {
  100.       lcd.setCursor(z + 7, 1);
  101.       lcd.write((uint8_t)0);
  102.     }
  103.   }
  104.  
  105.   if (menu == 2) {
  106.     if (readEncoder == 1) {
  107.       mids++;
  108.       w = 1;
  109.       if (mids > 7) {
  110.         mids = 7;
  111.       }
  112.     }
  113.     if (readEncoder == 2) {
  114.       mids--;
  115.       w = 1;
  116.       if (mids < -7) {
  117.         mids = -7;
  118.       }
  119.     }
  120.     if (w == 1) {
  121.       audio();
  122.       cl();
  123.       time = millis();
  124.       w1 = 1;
  125.       w = 0;
  126.     }
  127.     lcd.setCursor(0, 0); lcd.print("Mids      ");
  128.     lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
  129.     for (z = -7; z <= mids; z++) {
  130.       lcd.setCursor(z + 7, 1);
  131.       lcd.write((uint8_t)0);
  132.     }
  133.   }
  134.  
  135.   if (menu == 3) {
  136.     if (readEncoder == 1) {
  137.       treb++;
  138.       w = 1;
  139.       if (treb > 7) {
  140.         treb = 7;
  141.       }
  142.     }
  143.     if (readEncoder == 2) {
  144.       treb--;
  145.       w = 1;
  146.       if (treb < -7) {
  147.         treb = -7;
  148.       }
  149.     }
  150.     if (w == 1) {
  151.       audio();
  152.       cl();
  153.       time = millis();
  154.       w1 = 1;
  155.       w = 0;
  156.     }
  157.     lcd.setCursor(0, 0); lcd.print("Trebble   ");
  158.     lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
  159.     for (z = -7; z <= treb; z++) {
  160.       lcd.setCursor(z + 7, 1);
  161.       lcd.write((uint8_t)0);
  162.     }
  163.   }
  164.  
  165.   if (menu == 4) {
  166.     if (readEncoder == 1) {
  167.       balans++;
  168.       w = 1;
  169.       if (balans > 4) {
  170.         balans = 4;
  171.       }
  172.     }
  173.     if (readEncoder == 2) {
  174.       balans--;
  175.       w = 1;
  176.       if (balans < -4) {
  177.         balans = -4;
  178.       }
  179.     }
  180.     lcd.setCursor(0, 0);
  181.     if (balans >= 0) {
  182.       lcd.print("-");
  183.     } else {
  184.       lcd.print("+");
  185.     }
  186.     lcd.print(abs(balans)); lcd.print(" dB ");
  187.     lcd.print(" <>  ");
  188.     if (balans >= 0) {
  189.       lcd.print("+");
  190.     } else {
  191.       lcd.print("-");
  192.     }
  193.     lcd.print(abs(balans)); lcd.print(" dB ");
  194.     lcd.setCursor(0, 1); lcd.print("R");
  195.     lcd.setCursor(15, 1); lcd.print("L");
  196.     if (balans < 0) {
  197.       lcd.setCursor(balans + 7, 1);
  198.       lcd.write((uint8_t)0);
  199.     }
  200.     if (balans > 0) {
  201.       lcd.setCursor(balans + 8, 1);
  202.       lcd.write((uint8_t)0);
  203.     }
  204.     if (balans == 0) {
  205.       lcd.setCursor(7, 1);
  206.       lcd.write((uint8_t)0);
  207.       lcd.setCursor(8, 1);
  208.       lcd.write((uint8_t)0);
  209.     }
  210.     if (w == 1) {
  211.       audio();
  212.       cl();
  213.       time = millis();
  214.       w1 = 1;
  215.       w = 0;
  216.     }
  217.   }
  218.  
  219.   if (in_d == 1) {
  220.     g1();
  221.     if (readEncoder == 1) {
  222.       gain++;
  223.       w = 1;
  224.       if (gain > 15) {
  225.         gain = 15;
  226.       }
  227.     }
  228.     if (readEncoder == 2) {
  229.       gain--;
  230.       w = 1;
  231.       if (gain < 0) {
  232.         gain = 0;
  233.       }
  234.     }
  235.     g2();
  236.     lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
  237.     lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
  238.     if (w == 1) {
  239.       audio();
  240.       cl();
  241.       time = millis();
  242.       w1 = 1;
  243.       w = 0;
  244.     }
  245.   }
  246.        
  247.        
  248.          int encoder() {
  249.          int Direction = 0;
  250.    aState = digitalRead(outputA); // Reads the "current" state of the outputA
  251.    // If the previous and the current state of the outputA are different, that means a Pulse has occured
  252.    if (aState != aLastState){    
  253.      // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
  254.      if (digitalRead(outputB) != aState) {
  255.        counter ++;    
  256.        Direction = 1;
  257.      } else {
  258.        counter --;
  259.        Direction = 2;
  260.      }
  261.    //  Serial.print("Position: ");
  262.    //  Serial.println(counter);
  263.    }
  264.    aLastState = aState; // Updates the previous state of the outputA with the current state
  265.   return Direction;
  266.  }
(#) Helios válasza kapu48 hozzászólására (») Márc 17, 2019 /
 
Szia! Itt a teljes kód.

  1. #include <EEPROM.h>
  2. #include <Wire.h>
  3. #include <TDA7439.h>
  4. #include <LiquidCrystal_I2C.h>
  5. #include <Encoder.h>
  6.  
  7. TDA7439 tda;
  8. LiquidCrystal_I2C lcd(0x27, 16, 2);// I2C címzés és szetáp
  9. byte a1[8] = {0b00000, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b11011, 0b00000};
  10. byte a2[8] = {0b00000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b00000};
  11. int vol, vol_d, z, bass, mids, treb, balans, in, gain, gain1, gain2, gain3, gain4;
  12. byte menu, w, w1, in_d;
  13. unsigned long time;
  14.  
  15. void setup() {                                                            ///// Szetáp kettő
  16.   Serial.begin(9600); Serial.print("TDA7439");
  17.   lcd.backlight();
  18.   lcd.init();
  19.   lcd.setCursor(0, 0); lcd.print("    TDA7439    "); delay(1000);
  20.   pinMode(12, INPUT);                                                     // menü
  21.   pinMode(11, INPUT);                                                     // plusz
  22.   pinMode(10, INPUT);                                                     // mínusz
  23.   pinMode(A1, INPUT);                                                     // bemenet 1-4
  24.   lcd.createChar(0, a1); lcd.createChar(1, a2);
  25.   vol = EEPROM.read(0);                                                   // volume
  26.   bass = EEPROM.read(1) - 7;                                              // basszus eeprom
  27.   mids = EEPROM.read(2) - 7;                                              // mids eeprom
  28.   treb = EEPROM.read(3) - 7;                                              // treble eeprom
  29.   balans = EEPROM.read(4) - 4;                                            // balansz eeprom
  30.   in = EEPROM.read(5);                                                    // input eeprom
  31.   gain1 = EEPROM.read(6);                                                 // gain1 eeprom
  32.   gain2 = EEPROM.read(7);                                                 // gain2 eeprom
  33.   gain3 = EEPROM.read(8);                                                 // gain3 eeprom
  34.   gain4 = EEPROM.read(9);                                                 // gain4 eeprom
  35.   g1(); audio();
  36. }
  37.  
  38. void loop() {                                                             //A menü és gomb vezérlés
  39.   if (digitalRead(12) == HIGH) {
  40.     menu++;
  41.     cl();
  42.     in_d = 0;
  43.     if (menu > 4) {
  44.       menu = 0;
  45.     }
  46.   }
  47.  
  48.   if (analogRead(A1) > 900) {
  49.     in++;
  50.     menu = 5;
  51.     w = 1;
  52.     in_d = 1;
  53.     cl();
  54.     if (in > 4 || in < 1) {
  55.       in = 1;
  56.     }
  57.   }
  58.  
  59.   if (menu == 0) {
  60.     if (digitalRead(11) == HIGH) {
  61.       vol++;
  62.       w = 1;
  63.       if (vol > 48) {
  64.         vol = 48;
  65.       }
  66.     }
  67.     if (digitalRead(10) == HIGH) {
  68.       vol--;
  69.       w = 1;
  70.       if (vol < 0) {
  71.         vol = 0;
  72.       }
  73.     }
  74.     if (w == 1) {
  75.       audio();
  76.       cl();
  77.       time = millis();
  78.       w = 0;
  79.       w1 = 1;
  80.     }
  81.     lcd.setCursor(0, 0); lcd.print("Volume   ");
  82.     lcd.print(-48 + vol); lcd.setCursor(13, 0); lcd.print("dB");
  83.     vol_d = vol / 2;
  84.     if (vol_d >= 0) {
  85.       for (z = 0; z <= vol_d; z++) {
  86.         lcd.setCursor(z / 2, 1);
  87.         lcd.write((uint8_t)0);
  88.       }
  89.     }
  90.     if (vol_d % 2 == 0) {
  91.       lcd.setCursor(z / 2, 1);
  92.       lcd.write((uint8_t)1);
  93.     }
  94.     lcd.setCursor(13, 1); lcd.print(vol);
  95.   }
  96.  
  97.   if (menu == 1) {
  98.     if (digitalRead(11) == HIGH) {
  99.       bass++;
  100.       w = 1;
  101.       if (bass > 7) {
  102.         bass = 7;
  103.       }
  104.     }
  105.     if (digitalRead(10) == HIGH) {
  106.       bass--;
  107.       w = 1;
  108.       if (bass < -7) {
  109.         bass = -7;
  110.       }
  111.     }
  112.     if (w == 1) {
  113.       audio();
  114.       cl();
  115.       time = millis();
  116.       w1 = 1;
  117.       w = 0;
  118.     }
  119.     lcd.setCursor(0, 0); lcd.print("Bass      ");
  120.     lcd.print(bass * 2); lcd.setCursor(13, 0); lcd.print("dB");
  121.     for (z = -7; z <= bass; z++) {
  122.       lcd.setCursor(z + 7, 1);
  123.       lcd.write((uint8_t)0);
  124.     }
  125.   }
  126.  
  127.   if (menu == 2) {
  128.     if (digitalRead(11) == HIGH) {
  129.       mids++;
  130.       w = 1;
  131.       if (mids > 7) {
  132.         mids = 7;
  133.       }
  134.     }
  135.     if (digitalRead(10) == HIGH) {
  136.       mids--;
  137.       w = 1;
  138.       if (mids < -7) {
  139.         mids = -7;
  140.       }
  141.     }
  142.     if (w == 1) {
  143.       audio();
  144.       cl();
  145.       time = millis();
  146.       w1 = 1;
  147.       w = 0;
  148.     }
  149.     lcd.setCursor(0, 0); lcd.print("Mids      ");
  150.     lcd.print(mids * 2); lcd.setCursor(13, 0); lcd.print("dB");
  151.     for (z = -7; z <= mids; z++) {
  152.       lcd.setCursor(z + 7, 1);
  153.       lcd.write((uint8_t)0);
  154.     }
  155.   }
  156.  
  157.   if (menu == 3) {
  158.     if (digitalRead(11) == HIGH) {
  159.       treb++;
  160.       w = 1;
  161.       if (treb > 7) {
  162.         treb = 7;
  163.       }
  164.     }
  165.     if (digitalRead(10) == HIGH) {
  166.       treb--;
  167.       w = 1;
  168.       if (treb < -7) {
  169.         treb = -7;
  170.       }
  171.     }
  172.     if (w == 1) {
  173.       audio();
  174.       cl();
  175.       time = millis();
  176.       w1 = 1;
  177.       w = 0;
  178.     }
  179.     lcd.setCursor(0, 0); lcd.print("Trebble   ");
  180.     lcd.print(treb * 2); lcd.setCursor(13, 0); lcd.print("dB");
  181.     for (z = -7; z <= treb; z++) {
  182.       lcd.setCursor(z + 7, 1);
  183.       lcd.write((uint8_t)0);
  184.     }
  185.   }
  186.  
  187.   if (menu == 4) {
  188.     if (digitalRead(11) == HIGH) {
  189.       balans++;
  190.       w = 1;
  191.       if (balans > 4) {
  192.         balans = 4;
  193.       }
  194.     }
  195.     if (digitalRead(10) == HIGH) {
  196.       balans--;
  197.       w = 1;
  198.       if (balans < -4) {
  199.         balans = -4;
  200.       }
  201.     }
  202.     lcd.setCursor(0, 0);
  203.     if (balans >= 0) {
  204.       lcd.print("-");
  205.     } else {
  206.       lcd.print("+");
  207.     }
  208.     lcd.print(abs(balans)); lcd.print(" dB ");
  209.     lcd.print(" <>  ");
  210.     if (balans >= 0) {
  211.       lcd.print("+");
  212.     } else {
  213.       lcd.print("-");
  214.     }
  215.     lcd.print(abs(balans)); lcd.print(" dB ");
  216.     lcd.setCursor(0, 1); lcd.print("R");
  217.     lcd.setCursor(15, 1); lcd.print("L");
  218.     if (balans < 0) {
  219.       lcd.setCursor(balans + 7, 1);
  220.       lcd.write((uint8_t)0);
  221.     }
  222.     if (balans > 0) {
  223.       lcd.setCursor(balans + 8, 1);
  224.       lcd.write((uint8_t)0);
  225.     }
  226.     if (balans == 0) {
  227.       lcd.setCursor(7, 1);
  228.       lcd.write((uint8_t)0);
  229.       lcd.setCursor(8, 1);
  230.       lcd.write((uint8_t)0);
  231.     }
  232.     if (w == 1) {
  233.       audio();
  234.       cl();
  235.       time = millis();
  236.       w1 = 1;
  237.       w = 0;
  238.     }
  239.   }
  240.  
  241.   if (in_d == 1) {
  242.     g1();
  243.     if (digitalRead(11) == HIGH) {
  244.       gain++;
  245.       w = 1;
  246.       if (gain > 15) {
  247.         gain = 15;
  248.       }
  249.     }
  250.     if (digitalRead(10) == HIGH) {
  251.       gain--;
  252.       w = 1;
  253.       if (gain < 0) {
  254.         gain = 0;
  255.       }
  256.     }
  257.     g2();
  258.     lcd.setCursor(0, 0); lcd.print("Input: "); lcd.print(in);
  259.     lcd.setCursor(0, 1); lcd.print("Input Gain: "); lcd.print(gain);
  260.     if (w == 1) {
  261.       audio();
  262.       cl();
  263.       time = millis();
  264.       w1 = 1;
  265.       w = 0;
  266.     }
  267.   }
  268.   ////////////////Gomb vezérlés vége
  269.  
  270.   ////EEPROM beállítás mentés, ha nincsenek a gombok több mint 10mp-ig lenyomva
  271.   if (millis() - time > 10000 && w1 == 1) {
  272.     EEPROM.update(0, vol);
  273.     EEPROM.update(4, balans + 4);
  274.     EEPROM.update(1, bass + 7);
  275.     EEPROM.update(2, mids + 7);
  276.     EEPROM.update(3, treb + 7);
  277.     EEPROM.update(5, in);
  278.     EEPROM.update(6, gain1); EEPROM.update(7, gain2); EEPROM.update(8, gain3); EEPROM.update(9, gain4);
  279.     menu = 0; w1 = 0; cl(); in_d = 0;
  280.   }
  281. }
  282.  
  283. void g1() {
  284.   if (in == 1) {
  285.     gain = gain1;
  286.   } if (in == 2) {
  287.     gain = gain2;
  288.   } if (in == 3) {
  289.     gain = gain3;
  290.   } if (in == 4) {
  291.     gain = gain4;
  292.   }
  293. }
  294. void g2() {
  295.   if (in == 1) {
  296.     gain1 = gain;
  297.   } if (in == 2) {
  298.     gain2 = gain;
  299.   } if (in == 3) {
  300.     gain3 = gain;
  301.   } if (in == 4) {
  302.     gain4 = gain;
  303.   }
  304. }
  305. void cl() {
  306.   delay(200);
  307.   lcd.clear();
  308. }
  309. void audio() {
  310.   tda.setInput(in);                                                      // 1 to 4
  311.   tda.inputGain(gain);                                                   // 0 to 15
  312.   tda.setVolume(vol);                                                    // 0 to 48 ( 0 is mute)
  313.   tda.setSnd(bass, 1);                                                   //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble
  314.   tda.setSnd(mids, 2);
  315.   tda.setSnd(treb, 3);
  316.   tda.spkAtt(balans);                                                    /// balance function
  317. }
(#) Helios válasza Helios hozzászólására (») Márc 17, 2019 /
 
Beillesztettem a kódot, de nem fordította le. Ezért jobbnak láttam elküldeni az egész kódot.
(#) kapu48 válasza Helios hozzászólására (») Márc 17, 2019 /
 
A sikerhez kellene a: TDA7439.lib, vagy link?
(#) Helios válasza kapu48 hozzászólására (») Márc 18, 2019 /
 
Szia. Ezen a linken található a könyvtár, amit használok
(#) kapu48 válasza Helios hozzászólására (») Márc 18, 2019 /
 
Elnézést!
De ez a program már akkorára dagadt, hogy nem fordul meg a loop ciklus elég gyorsan.
Ahhoz, hogy lekérdezéssel biztonságosan elkapja az encoder jeleit!

Ide már megszakításos módszert kellene alkalmazni.
Szerintem ez már túlmegy, a szívességből csináld már meg határán!
Rengeteg ilyen példát találsz a neten, csak keresned kel.

Sajnálom ennyi időm most nincsen rá!
(#) kapu48 válasza Helios hozzászólására (») Márc 18, 2019 /
 
Quadrature Decoders
Bővebben: Link
(#) Vacok hozzászólása Márc 18, 2019 /
 
Sziasztok!
Akadt egy kis gondom a Ki mit épített topicban bemutatott fordulatszámmérővel. A fordulatszám jelet az AVR-be a képen látható módon vezetem bele, a bemenet a belső felhúzó ellenállással H szintre van húzva. A tranzisztor bázisát a 10k ellenálláson keresztül megpróbáltam közvetlenül a gyújtó trafó primer tekercsére kötni, de összevissza ugráló értelmezhetetlen értékeket jelzett ki. Jel generátorról tökéletesen működött. Gondolom a gyújtó trafó visszarúgása okozza a bajt, de hogyan küszöbölhetném ki ezt a problémát? Köthetem közvetlenül az ECU gyújtás kimenetére?

input.jpg
    
(#) Kera_Will válasza Vacok hozzászólására (») Márc 18, 2019 / 2
 
Táprészen több tagú LC szűrők.15 Voltos Zener gátak.
A bemetet otpoval leválasztani ami a fordulatszám adótól kapja a jelet.
A tranzisztor így nem sokat véd.
Az optocsatoló közvetlen a uC mellett legyen ... az opto diódáján már lóghat hosszú drót.Opto Tranzisztora minél közelebb kerüljön inkább.
(#) kistee hozzászólása Márc 22, 2019 /
 
Sziasztok!

Egy rejtélyes dolog megfejtésében kérem a segítségeteket. Egy Arduino alapú Midi vezérlőn dolgozom és az Arduino panelem elég furcsán viselkedik. Van egy eredeti is és egy klón is, mindkettő ugyanazt csinálja.

Röviden annyit, hogy a digitális bemeneteken van egy 6x6-os billentyű mátrix, amit beolvas és a neki megfelelő Midi üzenetet elküldi a Tx lábon. Lefordítom és betöltöm az Arduino-ba. Ha egy darab dróttal egy tetszőleges sor és oszlop kivezetést összezárok próbaképpen egy pillanatra, akkor a Tx LED felvillan, jelezve, hogy valamit kiküldött, tehát úgy néz ki, hogy működik.

Nyomok egy Reset-et a panelen, utána ugyanígy működik tovább.

Most jön a furcsaság: ha lehúzom az USB-t róla és újra visszadugom, utána (látszólag) nem működik a program. Tehát hiába érintem össze ugyanazt a két pontot, a TX LED nem csinál semmit... mintha elfelejtette volna a programot. Gyorsan rátöltöttem a Blink sketch-et, azt nem "felejti el"...

Van valami ötletetek, hogy mitől lehet ez?
A hozzászólás módosítva: Márc 22, 2019
(#) tbarath válasza kistee hozzászólására (») Márc 22, 2019 /
 
Tegyél a kódba egy blink kódot, a loop ciklus elejébe. Delay nélkülit természetesen, valahogy így: Bővebben: Link.
Persze ha használod valamire a 13-as pin-t, akkor tedd máshova, és használj külső LED-et, egyébként jó a beépített.

Az elárul pár dolgot, ha USB ki-be dugdosás után villog-e a LED.
Illetve ha usb ki-be után nyomsz egy reset gombot, az "megjavítja"?
(#) kistee válasza tbarath hozzászólására (») Márc 22, 2019 /
 
Köszönöm az ötletet, majd otthon kipróbálom. Az usb ki-be után a reset nem javítja meg.

A 13-as lábat használom (meg az összes többit is, kivéve a Tx/Rx-et), de ideiglenesen kiszedhetem az egyik oszlopot a próba kedvéért.
(#) tbarath válasza kistee hozzászólására (») Márc 22, 2019 /
 
Az nem jó, a lényeg az lenne, hogy ne változtass a hw-en.
Analóg pint is használhatsz digit ki/bemenetként, abból nincs szabad?
(#) kistee válasza tbarath hozzászólására (») Márc 22, 2019 /
 
De az még mind szabad. Később majd max. hármat tervezek felhasználni belőlük.
(#) Kovidivi válasza kistee hozzászólására (») Márc 22, 2019 /
 
Egy képet küldhetnél. Miről táplálod meg az Arduinokat egyébként? Multiméterrel méregettél már? Tápfeszültség, stb? Pl. ha a CH340 zárlatos, akkor lehúzza az 5V-ot nagyon alacsonyra (0-1V), és előfordulhat, hogy a két táplálási mód közül az egyikkel megy az Arduino, a másikkal nem.
(#) kistee válasza Kovidivi hozzászólására (») Márc 22, 2019 /
 
USB-ről táplálom.
(#) kistee válasza tbarath hozzászólására (») Márc 22, 2019 /
 
Kipróbáltam a LED villogtatást, a LED tovább villog az USB ki-be után is.

Viszont: közben eszembe jutott, hogy kétségbeesésemben a librarykba is belenyúltam. Úgy emlékszem, hogy visszaállítottam mindent, amit átírtam, de ezek szerint mégsem... a libraryk törlése és újratelepítése megoldotta a problémát, most már minden jó, lehet tovább dolgozni a kódon.

Köszönöm a segítséget!
(#) david10 válasza proba hozzászólására (») Márc 23, 2019 /
 
Sziasztok,
Hazahoztam egy 8x8-as szeletet, amivel addig kísérleteztem amíg el nem sikerült hárítanom a problémát.
A megoldás az volt, hogy invertálni kellett a sorokat.
Így végül ebből:
ledmatrix.Shift_Register_Emulator(253,LedPort); adott oszlopok bekapcsolása
delay(6);
ledmatrix.Shift_Register_Emulator(255,LedPort); összes led ki

Ez lett:
ledmatrix.Shift_Register_Emulator(2,LedPort); adott oszlopok bekapcsolása
delay(6);
ledmatrix.Shift_Register_Emulator(0,LedPort); összes led ki

proba kolléga forráskódját használtam fel, az sokkal átláthatóbb, gyorsabb és szebb az első kódomnál.

Delay-nek 2 bizonyult a legjobb értéknek, 3-malmár kezd szemmel alig láthatóan villogni.

Köszönöm szépen mindenki segítségét!
További szép estét mindenkinek!
(#) Kovidivi válasza david10 hozzászólására (») Márc 23, 2019 / 1
 
Ha akarod, finomíthatod a várakozást, használd a DelayMicrosec függvényt. Így nem csak 2 vagy 3 ms-ot tudsz várni, hanem 2000-3000 microsec között bármit (lehet még kisebb érték is elegendő). Így a programodat se lassítod feleslegesen, és a vibrálás is minimálisra lesz szorítva.
(#) david10 válasza Kovidivi hozzászólására (») Márc 24, 2019 /
 
Köszi a tippet!
Amiután bekötöm a többi ledeket, utána még fogok játszani jó sokat a programmal.
Fogok feltölteni videót is róla amiután elkészült
(#) pisti hozzászólása Márc 24, 2019 /
 
Sziasztok!
Készítettem egy stoppert Arduino Uno-val. Sok példát néztem, de szerettek volna egy kicsit más formában csinálni a programját. A megszakításokat még nem használtam és ezzel akartam, hogy működjön. Valamiért nem számol és nem ír ki eredményt és a "Stopper .." kiírás is villódzik. Érdemes-e a megszakításokat használni a stopperben, hol lehet a hiba ami gátolja a működést. A másik kérdésem, pedig, hogy hogyan kell a programot itt feltölteni, hogy olyan szépen sorszámozott sorok legyenek. Én csak a Ctrl C-V- vel tudtam.

#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);

int Startkapcsolo = 2; // Start gomb Pin2-re kotve
int Stopkapcsolo = 3; // Stop gpmb Pin3-ra kotve
volatile int kapcsoloStart = LOW; // Start jelzo valtozo
volatile int kapcsoloStop = LOW; // Stop jelzo valtozo

void setup()
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
attachInterrupt(0, megszakitas1, FALLING);
attachInterrupt(1, megszakitas2, FALLING);
pinMode(12, OUTPUT); // elektromágnes
}

long t = 0; // mért idő
long k = millis(); // kezdő idő
long s ; // megáll idő

void loop() // Főprogram
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Arduino stopper4");
lcd.setCursor(0,1);
lcd.print(t);
lcd.setCursor(12,1);
lcd.print("msec");
}

void megszakitas1() //Start kapcsolohoz tartozo megszakitas
{
if (kapcsoloStart == LOW) // ha a start jelzo változótár törölve van
{
digitalWrite(12,HIGH); // jelző LED be
k = millis(); // idő mérése indul
kapcsoloStart = HIGH; // a Start jelző változó visszaállítása }
}
}

void megszakitas2() //Stop kapcsolohoz tartozo megszakitas
{
if (kapcsoloStop == LOW) // ha a stop jelzo változótár törölve van
{
s = millis();
t = (s - k);
kapcsoloStop = HIGH; // a Stop jelző változó visszaállítása
digitalWrite(12,LOW); // jelz LED ki
}
}
(#) Kera_Will válasza pisti hozzászólására (») Márc 24, 2019 /
 
Idézet:
„másik kérdésem, pedig, hogy hogyan kell a programot itt feltölteni, hogy olyan szépen sorszámozott sorok legyenek. Én csak a Ctrl C-V- vel tudtam.”


Mi lenne ha kinyitnád a szemed ?!
Értelmeznéd az üzenet beírási ablak alatti gombokat esetleg még játszanál is velük .
Egyből közelebb jutnál a megoldáshoz .
OTT van a KÓD zöld gomb, használd.
(#) Kera_Will válasza pisti hozzászólására (») Márc 24, 2019 /
 
  1. #include <LiquidCrystal.h>
  2. LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
  3.  
  4. int Startkapcsolo = 2; // Start gomb Pin2-re kotve
  5. int Stopkapcsolo = 3; // Stop gpmb Pin3-ra kotve
  6. volatile int kapcsoloStart = LOW; // Start jelzo valtozo
  7. volatile int kapcsoloStop = LOW; // Stop jelzo valtozo
  8.  
  9. void setup()
  10. {
  11. digitalWrite(2, HIGH);
  12. digitalWrite(3, HIGH);
  13. attachInterrupt(0, megszakitas1, FALLING);
  14. attachInterrupt(1, megszakitas2, FALLING);
  15. pinMode(12, OUTPUT); // elektromágnes
  16. }
  17.  
  18. long t = 0; // mért idő
  19. long k = millis(); // kezdő idő
  20. long s ; // megáll idő
  21.  
  22. void loop() // Főprogram
  23. {
  24. lcd.clear();
  25. lcd.setCursor(0,0);
  26. lcd.print("Arduino stopper4");
  27. lcd.setCursor(0,1);
  28. lcd.print(t);
  29. lcd.setCursor(12,1);
  30. lcd.print("msec");
  31. }
  32.  
  33. void megszakitas1() //Start kapcsolohoz tartozo megszakitas
  34. {
  35. if (kapcsoloStart == LOW) // ha a start jelzo változótár törölve van
  36. {
  37. digitalWrite(12,HIGH); // jelző LED be
  38. k = millis(); // idő mérése indul
  39. kapcsoloStart = HIGH; // a Start jelző változó visszaállítása }
  40. }
  41. }
  42.  
  43. void megszakitas2() //Stop kapcsolohoz tartozo megszakitas
  44. {
  45. if (kapcsoloStop == LOW) // ha a stop jelzo változótár törölve van
  46. {
  47. s = millis();
  48. t = (s - k);
  49. kapcsoloStop = HIGH; // a Stop jelző változó visszaállítása
  50. digitalWrite(12,LOW); // jelz LED ki
  51. }
  52. }
(#) Kera_Will válasza Kera_Will hozzászólására (») Márc 24, 2019 /
 
itt lent a Kód zöld gomb ha megnyomod
akkor 1 ilyen sort fogsz kapni :
  1.  

üres sor de a code formázó tagek közé vannak zárva egy space ezért üres
Amik közte vannak azok soronként (CRel zárt) sorszámozva lesznek
  1. elso
  2. masodik
  3. stb...

Ez a code kivül van már írva megint
A hozzászólás módosítva: Márc 24, 2019
Következő: »»   516 / 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