37
« -: Юни 19, 2011, 08:51:00 pm »
Ето. Ако пак не е ясно кажи. За да конвертирам десетично в двуично използвам алгоритъма с делене на 2 и проверка на остатъка:
long decimal; // променлива за десетично представяне
char binary[10]; //10 мерен масив, в който пазя двуичните стойности
void setup() {
Serial.begin(9600); // инициализиране на серийният порт
decimal = 0;
for(int br = 4;br<14;br++) // дефиниране на всички пинове от 4 до 13 като изходи
{
pinMode(br, OUTPUT);
}
}
void loop()
{
decimal++; // добавяне на 1 на променливата
if(decimal==1024) //ако decimal e 1024 превъртам брояча и почвам пак от 0 (1023 е 10 единици в двучен код 1111111111)
{
decimal = 0;
for(int br = 0; br < 10; br++) //инициализирам и масива наново
binary[br] = '0';
}
dec2bin(decimal,binary); // конвертирам decimal в binary
for(int br = 4;br<14;br++) // обхождане на пиновете
{
if(binary[br-4] == '1') // проверка на съответният елемент от масива дали е 1. Първият елемент е на 4 пинм, така че всеки път вадя 4
{
digitalWrite(br, HIGH); // ако е 1 свети
}
else
{
digitalWrite(br, LOW); // ако не е 1, т.е. 0, не свети
}
}
Serial.println(binary); // пращам двуичното число на серийния само за проверка
}
void dec2bin(long decimal, char *binary)
{
int k = 0;
int remain;
char temp[10];
do
{
remain = decimal % 2; // проверявам остатъка при делене на 2
decimal = decimal / 2; // деля на 2 за следващият ход на цикъла
temp[k++] = remain + '0'; // добавям остатъка на следващата позиция в масива
}
while (decimal > 0);
for(int br = 0;br < k;br++) // копирам временният масив в binary
binary[br] = temp[br];
}