Кнопка и одно действие
- Войдите на сайт для отправки комментариев
Пт, 07/06/2013 - 12:40
Привет всем подскажите пожалуйста как сделать так .
Нажимаем на кнопку и держим выполнилось действия в скобках 1 раз, отпускаем кнопку выполнилось другое действия в скобках 1 раз?
const int buttonPin = 11;
const int ledPin = 13;
int buttonState = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop(){
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
else {
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
}
к примеру повесить на прерывание с флагом CHANGED повесив кнопку на порт 3
volatile int state = LOW; void setup() { attachInterrupt(1, blink, CHANGE); } void loop() { } void blink() { if(state) { //do action1 } else { //do action2 } state = !state; }без прерывания:
char state = 0; void loop() { char but = digitalRead(BUTT_PIN); if(but && !state) { //action on press state = 1; } else if(!but && state) { //action on release state = 0; } }Спасибо
А вообще вы бы над своей темой прикрепленную посмотрели Работа с кнопками. В помощь новичку.
А вообще вы бы над своей темой прикрепленную посмотрели Работа с кнопками. В помощь новичку.
Я эту тему смотрел видимо эту част проморгал
Привет всем подскажите пожалуйсто как сделать одно действие по аналоговому в ходу?
int sensePin =2; void setup(){ analogReference(DEFAULT); Serial.begin(9600); } void loop(){ int val = analogRead(sensePin); if ( val>500) { Serial.println("ON"); } if ( val<500) { Serial.println("OFF"); } delay(100); }Если правильно понял задачу, то, например, так:
int sensePin =2; boolean senseIsOn = false; void setup() { analogReference(DEFAULT); Serial.begin(9600); } void loop() { int val = analogRead(sensePin); if ( val>500) { if( !senseIsOn ) { Serial.println("ON"); senseIsOn = true; } } else { if( senseIsOn ) { Serial.println("OFF"); senseIsOn = false; } } delay(100); }Только здесь в районе 500 будет телепаться туда - сюда, нужно добавить гистерезис срабатывания, например, так ( +-20 зона нечувствительности):
if ( val>520) { if( !senseIsOn ) { Serial.println("ON"); senseIsOn = true; } } else if ( val < 480) { if( senseIsOn ) { Serial.println("OFF"); senseIsOn = false; } }Писал на коленке, компилятора нет под рукой, но смысл, я думаю, понятен
Спасибо
01if(sensor>=450&&sensor<=890&&key>85&&key<95)// - если нажата кнопка Up02{03val_Up++;// - прибавляем к переменной единицу при каждой смене цикла.04}05else// - если не нажата...06{07val_Up=0;// - приравниваем значение к нулю.08}09if(val_Up>=10&&sensor>=450&&sensor<=890)// - если достигаем значения 10 циклов или более то ...10{11flag_Auto_Up=0;// - выкл авто режима Up12flag_Auto_Down=0;// - выкл авто режима Down13digitalWrite(11,HIGH);// - двигатель UP14digitalWrite(12,LOW);15Serial.print(" Up ");16val_Up=0;// - присваиваем ноль для следующих нажатий17}1819// - лимит верхний20if(sensor>=891&&sensor<=1024&&key>85&&key<95)21{22digitalWrite(11,LOW);// - стоп23digitalWrite(12,LOW);// - стоп24}Ребята ! подскажите , не нашел похожих примеров в поисковике и в теме про кнопки задавал вопрос , но тишина.
Имеем вот такой кусок кода , работает он так - при удержании аналоговой кнопки в течении 10 циклов LOOP включается двигатель и вращается пока не отпустим кноку.
Хотелось-бы добавить в этот код не используя delay такую функцию как "микро шаг" данного двигателя при кратковременном нажатии на эту же кнопку ( до 10 циклолв LOOP ) и получить такой алгоритм:
Удерживаем кнопку более 2-х циклов но до 10-и - код отработает digitalWrite(11,HIGH) на периуд (микро шаг) который я ему задам - допустим 0.5сек и встанет до следующего нажатия кнопки но ожидая это нажатие не более 10 циклов , если удерживать более 10 циклов исполняется код указанный выше .
Здравствуйте. Подскажите пожалуйста, как сделать такую штуку: нажимаем кнопку - загорается светодиод на плате и горит 2 сек, независимо от того, зажата кнопка или нет, а так же чтобы он не загорался при дальнейшем удержании кнопки. Если можно - в виде программы)) Заранее спасибо.
http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...
Почитайте и на основе примеров сможете сами сделать
Уже прочитал не раз. Ничего подходящего не увидел.
Читайте до тех пор пока не увидите и эту тему тоже.
Доброго времени суток !
по поводу аналогово считывания кнопок, я бы делал так :
#define APIN 2 unsigned char keyBut; // нажатая кнопка или 0 старший бит - флаг нажатия void setup() { keyBut = 0; analogReference(DEFAULT); } void loop() { //////////////////////////////////// это можно вынести в функцию int i1; byte b1; i1 = analogRead(APIN); b1 = 0; i1 -= 100; while(i1 ^ 32768) { i1 -= 100; // 100 - это значение для примера // на самом деле это порог в зависимости от резисторов b1++; } if (b1 != (keyBut & 127)) keyBut = b1 + 128; ////////////////////////////////////////////////////////////////// ////// далее в программе старший бит в keyBut содержит флаг изменения ////// остальное код нажатой клавиши или 0 если клавиша отпущена ////// присчитывание не забываем сбросить флаг keyBut &= ~128; }