Алгоритм работы такой и он меня полностью устраивает: Пин 4 замыкаем с "+5в" светодиод не горит , передатчик передаёт радио пакет - прибор откл. Пин 4 размыкаем от "+5в" светодиод горит , передатчик передаёт радио пакет - прибор вкл. Если скетч без флагов , то прибор включается через раз, т.е. замкнул отпустил пин 4 от "5в" - прибор на приёмнике вкл. Ещё замкнул отпустил - прибор на приёмнике выкл. Так не устраивает.
То есть подтяжки к +5 внутренним резистором в одном случае хватает, в другом нет. И голову сломали почему так. А сделать нормально не хочется по каким то убеждениям.
Афтор, только успокойтесь, идите тестируйте, в ближайшую неделю Вас не ждем!! Код (C++): #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int LedPin = 13; // Подключаем светодиод к порту 13 int ButPin = 4; // Подключаем кнопку к выходу 4 int flag = 0; // флаг состояния void setup() { pinMode(LedPin, OUTPUT); pinMode(ButPin, OUTPUT); digitalWrite(ButPin, LOW); mySwitch.enableTransmit(5); } void loop() { if(digitalRead(ButPin) == HIGH && flag == 0) { digitalWrite(LedPin, HIGH); mySwitch.send(7777777, 24); flag = 1; } if(digitalRead(ButPin) == LOW && flag == 1) { difitalWrite(LedPin, LOW); //не горит mySwitch.send(7777777, 24); flag = 0; }
Ура, ой спасибо тебе добрый человек что ткнул носом, заработало ведь. И на UNO и HAHO всё как надо. Остался вопрос, почему в UNO работало, а HAHO нет. Полность рабочий код для всех ардуинок. Код (C++): [code] #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int LedPin = 13; // Подключаем светодиод к порту 13 int ButPin = 4; // Подключаем кнопку к выходу 10 int flag = 0; // флаг состояния void setup() { pinMode(LedPin, OUTPUT); pinMode(ButPin, OUTPUT); digitalWrite(ButPin, LOW); mySwitch.enableTransmit(5); } void loop() { if(digitalRead(ButPin) == LOW && flag == 0) { digitalWrite(LedPin, INPUT);//горит mySwitch.send(8590337, 24); //of flag = 1; } if(digitalRead(ButPin) == HIGH && flag == 1) { digitalWrite(LedPin, OUTPUT); //не горит mySwitch.send(8590337, 24); //of flag = 0; } delay(60); } [/code]
Код (C++): pinMode(ledPin, OUTPUT); //настроит пин как выход pinMode(ledPin, INPUT); //настроит пин как вход и не даст желаемого digitalWrite(ledPin, HIGH); //подаст на пин высокий сигнал, т.е включит светодиод digitalWrite(ledPin, LOW); //подаст на пин низкий сигнал, т.е выключит светодиод
весь смысл в том, что pinMode когда задается INPUT может подтянуть его к земле, поэтому светодиод и горел здесь похоже, но когда в pinMode указывается OUTPUT то он не управляется без функций которые я описал в предыдущем посте
Если в соответствующем бите порта 1, при OUTPUT будет вкл, при INPUT скорее всего выкл. Но сперва надо этот бит установить явно, скорее всего в УНО так и получилось само, а в Нано нет. А вообще дичь какаякто так включать и выключать.
Код (C++): #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); #define LedPin 13 // Подключаем светодиод к порту 13 #define ButPin 4 // Подключаем кнопку к выходу 4 byte buff[2]; void setup() { pinMode(LedPin, OUTPUT); pinMode(ButPin, INPUT); // PULLUP? mySwitch.enableTransmit(5); } void loop() { buff[0] = buff[1]; buff[1] = digitalRead(ButPin); if (buff[0] < buff[1]) { digitalWrite(LedPin, LOW); mySwitch.send(7777777, 24); } if (buff[0] > buff[1]) { digitalWrite(LedPin, HIGH); mySwitch.send(7777777, 24); } delay(60); }
Приветствую всех, есть у кого желание переделать этот скетч для attiny85, за денежку? Код (C++): #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); int LedPin = 13; // Подключаем светодиод к порту 13 int ButPin = 4; // Подключаем кнопку к выходу 10 int flag = 0; // флаг состояния void setup() { pinMode(LedPin, OUTPUT); pinMode(ButPin, OUTPUT); digitalWrite(ButPin, LOW); mySwitch.enableTransmit(5); } void loop() { if(digitalRead(ButPin) == LOW && flag == 0) { digitalWrite(LedPin, INPUT);//горит mySwitch.send(8590337, 24); //of flag = 1; } if(digitalRead(ButPin) == HIGH && flag == 1) { digitalWrite(LedPin, OUTPUT); //не горит mySwitch.send(8590337, 24); //of flag = 0; } delay(60); }
А что с ним? Не влезает? Или не работает? Если не влезает - то навскидку можно избавиться от pinMode и digitalWrite в пользу прямой работы с портами, номера пинов вместо переменных загнать в #define, переменную flag вместо int сделать uint8_t - по итогу то там, то здесь - маленькая экономия
<RCSwitch.h> похоже не лезет, пробую скомпилировать для attiny85 X5 (мах 8kb) , выдаёт ошибку. Думаю всё надо переписывать на С
Мигаем светодиодом, а как передатчик включить? Код (C++): #include <avr/io.h>// подключаем заголовочные файлы int main(void) { DDRB|=(1<<PB2); //Настраиваем ножку PB2 в режим выхода DDRB&=~(1<<PB1); //Настраиваем ножку PB1 в режим входа PORTB|=(1<<PB1); //Устанавливаем pull-up режим ножки PB1 while(1) //бесконечный цикл { if((PINB&(1<<PB1))==0)//Если на PB1 логический ноль { PORTB|=(1<<PB2);//Зажигаем светодиод } else// если на PB1 логическая единица { PORTB&=~(1<<PB2);//Гасим светодиод } } }