Ви не увійшли.
Сторінки 1
Короче , я понял, тут хрен дождешься реальной помощи, в основном все советуют учить язык, напрягать мозги и т.п. GREENу еще раз спасибо за реальную помощь, благодаря его коду я понял работу millis(). Куда пиво отправлять?)
Так с бузером мне смогут показать как выйти из ситуации? Тупо не могу запустить автоцикл. Есть еще мысль постоянно инвертировать состояние/флаг, наверное заработает, но мне кажется это будет некорректный код. Может именно по этой теме есть у кого-то литература, статья?
Сама логика была понятна, допускаю критические ошибки в самом коде часто плюс много чего не знаю. Будет практика, будет люди, которые смогут подсказать и направить все будет получатся. Желание, мозги и идеи тоже есть.
Код Вячеслав Азарова интересный, но я его пока не понимаю. Оператор switch еще не использовал, но хочу освоить.
GREEN, огромное спасибо! Код работает, на его основе вроде разобрался с таймером этого типа, уже пишу сам, не подсматривая в подсказки)). Переписал его под конкретные нужны: в место леда бузер, а потом сирена. Запуск с концевика.
Теперь столкнулся с другой проблемой: нужна звук с пьезоизлучателя разных тонов в цикле, с возможностью его отключить. Не проблема его запустить чем то типа кнопка и несколько раз скопировать код, но хочу поставить эту часть кода вызывать как функцию, но не понимаю как при вызове функции, она стартовала. Как сделать в виде функции знаю.
#define button1Pin 5
#define BUZZER 2
unsigned long interv;
void setup() { /////////SETUP/////////
pinMode(button1Pin, INPUT_PULLUP);
}
void loop(){ /////////LOOP/////////
boolean button_1 = !digitalRead(button1Pin);
if (button_1 == HIGH) {
tone(BUZZER,600,500);
interv = millis();
}
if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300,500);
interv = millis();
}
if(interv&&millis() - interv > 500) {
interv = 0;
tone(BUZZER, 300);
interv = millis();
}
}
Уважаемый, GREEN! Вроде код работает, это я начал переводить кнопки с резисторов на INPUT_PULLUP. Но печему то отрабатывает по 15 секунд вместо 10. Опять таки пока посмотрел поверхностно.
Уважаемый, GREEN! Я пробовал подобным способом, но у меня не получилось. Пока, что код не работает. Горит 13, при нажатии, гаснет. У меня сейчас клиент по компу, закончу посмотрю скеч, может я что то нахомутал не так. А за отзыв на пой призыв о помощи ОГРОМНОЕ СПАСИБО. А как заработает без проблем с меня пивасик)). Я обязательно отпишусь сегодня.
Я пробовал. Пробовал с булин переменными, но вторая лампа либо вообще не зажигается, либо зажигается сама в цикле, либо постоянно горит. Топо не хватает либо знаний, либо клепки, либо вообще подход ложный, либо все вместе. Сюда обращаюсь только в крайних случаях, после нескольких дней самостоятельных поисков решений когда уже опускаются руки, не люблю напрягать других людей и вообще кайфую когда получается у самого, но тут уже резерв терпения закончился. Сам терпеть не могу когда люди не включают мозг и хотят, что бы все за них сделали. По этому прошу более конкретной помощи со скетчем, либо действительно дельного совета куда копать. То за что этот скетч отвечает я прекрасно знаю, но не знаю как из него сделать то что нужно.
P.S.
Я не программер, я самоучка, что в компьютерной тематике, что в программировании ардуины. С компьютерами я больше 15 лет работаю и было у кого спросить, то в программировании даже посоветоваться, кроме форума не с кем. Хотя есть мысли пойти на курсы программирования и этим зарабатывать на жизнь, но это пока мысли, сейчас я битву с ардуиной проигрываю(.
Затея какая: от нажатия кнопки должен загореться один светодиод. По истечении 10 секунд первый светодиод должен погаснуть, а второй зажечься тоже на 10 секунд. При этом всем, нужно при нажатии второй кнопки весь этот процес прервать и вернуться в основную программу. Вот взял чужой скетч и на его основе пытаюсь реализовать. Второй LED либо совсем не зажигается, либо зажигается автоматически. Может другой подход к реализации должен быть, не через milles() ?
const int button1Pin = 5;
const int button2Pin = 3;
const int led1Pin = 13;
const int led2Pin =4 ;
unsigned long led1OnTime;
unsigned long led2OnTime;
//bool led1On; //Изначально было влючены везде эти переменные, но я их отключил и разницы в работе не увидел.
//bool led2On;
void setup() { /////////SETUP/////////
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
//led1On = false;
//led2On = false;
}
void loop(){ /////////LOOP/////////
if (digitalRead(button1Pin) == HIGH) { //Кнопка1 нажата, лед включен, статус вкл,
digitalWrite(led1Pin, HIGH);
//led1On = true;
led1OnTime = millis();
}
if (digitalRead(button2Pin) == HIGH) { //Кнопка2 нажата, лед включен, статус вкл,
digitalWrite(led2Pin, HIGH);
//led2On = true;
led2OnTime = millis();
}
//if(led1On)
if(millis() - led1OnTime > 10000) {
digitalWrite(led1Pin, LOW);
//led1On = false;
}
//if(led2On)
if(millis() - led2OnTime > 10000) {
digitalWrite(led2Pin, LOW);
//led2On = false;
}
}
Из Вашего кода я почти ничего не понял, наверное не соображаю уже ничего сегодня. Но главное все-таки дошло благодаря вашей подсказке, что после принятия uidDec значения, его стоит обнулить. Огромное спасибо!!! Паузы что бы не словить повторю Это пока только наброски из того что я начинал когда-то, а потом забросил, так что еще все буду доделывать. Я из тех новичков, который учиться сразу на практике и еще слишком много не знаю.
Приветствую!!!
Нужно, что бы с RFID метки включалась сигнализация и выключалась при повторном подношении. В интернете куча того, что включается и через паузу отключается, но мне нужно именно по карточке и включение и отключение. С инфракрасным датчиком работает все, с ДУ тоже с одной кнопки всё работает, а вот с RFID не в какую. При подношении он снимает снимает с охраны, а через 2 секунды снова ставит. Но карточку я второй раз не подношу. Целый день убил, ничего не понимаю. Подскажите, пожалуйста, только по существу, где я облажался, сил больше нет.
#include <SPI.h>
#include <MFRC522.h> // библиотека "RFID".
#define SS_PIN 10
#define RST_PIN 9
#define STATE_LED 7
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате
int State=1;
void setup() {
Serial.begin(9600);
Serial.println("Waiting for card...");
SPI.begin(); // инициализация SPI / Init SPI bus.
mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card.
pinMode(STATE_LED, OUTPUT);
}
void loop() {
// Поиск новой метки
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Выбор метки
if ( ! mfrc522.PICC_ReadCardSerial()) {
return;
}
uidDec = 0;
// Выдача серийного номера метки.
for (byte i = 0; i < mfrc522.uid.size; i++)
{
uidDecTemp = mfrc522.uid.uidByte[i];
uidDec = uidDec * 256 + uidDecTemp;
}
Serial.println("Card UID: ");
Serial.println(uidDec); // Выводим UID метки в консоль.
///////////////////////////////////////////////////////////////////////////////////////////////////////
if (uidDec == 3309163877 && State==1){
Serial.println("Security state: Off");
tone(2, 700, 500); // Делаем звуковой сигнал, Открытие
State = 0;
delay(2000); // пауза 3 сек и механизм запирается.
}
if (uidDec == 3309163877 && State==0){
State=1;
Serial.println("Security state: On");
tone(2, 700, 1000); // Делаем звуковой сигнал, Открытие
delay(2000); // пауза 2 сек и механизм запирается.
}
}
Уважаемый, yus12! Спасибо, что откликнулись на мой зов!) Все, что Вы написали мне полностью понятно. Я не могу понять саму логику кода. В первом скетче
if (press == HIGH) - это уловие что в момент нажатия кнопки? Это понятно.
{
if(toggle) - если taggle истина? Если так, то зачем его обозначать здесь если он уже прописан как переменная = истина?Или как??
{
servo.write(90); то серва на 90 и после этой операции taggle не истина?
toggle = !toggle;
}
else
{
servo.write(20); - ну это и так понятно.
toggle = !toggle;
Это все что я хочу понять для себя в первом счетче. Во втором все понятно кроме самой пошаговой логике этой строчки :digitalWrite(LedPin, !digitalRead(LedPin));. Или это вообще готовая функция, кроме LedPin и она не поддается пошаговой расшифровке, а сразу означает изменение состояния? Может я не правильно выражаюсь, но надеюсь суть вопроса понятна.
Мда, для меня это уже больше астрофизика чем математика)). Я в системном администрировании не плохо понимаю, а вот программирование только сейчас меня догнало. Первый раз в жизни написал на форуме, поскольку в этот раз реально не смог найти нужны ответ и похоже вряд ли мне тут помогут. И вроде ничего такого сложного не спросил для понимающих...
А я как по Вашему учусь? С потолка? Или Вы учились чисто по книгам, без наставников, преподавателей и никогда никому не задавали вопросов? И вообще, было бы не плохо найти тут друзей с общими интересами и взаимовыручкой. А книга по С++ и уроки в ютюбе так могут?
Cкетч №1 управления сервой одной кнопкой. Я не могу понять пошаговую логику как оно работает, а без понимания не могу продвинуться дальше. Есть скетч №2 - простой триггер для светодиода. Я не понимаю выражение: digitalWrite(LedPin, !digitalRead(LedPin));. Получается две разных функции и обе на LedPin? И можно ли во втором скетче вместо светодиода управлять сервой как в первом скетче? Не помешает и литература по программным триггерам (если я правильно выражаюсь). Может кому-то не лень в телефонном режиме растолковать мне неучу)? Заранее спасибо, очень жду, реально застрял в этом месте.
Виталий. Киев, Деснянский.
Скетч №1
#include <Servo.h>
int button = 5; //button pin, connect to ground to move servo
int press = 0;
Servo servo;
boolean toggle = true;
void setup()
{
pinMode(button, OUTPUT); //arduino monitor pin state
servo.attach(7); //pin for servo control signal
digitalWrite(5, LOW); //enable pullups to make pin high
}
void loop()
{
press = digitalRead(button);
if (press == HIGH)
{
if(toggle)
{
servo.write(90);
toggle = !toggle;
}
else
{
servo.write(20);
toggle = !toggle;
}
}
delay(500); //delay for debounce
}
Скетч №2
int LedPin = 13; // Подключаем светодиод к порту 13
int ButPin = 4; // Подключаем кнопку к выходу 10
void setup()
{
pinMode(LedPin, OUTPUT); // Инициализируем порт "ledPin" как выходной
}
void loop(){
if(digitalRead(ButPin) == HIGH) // если кнопка нажата
{
digitalWrite(LedPin, !digitalRead(LedPin)); // то переключаем состояние LedPin
delay(500);
}
}
Сторінки 1