Отговори на тема  [ 4 мнения ] 
Проблем с прост Ардуино код 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Фев 19, 2013 11:26 am
Мнения: 16
Мнение Проблем с прост Ардуино код
Имам 7447 7-сегментен драйвер със 4 битов вход. Целта е само за проба на диспея да напиша числото 7 на изходите 4-7 с които съм свързал драйвера

Код:
int DisplayPins[] = {4, 5, 6, 7};
int printedNumber = 7;
int mask=1;

void setup()
{
   for (int p = 0; p < 4; p++)
   {
      pinMode(DisplayPins[p], OUTPUT);
   }

}

void loop()
{
   for (int i = 0; i < 4; i++)
   {
      mask = mask << i;
      mask = mask & printedNumber;
      mask >> i;

      if (mask ==1)
      {
         digitalWrite(DisplayPins[i], HIGH);
      }
      else
      {
         digitalWrite(DisplayPins[i], LOW);
      }
   }
}


Явно бъркам нещо много елементарно.


Нед Сеп 08, 2013 1:45 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Чет Окт 02, 2008 10:24 pm
Мнения: 105
Мнение Re: Проблем с прост Ардуино код
защо всички тези променливи са int,
това arduino съвсем ще обърка представите на начинаещите..
само като го декларираш int и отидоха двойно повече инструкции
на този 8-бит AVR.

иначе вместо:
mask = mask << i;
трябва да напишеш:
mask = 0x01 << i;


и вместо:
mask >> i;
трябва:
mask >>= i;


Нед Сеп 08, 2013 11:54 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Фев 19, 2013 11:26 am
Мнения: 16
Мнение Re: Проблем с прост Ардуино код
Добре направих го както каза:
Код:
byte DisplayPins[] = {4, 5, 6, 7};
byte printedNumber = 7;
byte mask;

void setup()
{
   for (byte p = 0; p < 4; p++)
   {
      pinMode(DisplayPins[p], OUTPUT);
   }

}

void loop()
{
   for (byte i = 0; i < 4; i++)
   {
      mask = 0х01 << i;
      mask = mask & printedNumber;
      mask >>= i;

      if (mask ==1)
      {
         digitalWrite(DisplayPins[i], HIGH);
      }
      else
      {
         digitalWrite(DisplayPins[i], LOW);
      }
   }
}


Въпроса сега в главата ми е защо се прави mask = 1 << i, a не може само mask <<= i след като още при инициализацията съм и задал стойност 1?
Между другото тази програмака я бях направил със port accesing преди 3 дена и работеше от първия път...


Нед Сеп 08, 2013 12:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 10:16 am
Мнения: 1730
Мнение Re: Проблем с прост Ардуино код
Ейй, никой не ще да отговори на човека :)

Цитат:
Въпроса сега в главата ми е защо се прави mask = 1 << i, a не може само mask <<= i след като още при инициализацията съм и задал стойност 1?


Защото още на втората операция с mask го засираш (mask = mask & printedNumber), затова ще трябва винаги да шифтваш единицата като първа операция.

И като цяло задачата ти колко по - лесно би се реализирала без ардуино библиотеката..
Код:
  PORTB &= 0x0F; // нулиране на 4,5,6,7 бит от порта
  PORTB |= (printedNumber & 0x0F) << 4; // извеждане на младшата част на байта на пинове 4,5,6,7


Вто Сеп 10, 2013 11:30 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 4 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 20 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни