Проблема с ИК-пультом дистанционного управления и кнопкой для digispark
Поскольку digispark более компактен и подходит для моего электрического применения. Следуя той же процедуре в ответеbrtiberio. Я попытался преобразовать скрипт из Arduino UNO в digispark, но безуспешно
#define irPin 2
const int buttonPin1 = 0;
const int buttonPin2 = 4;
const int relay1 = 1;
const int relay2 = 3;
int Relay1State = 0;
int Relay2State = 0;
int master1State = 0;
int master2State = 0;
int button1State;
int button2State;
int lastButton1State;
long lastDebounceTime1 = 0;
int lastButton2State;
long lastDebounceTime2 = 0;
long debounceDelay = 50;
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
digitalWrite(relay1, Relay1State);
digitalWrite(relay2, Relay2State);
}
void loop() {
int key = getIrKey();
if(key == 7388){
Relay1State = !Relay1State;
if(Relay1State == true)
digitalWrite(relay1, HIGH);
else
digitalWrite(relay1, LOW);
}
if(key == 1778){
Relay2State = !Relay2State;
if(Relay2State == true)
digitalWrite(relay2, HIGH);
else
digitalWrite(relay2, LOW);
}
}
int getIrKey(){
int len = pulseIn(irPin,LOW);
int key, temp;
key = 0;
//Serial.print("len=");
//Serial.println(len);
if(len > 6000) {
for(int i=1;i<=32;i++){
temp = pulseIn(irPin,HIGH);
if(temp > 1000)
key = key + (1<<(i-17));
}
}
if(key < 0 )
key = -key;
//if(key)
//Serial.println(key);
delay(250);
return key;
//**********************//
int reading = digitalRead(buttonPin1);
if (reading != lastButton1State) {
lastDebounceTime1 = millis();
}
if ((millis() - lastDebounceTime1) > debounceDelay) {
if (reading != button1State) {
button1State = reading;
if (button1State == HIGH) {
master1State = !master1State;
Relay1State = master1State;
}
}
}
digitalWrite(relay1, Relay1State);
lastButton1State = reading;
//*******************************//
int reading2 = digitalRead(buttonPin2);
if (reading2 != lastButton2State) {
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) {
if (reading2 != button2State) {
button2State = reading2;
if (button2State == HIGH) {
master2State = !master2State;
Relay2State = master2State;
}
}
}
digitalWrite(relay2, Relay2State);
lastButton2State = reading2;
}
Какой-нибудь совет, пожалуйста?
@Mah , 👍1
Обсуждение1 ответ
Лучший ответ:
Ваш код кнопки находится в функции int getIrKey()
. Но он никогда не выполняется, потому что перед этим вы выполняете return key;
. С этим вы выходите из функции и возвращаете значение ключа
. Все, что приходит после оператора return, не будет выполнено.
Ввод кода кнопки в эту функцию не имеет смысла в первую очередь (поскольку кнопки не используются для "получения нажатой ИК-клавиши"). Вместо этого попробуйте поместить его в функцию loop()
после другого кода реле.
Спасибо крисл. Сейчас он работает нормально., @Mah
Если вы считаете, что мой ответ был правильным, вы можете отметить его как правильный, чтобы другие могли видеть и учиться на этом., @chrisl
Извините, я забыл об этом., @Mah
- Использование VS1838B с Arduino
- Связь последовательного порта Digispark
- Как выбрать вывод передачи в библиотеке IRremote для Arduino Uno?
- Как увеличить расстояние обнаружения на датчике обхода препятствий Arduino KY-032?
- Ошибка "collect2.exe: error: ld returned 1 exit status"
- Библиотеки I2C для ATTiny85?
- Как подключить ИК-передатчик и модуль приемника?
- ATtiny85 Digispark clones failing USB handshake - как их запрограммировать?
не преуспеть
- это не описание проблемы, @jsotolaНе знаете, почему вы имеете в виду "преобразовать скрипт из Arduino UNO в digispark"? [Библиотека IRremote](https://github.com/Arduino-IRremote/Arduino-IRremote#supported-boards) поддерживает DigiSpark (и ATtiny85) без необходимости какого-либо преобразования., @hcheung
Какое ядро Arduino вы используете? Если вы используете [ATTinyCore](https://github.com/SpenceKonde/ATTinyCore), вы можете использовать библиотеку IRremote без каких-либо проблем., @hcheung
Удаленная часть работает хорошо. проблема только в кнопочной функции. это не работает., @Mah
@Mah не могли бы вы, пожалуйста, поделиться своими окончательными кодами? Я очень в этом нуждаюсь, @user2683752