Автоматический счётчик

pred161
Offline
Зарегистрирован: 11.02.2019

Доброго времени суток Уважаемые форумчане ! В общем нужно сделать счетчик импульсов - с задачей справился, считает и выводит на экран. при включении проигрывается мелодия, всё хорошо! Но хотелось бы чтоб при включении - сначала был текст (что то типа приветствия)- допустим около 3 секунд, а потом запускалась сама основная программа. неделю уже пытаюсь сообразить - но что то никак не выходит ! а сам счётчик работает - счетчик импульсов, так же ардуино управляет шаговым двигателем через драйвер TB6600. кнопки на 8 и 9 пине - старт и стоп. прошу сильно не ругаться ) - код собирал из 2 разных. так что может где то косяки есть( Подскажите пожалуйста  как мне реализовать мою *хотелку* ? код прилагаю:

#include "pitches.h"                        // заголовочный файл с названиями нот и значениями частот
#include <Wire.h>
#include <LCD_1602_RUS.h>

#define sentido_horario digitalWrite(5, HIGH);     // define comando para sentido horário
#define sentido_antihorario digitalWrite(5, LOW);  // define comando para sentido anti-horário
#define habilita_motor digitalWrite(7, LOW);       // define comando para habilitar motor
#define inibe_motor digitalWrite(7, HIGH);   // define comando para desligar motor

#define SPEAKER 11                          // вывод для подключения динамика

// массив нот
int notes[] = {
  NOTE_A4, NOTE_E3, NOTE_A4, 0,
  NOTE_A4, NOTE_E3, NOTE_A4, 0,
  NOTE_E4, NOTE_D4, NOTE_C4, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_C4, NOTE_D4,
  NOTE_E4, NOTE_E3, NOTE_A4, 0
};

// массив длительностей звучания нот (в мс)
int times[] = {
  250, 250, 250, 250,
  250, 250, 250, 250,
  125, 125, 150, 125, 125, 125, 150, 125,
  250, 250, 250, 250
};

int velocidade = 100;     // Variável que informa a velocidade do motor
// 0 = motor parado e 1024 = velocidade máxima;

int habilita = 0;       //Variável que guarda o resultado dos comando dos botões de liga e desliga
// Se 0 = Para Motor // Se 1 = Roda o Motor

int sentido = 1;        // Variável que informa o sentido de giro do motor
// se 1 = Sentido Horário // Se 2 = Sentido anti-horário

int modo_de_operacao = 0;  // Variável que guarda a combinação dos botões para o programa saber o que fazer
// Essa variável pode ter 3 valores
// 0 -> desliga motor
// 1 -> Liga o Motor no Sentido Horário
// 2 -> Liga o Motor no sentido Anti-horário
#include <Wire.h>
#include <LCD_1602_RUS.h>




LCD_1602_RUS lcd(0x27, 16, 2);

long  x;
long  y;
long  z;

void setup()



{
  for (int i = 0; i < 20; i++)
  {
    tone(SPEAKER, notes[i], times[i]);
    delay(times[i]);

  }
  Serial.begin(9600);

  lcd.init();
  lcd.backlight();


  x = 0;

  y = 0;

  z = 0;

  pinMode(2, INPUT);
  lcd.setCursor(0, 0);
  lcd.print("Этикеток:");
  lcd.backlight();

  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);      // Configura pinos 5, 6 e 7 como saídas digitais
  pinMode(7, OUTPUT);
}





void loop()
{


  if (digitalRead(8) == 1)  // Verifica se o botão liga (primeiro botão) foi pressionado
    habilita = 1;             // Se sim altera a variável habilita para 1 = Liga motor

  if ( digitalRead(9) == 1) // Verifica se o botão desliga (segundo botão) foi pressionado
    habilita = 0;             // Se sim altera a variável habilita para 0 = Desliga motor



  modo_de_operacao = sentido * habilita;  // Neste ponto cruzamos as informações das chaves
  // e geramos 3 possíveis combinações:
  // 2 x 1 = 2 \
  // 1 x 1 = 1  \ Os resultados podem ser
  // 1 x 0 = 0  / 0,  ou 2
  // 2 x 0 = 0 /


  {
    x = digitalRead(2);
    if (x == 0) {
      y = 1;

    }
    if (y == 1) {
      y = 1;
      if (x == 1) {
        y = 0;
        z = z + 1;
        Serial.println(z);
        lcd.setCursor(10, 0);
        lcd.print(z);



      }

      switch (modo_de_operacao)       //Verifica o valor da variável modo_de_operacao
      {
        case 0:                    // Se for 0
          inibe_motor                // Para o motor
          digitalWrite(6, LOW);      // Para de enviar pulsos para o Driver
          break;

        case 1:                       // Se for 1
          habilita_motor                // Liga o motor
          sentido_horario                // Liga o sentido horário
          velocidade = analogRead(A0);   // Lê o valor do potenciômetro
          tone(6, velocidade);         // Envia o valor do potenciômetro em forma de frequencia para o driver
          break;

        case 2:                      // Se for 2
          habilita_motor              // Liga o motor
          sentido_antihorario           // Liga o sentido anti-horário
          velocidade = analogRead(A0);    // Lê o valor do potenciômetro
          tone(6, velocidade);      // Envia o valor do potenciômetro em forma de frequencia para o driver
          break;
      }
    }
  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Может в сетап после вывода приветствия поставить delay(3000)?

pred161
Offline
Зарегистрирован: 11.02.2019

сделал - но не то что хотелось бы! получается - включаем девайс - сначала играет мелодия - потом мигает подсветка экрана - выводится текст приветствия и через 4 секунды начинается выполнение основной программы ! можете помочь ? что исправить чтоб приветствие отображалось когда играет мелодия?  код прилагаю : 

#include "pitches.h"                        // заголовочный файл с названиями нот и значениями частот
#include <Wire.h>
#include <LCD_1602_RUS.h>

#define sentido_horario digitalWrite(5, HIGH);     // define comando para sentido horário
#define sentido_antihorario digitalWrite(5, LOW);  // define comando para sentido anti-horário
#define habilita_motor digitalWrite(7, LOW);       // define comando para habilitar motor
#define inibe_motor digitalWrite(7, HIGH);   // define comando para desligar motor

#define SPEAKER 11                          // вывод для подключения динамика







// массив нот
int notes[] = {


  NOTE_B7, NOTE_D6, NOTE_B7, 0,

  NOTE_B7, NOTE_D6, NOTE_B7, 0,

  NOTE_F7, NOTE_D7, NOTE_C7, NOTE_B7, NOTE_B7, NOTE_B7, NOTE_C7, NOTE_D7,

  NOTE_E7, NOTE_D6, NOTE_B7, 0

};



// массив длительностей звучания нот (в мс)

int times[] = {

  250, 250, 250, 250,

  250, 250, 250, 250,

  125, 125, 150, 125, 125, 125, 150, 125,

  250, 250, 250, 250

};


int velocidade = 100;     // Variável que informa a velocidade do motor
// 0 = motor parado e 1024 = velocidade máxima;

int habilita = 0;       //Variável que guarda o resultado dos comando dos botões de liga e desliga
// Se 0 = Para Motor // Se 1 = Roda o Motor

int sentido = 1;        // Variável que informa o sentido de giro do motor
// se 1 = Sentido Horário // Se 2 = Sentido anti-horário

int modo_de_operacao = 0;  // Variável que guarda a combinação dos botões para o programa saber o que fazer
// Essa variável pode ter 3 valores
// 0 -> desliga motor
// 1 -> Liga o Motor no Sentido Horário
// 2 -> Liga o Motor no sentido Anti-horário
#include <Wire.h>
#include <LCD_1602_RUS.h>





LCD_1602_RUS lcd(0x27, 16, 2);

long  x;
long  y;
long  z;

void setup()



{
  for (int i = 0; i < 20; i++)
  {
    tone(SPEAKER, notes[i], times[i]);
    delay(times[i]);




  }
  Serial.begin(9600);

  lcd.init();
  lcd.backlight();

  {


    lcd.backlight();
    lcd.setCursor(2, 0);
    lcd.print("Торговый Дом");
    lcd.setCursor(4, 1);
    lcd.print("КУНДРАТ");
    delay(4 * 1000);
    lcd.clear();

  }

  x = 0;

  y = 0;

  z = 0;

  pinMode(2, INPUT);
  lcd.setCursor(0, 0);
  lcd.print("Этикеток:");
  lcd.backlight();

  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);      // Configura pinos 5, 6 e 7 como saídas digitais
  pinMode(7, OUTPUT);
}





void loop()
{


  if (digitalRead(8) == 1)  // Verifica se o botão liga (primeiro botão) foi pressionado
    habilita = 1;             // Se sim altera a variável habilita para 1 = Liga motor

  if ( digitalRead(9) == 1) // Verifica se o botão desliga (segundo botão) foi pressionado
    habilita = 0;             // Se sim altera a variável habilita para 0 = Desliga motor



  modo_de_operacao = sentido * habilita;  // Neste ponto cruzamos as informações das chaves
  // e geramos 3 possíveis combinações:
  // 2 x 1 = 2 \
  // 1 x 1 = 1  \ Os resultados podem ser
  // 1 x 0 = 0  / 0,  ou 2
  // 2 x 0 = 0 /


  {
    x = digitalRead(2);
    if (x == 0) {
      y = 1;

    }
    if (y == 1) {
      y = 1;
      if (x == 1) {
        y = 0;
        z = z + 1;
        Serial.println(z);
        lcd.setCursor(10, 0);
        lcd.print(z);



      }

      switch (modo_de_operacao)       //Verifica o valor da variável modo_de_operacao
      {
        case 0:                    // Se for 0
          inibe_motor                // Para o motor
          digitalWrite(6, LOW);      // Para de enviar pulsos para o Driver
          break;

        case 1:                       // Se for 1
          habilita_motor                // Liga o motor
          sentido_horario                // Liga o sentido horário
          velocidade = analogRead(A0);   // Lê o valor do potenciômetro
          tone(6, velocidade);         // Envia o valor do potenciômetro em forma de frequencia para o driver
          break;

        case 2:                      // Se for 2
          habilita_motor              // Liga o motor
          sentido_antihorario           // Liga o sentido anti-horário
          velocidade = analogRead(A0);    // Lê o valor do potenciômetro
          tone(6, velocidade);      // Envia o valor do potenciômetro em forma de frequencia para o driver
          break;
      }
    }
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

дел

b707
Offline
Зарегистрирован: 26.05.2017

pred161 пишет:

сделал - но не то что хотелось бы! получается - включаем девайс - сначала играет мелодия - потом мигает подсветка экрана - выводится текст приветствия и через 4 секунды начинается выполнение основной программы ! можете помочь ? что исправить чтоб приветствие отображалось когда играет мелодия? 

где тут "мигает подсветка" - в приложенном коде не нашел.

Если вам надо. чтобы во время мелодии приветсвие уже было на экране - так поменяйте их местами. сначала зажигайте экран, а потом запускайте мелодию