Питание Arduino

Тема в разделе "Силовая электроника", создана пользователем 50VAJJ, 28 май 2017.

  1. 50VAJJ

    50VAJJ Нерд

    Да. Спасибо всем.
     
  2. rkit

    rkit Гуру

    Через разъем питания от 6 до 12 вольт допустимо.
    Через разъем usb строго 5.
     
    50VAJJ нравится это.
  3. mcureenab

    mcureenab Гуру

    Даже заготовка есть

    Код (C++):
    // Dump_A0

    #define prog_int8_t int8_t

    #include "fix_fft.h"

    #define ASIZE 128

    void setup() {
      // put your setup code here, to run once:
      pinMode(A0, INPUT);
      Serial.begin(250000);
      while(!Serial){  }
      Serial.println(F("Starting..."));
    }

    void loop() {
      // put your main code here, to run repeatedly:
      char data[ASIZE + 1];
      {
        char im[ASIZE + 1];
        unsigned long us1(0);
        for ( size_t i = 0 ; i < ASIZE + 1 ; ++i )
        {
          unsigned long us2 = micros();
          data[i] = ( analogRead(A0) - 511 ) / 1;
          im[i] = 0;
    //    im[i] = ( us2 - us1 ) - 120; // Фаза сэмпла время от времени сдвигается. Но не ясно как её учитывать.
          us1 = us2;
        }
        Serial.println((int)data[0]);
        fix_fft(data + 1, im + 1, 7, 0);
        for ( size_t i = 1 ; i < ASIZE / 2 ; ++i )
        {
          data[i] = sqrt(data[i] * data[i] + im[i] * im[i]) / 1; // Расчет амплитуды и масштабирование.
        }
        for ( size_t j = 0 ; j < 8 ; ++j ) // матрица 8 стоблцов
        {
          size_t k = j * 8;
          char max_(0);
          for ( size_t i = 0 ; i < 8 ; ++i )
          {
            max_ = max(max_, data[k+i+1]);
          }
          data[j] = (int)max_ * 8 / 45;
    //    data[j] = ( (int)data[k+1] + data[k+2] + data[k+3] + data[k+4] + data[k+5] + data[k+6] + data[k+7] + data[k+8] ) / 15; // Группировка по столбцам матрицы
        }
      }
      for ( uint8_t j = 0 ; j < 8 ; ++j ) // заполняем матрицу
      {
        for ( size_t i = 0 ; i < 8 ; ++i )
        {
         if ( j < data[i] )
           Serial.print('@', 0);  // включаем ячейку
         else
           Serial.print(' ', 0); // выключаем ячейку
        }      
        Serial.println("");
      }
      delay(500); // Задержка чтобы монитор порта не перегружать
    }
     
     
  4. 50VAJJ

    50VAJJ Нерд

    У меня попроще:
    Код (C++):
    const int micPinL = A5;
    const int micPinR = A4;

    const int LED = 13;


    void setup() {
      Serial.begin(9600);
      pinMode(LED, OUTPUT);
    }

    void loop() {
        int mvL = analogRead(micPinL) * 5.0 / 1024.0 * 1000.0; // значения в милливольтах
            Serial.println(mvL); // выводим в порт
            /* Пороги срабатывания светодиодов настраиваются
               вами экспериментальным методом: */

            if (mvL > 2500 && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480) { // порог срабатывания зелёного светодиода, мВ
              digitalWrite(LED, HIGH);
            }
            else if(mvL < 2200 && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480){
                digitalWrite(LED, 120);
            }
            else if(mvL < 2000 && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480){
                digitalWrite(LED, 80);
            }
            else if(mvL < 1500 && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480){
                digitalWrite(LED, 40);
            }
            else if(mvL < 1000 && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480){
                digitalWrite(LED, 20);
            }
            else{
                digitalWrite(LED, LOW);
            }
    }
     
  5. mcureenab

    mcureenab Гуру

    Это зачем?

    Код (C++):
    && mvL != 2485 && mvL != 2495 && mvL != 2490 && mvL != 2480
    тем более, что это условие заведомо истинно.
    везде есть условие: или mvL <2200 или mvL >2500.
     
  6. 50VAJJ

    50VAJJ Нерд

    Точно, протупил...
     
  7. mcureenab

    mcureenab Гуру

    А это?

    Код (C++):
    digitalWrite(LED, 120);
    оно эквивалентно

    Код (C++):
    digitalWrite(LED, HIGH);
    видимо analogWrite надо было.

    И где тут 12 светодиодов? На один пин Arduino только один светодиод можно прицепить. Больше пин по току не потянет.
     
  8. 50VAJJ

    50VAJJ Нерд

    Я на плату с 13-го вывожу, а от неё по ко всем резисторам.
     
  9. 50VAJJ

    50VAJJ Нерд

    И я написал, что пока их 5
     
  10. 50VAJJ

    50VAJJ Нерд

    Странно, проверил digitalWrite(LED, 20); Светит на всю мощность.
     
  11. mcureenab

    mcureenab Гуру

    так нельзя делать. убьёте пин.
     
  12. mcureenab

    mcureenab Гуру

    естественно.
    digitalWrite(LED, 20) это то же самое что digitalWrite(LED, HIGH)
     
  13. 50VAJJ

    50VAJJ Нерд

    А как сделать, что-бы светил на 20%?
     
  14. mcureenab

    mcureenab Гуру

    Вы хотите подключить 12 светодиодов и управлять их яркостью?
     
  15. 50VAJJ

    50VAJJ Нерд

    Ясно, тогда всего пинов там 14? Если считать с RX<-0 и TX->1? Их же так-же можно использовать?
     
  16. 50VAJJ

    50VAJJ Нерд

    Да, только вместе.
     
  17. mcureenab

    mcureenab Гуру

    analogWrite(LED, 20 * 100 / 256 );
     
    50VAJJ нравится это.
  18. mcureenab

    mcureenab Гуру

    Не все пины могут управлять яркостью. Только со значком ~.
     
  19. 50VAJJ

    50VAJJ Нерд

    Ужас...
     
  20. 50VAJJ

    50VAJJ Нерд

    То-же самое, хотя подключил на "правильный пин".