Помогите сделать так, чтобы при первом нажатии кнопки светодиод загорался, а при втором потухал

А что такое порт?

Лично я вопросов больше не имею.

1 лайк

Второе

нашел в интернете код и он работает как надо

void setup() {
  pinMode(3, INPUT_PULLUP);
  pinMode(4, OUTPUT);
}
bool led;
bool flag = 0;
void loop() {
  bool butt = digitalRead(3);
  if (butt == 1 && flag == 0) {
    flag = 1;
    led = !led;
    digitalWrite(4, led);
  }

  if (butt == 0 && flag == 1) { 
    flag = 0;  
  }
}
void setup() {
  pinMode(3, INPUT_PULLUP);
  pinMode(4, OUTPUT);
}

void loop() {
   
  if (digitalRead(3)==LOW) {
    digitalWrite(4,!digitalRead(4) );
   delay(200);
  }
}

Во так во! Не думая…

это точно, речь шла про триггеры, а тут чуть кнопку подольше подержишь…

Вот мне и интересно как такой программный триггер преодолевает дребезг?

и перейдёшь в удобный автоматический режим нарастания счётчика-переменной по удержанию :slight_smile:
…а со светодиодом - приятное мигание на удержании кнопки.

Чем боьше изучаю, тем больше нравится что-то такое

void setup() {
  DDRD &= ~(1<<DDD3);
  DDRD |= (1<<DDD4);
  PORTD |= (1<<PD4)|(1<<PD3);
  EICRA |= (1<<ISC11);
  EIMSK |= (1<<INT1);
}
ISR(INT1_vect) {
  	DDRB ^= DDD4;
  }

void loop() {}

Памяти потребляет очень сильно меньше, еще бы урезать, но не знаю как- только начал… И не менее интересно как одним битом управляется.

А DDRB тут причём? И что будем делать с дребезгом?
А известно ли тебе, Юрик, что светодиоды и от подтяжки светят?

1 лайк

И что вообще за мк? Я вот эти вот DDD3 / DDD4 не понял, если честно…

Понапридумывают, понимаешь ли. И гадай тут.
Небось 1<<3 что PB3, что DDD3.

это дьявольское искушение секты поклонников АВРСтудио

Не знаю. Я ж учусь только. Не проверял, если честно. Написал как запомнил

Как же ты учишься, если не знаешь?

1 лайк

Так вот, в телефоне. Долго и с ошибками. Я думал перевожу регистры DDRD на вход, нет? Проверить только послезавтра смогу.

Так вот, если пишешь, то каждый символ тебе должен быть понятен. Почему так, а не иначе. И по каждому знаку должен внятно ответить.

1 лайк

«Вот я что-то сляпал, нате разбирайтесь сами…» :smiley:

Ничего там дьявольского нет. Разве что компилятор сильно устарел, а как его обновить - я так и не разобрался (имею ввиду gcc). Зато в MPLAB X IDE это делается элементарно. :slight_smile:

void setup() {
  DDRD &= ~(1<<DDD3); // пин 3 на вход
  DDRD |= (1<<DDD4); // пин 4 на выход
  PORTD |= (1<<PD4)|(1<<PD3); // включаем подтяжку пин 3 и HIGH пин 4
  EICRA |= (1<<ISC11); // прерывание 1 на падение 
  EIMSK |= (1<<INT1); // включаем прерывание 1
}
ISR(INT1_vect) {
  	DDRB ^= DDD4; // инвертируем на вход
  }

void loop() {}

По поводу если на входе засветится, так же можно бит подтяжки снять.

Еще раз спрошу - что такое DDD3 и чем обычное (привычное) PD3 не устраивает? В конце концов просто «3» (три)?!