Автоматический счётчик
- Войдите на сайт для отправки комментариев
Доброго времени суток Уважаемые форумчане ! В общем нужно сделать счетчик импульсов - с задачей справился, считает и выводит на экран. при включении проигрывается мелодия, всё хорошо! Но хотелось бы чтоб при включении - сначала был текст (что то типа приветствия)- допустим около 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;
}
}
}
}
Может в сетап после вывода приветствия поставить delay(3000)?
сделал - но не то что хотелось бы! получается - включаем девайс - сначала играет мелодия - потом мигает подсветка экрана - выводится текст приветствия и через 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; } } } }дел
сделал - но не то что хотелось бы! получается - включаем девайс - сначала играет мелодия - потом мигает подсветка экрана - выводится текст приветствия и через 4 секунды начинается выполнение основной программы ! можете помочь ? что исправить чтоб приветствие отображалось когда играет мелодия?
где тут "мигает подсветка" - в приложенном коде не нашел.
Если вам надо. чтобы во время мелодии приветсвие уже было на экране - так поменяйте их местами. сначала зажигайте экран, а потом запускайте мелодию