Контролери > Ардуино (Arduino)
10bit-ов брояч?
kalos:
Здравейте,
имам нужда от помощ.
Какъв е най-добрия начин за десетичен 10-битов брояч т.е. имам 10 светодиода на дигиталните изходи (4-13), брояча да започне от 0 и да добавя през 1 сек. по една еденица. Като моментното чсило да се "изписва" чрез светодиодите.
Подобно на това http://www.youtube.com/watch?v=t3Ol3Dxxl0s
но без но без 74HC595
Малко съм разсеян в момента, дано да стане ясно какъв им е въпроса.
Поздрави :)
tommyboy:
а защо без 74HC595
zen:
Ето ти кода. Имай предвид, че не съм го тествал. По късно ще го тествам и евентуално коригирам.
--- Код: ---
long decimal;
char binary[80];
void setup() {
Serial.begin(9600);
decimal = 0;
for(int br = 4;br<14;br++)
{
pinMode(br, OUTPUT);
}
}
void loop() {
decimal++;
if(decimal==1024)
{
decimal = 0;
}
dec2bin(decimal,binary);
for(int br = 4;br<14;br++)
{
if(binary[br-4] == 1)
{
digitalWrite(br, HIGH);
}
else
{
digitalWrite(br, LOW);
}
}
Serial.print("Dec:");Serial.println(decimal);
Serial.print("Bin:");Serial.println(binary);
Serial.println(" ");
delay(1000);
}
void dec2bin(long decimal, char *binary)
{
int k = 0, n = 0;
int remain;
char temp[80];
do
{
remain = decimal % 2;
decimal = decimal / 2;
temp[k++] = remain + '0';
}
while (decimal > 0);
while (k >= 0)
binary[n++] = temp[--k];
binary[n-1] = 0;
}
--- Край на кода ---
kalos:
Тествах това което си написал, брояча работи и подава данните към сериния порт, но не се отразява на светодиодите.
tommyboy - в момента нямам налични, а програмата ми е да тествам една схема.
По-точно имам една охранителна ролетка с дистанционно (ето интегралната схема на дистацнионното http://www.honsitak-taiwan.com/list.files/list_pdf/hk526e-2.pdf) със постоянен код.
Идеята ми е да закача ардуиното към наличното ми дистанционно за да определя времето необходимо за отваряне на ролетката.
Към момента в дистанционното има 10битов "избирач" опеделящ ключа за защита.
kalos:
Преди малко тествах ето този код:
--- Код: ---/*
Binary counter
Counts up and prints result to LEDs, for practicing binary counting.
This code is in the public domain.
*/
int startPin = 2;
int everyNthPin = 1;
int totalPins = 12;
int delayInms = 500;
void setup() {
for (int i = startPin; ( i / everyNthPin ) - startPin < totalPins; i += everyNthPin) {
pinMode(i, OUTPUT);
}
}
int expo( int base , int power) {
int total = base;
for( int times = power; times > 1; times--) {
total *= base;
}
return total;
}
int i = 0;
void loop() {
int carry = i;
int currentbit = 0;
int j = startPin;
for (; ( j / everyNthPin ) - startPin < totalPins; j += everyNthPin) {
currentbit = carry % 2;
carry = carry / 2;
if (currentbit > 0) {
digitalWrite(j, HIGH);
} else {
digitalWrite(j, LOW);
}
}
i++;
if (i >= expo(2 , totalPins) ) i = 0;
delay(delayInms);
}
--- Край на кода ---
Работи, но нещо не ми е ясно как :)
дали ще може някой да ми разясни?
Благодаря предварително.
Навигация
[0] Списък на темите
Премини на пълна версия