Помогите с Tone

Тема в разделе "Arduino & Shields", создана пользователем user999, 16 авг 2017.

  1. user999

    user999 Гик

    Добрый вечер! При использовании tone для пьезопищалки нарушается работа Ethernet-shilda на SPI и реле на пинах 22 - 35 (начинают без команды включаться).
    Почитал, что tone использует таймер и работа некоторых пинов может быть нарушена. У меня мега.
    Убрал с 5-го пина на 36. Ничего не изменилось.
    Причем происходит это нарушение аппаратно, если отключить провод от пищалки, а код оставить тот же, то все работает без нареканий.

    Приведу часть кода, так как он длинный
    Код (C++):
    #include <SPI.h>
    #include <Ethernet.h>
    #include "Wire.h"


    #define xPin                  A0
    #define yPin                  A1
    #define buttonPin             19
    #define TONE                  36
    #define WATER_FLOW_IN         2
    #define WATER_FLOW_OUT        3
    #define T_WATER_L             22
    #define T_WATER_R             23
    #define T_AIR                 24
    #define PUMP                  25  
    #define TEN                   26
    #define LIGHT                 27
    #define KRAN_IN               28
    #define KRAN_OUT              29
    #define KRAN_MIX              30
    #define KRAN_BAK              31
    #define WATER_LEVEL_BAK_LOW   32
    #define WATER_LEVEL_BAK_HIGH  33
    #define WATER_LEVEL_CUBE_LOW  34
    #define WATER_LEVEL_CUBE_HIGH 35

    void setup() {
      pinMode(xPin,                   INPUT);
      pinMode(yPin,                   INPUT);
      pinMode(buttonPin,              INPUT_PULLUP);
      pinMode(T_WATER_L,              INPUT);
      pinMode(T_WATER_R,              INPUT);
      pinMode(T_AIR,                  INPUT);
      pinMode(TEN,                    OUTPUT);
      pinMode(PUMP,                   OUTPUT);
      pinMode(LIGHT,                  OUTPUT);
      pinMode(KRAN_IN,                OUTPUT);
      pinMode(KRAN_OUT,               OUTPUT);
      pinMode(KRAN_MIX,               OUTPUT);
      pinMode(KRAN_BAK,               OUTPUT);
      pinMode(WATER_LEVEL_BAK_LOW,    INPUT_PULLUP);
      pinMode(WATER_LEVEL_BAK_HIGH,   INPUT_PULLUP);
      pinMode(WATER_LEVEL_CUBE_LOW,   INPUT_PULLUP);
      pinMode(WATER_LEVEL_CUBE_HIGH,  INPUT_PULLUP);
      pinMode(WATER_FLOW_OUT,         INPUT_PULLUP);
      pinMode(TONE,                   OUTPUT);
      digitalWrite(TEN,               OFF);
      digitalWrite(PUMP,              OFF);
      digitalWrite(LIGHT,             OFF);
      digitalWrite(KRAN_IN,           OFF);
      digitalWrite(KRAN_OUT,          OFF);
      digitalWrite(KRAN_MIX,          OFF);
      digitalWrite(KRAN_BAK,          OFF);
      digitalWrite(TONE,              LOW);
     
      Serial.begin(9600);
    if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed to configure Ethernet using DHCP");
        Ethernet.begin(mac, ip);
      }
     
      music(1);
      attachInterrupt(0, flowIn, RISING);      // активация расходомера на 2 пине (0)
      attachInterrupt(1, flowOut, RISING);     // активация расходомера на 3 пине (1)
      attachInterrupt(4, clickButton, CHANGE); // активация клика на кнопку на 19 пине (4)
    }
    void loop() {
    }
    void music(int t) {
      switch(t)
      {
        case 1: //старт
          tone(TONE, 1760, 250);
          delay(250);
          tone(TONE, 1976, 250);
          delay(250);
          tone(TONE, 2093, 250);
          delay(250);  noTone(TONE);
          break;
       case 2: //стоп  
          tone(TONE, 2093, 250);
          delay(250);
          tone(TONE, 1976, 250);
          delay(250);
          tone(TONE, 1760, 250);
          delay(250);  noTone(TONE);
        default: //клик
          tone(TONE, 2093, 250);
          delay(250); noTone(TONE);
        break;
      }
    }
     
     
  2. rkit

    rkit Гуру

    Паршивая разводка где-то ловит помехи. Либо паршивое питание.
     
  3. Onkel

    Onkel Гуру

    Странный эффект. Пищалку между пином и землей? Попробуйте включить через резистор, достаточно большого сопротивления. Конденсатор по питанию добавить попробуйте.
     
  4. user999

    user999 Гик

  5. шилд рободиновский не используется?
     
  6. user999

    user999 Гик

    используется ethernet-шилд от robotdyn
     
  7. А, ну да, не заметил. У меня, кароч, на их шилдах с их пъезо тоже ерунда какая-то)