Автор Тема: Arduino / Avr push buttons  (Прочетена 62 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 189
  • Публикации: 3616
Arduino / Avr push buttons
« -: 02 Май 2017, 03:27:31 »
Младежи, имам следният Ардуино код, който има за задача да подпали някакъв пин, когато се натисне бутона.   

С този код проблем нямам.  Работи кът пушка, обаче опитвайки се да го преобразувам пишейки го на C, срещам проблем. Стигнал съм до тук и смятам, че е правилна логиката ми, но нищо не се случва (сложих и някой друг коментар по кода)

Код: C
  1. #include <avr/io.h>
  2. //#include <util/delay.h>
  3. //#include <avr/sfr_defs.h>
  4.  
  5. int main(void) {
  6.         DDRB |= (1 << PORTB5);  //Set port B pin 5 as output
  7.         DDRB &= ~(1 << PORTB0);  //Set port B pin 0 as input
  8.         PORTB |= (1 << PORTB0);  //Set port B pin 0 to 1 (HIGH)
  9.         while (1) {
  10.                 if (!PORTB & (1<<PORTB0)))  // Check if port B pin 0 equal to 1 (The button is pressed)
  11.                 {
  12.                 PORTB |= (1<<PORTB5);  // turn led on
  13.                 } else {
  14.                 PORTB &= ~(1<<PORTB5); // turn led off
  15.                 }
  16.         }
  17. }
  18.  

ПС. В Ардуино примера по-горе бутона е вързан към DDRD, с пин номер PD2. При мен е вързан към DDRB, PB0(PORTB0), пробвах и с PORTD същият шийт :(
По някакъв кода ми не отчита, че бутона е ON / OFF. Пробвах и с готова функция без резултат.

Код: C
  1.  
  2. if (bit_is_clear(PORTB, PORTB0)) {
  3.  
  4. }
  5.  

   
   
« Последна редакция: 02 Май 2017, 04:38:29 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 189
  • Публикации: 3616
Re: Arduino / Avr push buttons
« Отговор #1 -: 02 Май 2017, 04:41:03 »
Трябвало да бъде с PIN syntax, a не с PORT (тва не го знаех), ето работещ код:

Код: C
  1.  
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4.  
  5. int main(void) {
  6.         DDRB |= (1 << PINB5);
  7.         DDRB &= ~(1 << PINB0);
  8.         PORTB |= (1 << PINB0);
  9.         while (1) {
  10.                 if ((PINB & (1 << PINB0))) {
  11.                         PORTB |= (1 << PORTB5);
  12.                 } else {
  13.                         PORTB &= ~(1 << PORTB5);
  14.                 }
  15.         }
  16. }
  17.  
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html