Rejestr przesuwny sterowany potencjometrem

Zrobiłeś coś fajnego z wykorzystaniem Arduino? Pochwal się tym!
ODPOWIEDZ
Tomek1978
Młodszy majsterkowicz
Posty: 2
Rejestracja: 23 lut 2015, 12:43

Rejestr przesuwny sterowany potencjometrem

Post autor: Tomek1978 » 23 lut 2015, 13:02

Witam wszystkich jestem tu nowy i potrzebuje pomocy przy projekcie .Chciałem zrobic sterowanie 16szt diód za pomocą 2 szt 74hc595 ale po wgraniu programu do procesora zamiast 16 bit wsówa mi tylko 8 bit.
oto kod dla 8 bit oba scalaki wyswietlają to samo .

const int latchPin = 5; // Pin connected to Pin 12 of 74HC595 (Latch)
const int dataPin = 6; // Pin connected to Pin 14 of 74HC595 (Data)
const int clockPin = 7; // Pin connected to Pin 11 of 74HC595 (Clock)
int counter = 0; // initialise counter as zero
int potReading =0;
const byte numbers[20] =
{0xff,0x7f,0xbf,0xdf,0x1f,0x6f,0x4f,0xf7,0x57,0xa7,0x7b,0x6b,0xd3,0xbd,0xad,0x35,0x45,0xe9,0x51,0x3e};
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
potReading = analogRead (A0);
potReading = map(potReading, 0, 1023, 0, 20);
{
if(potReading > 20)
potReading --;
show(numbers[potReading]);
}
{
if(potReading < 0)
potReading ++;
show(numbers[potReading]);
}
}
void show( byte number)
{

for(int j = 0; j <= 7; j++)
{
byte toWrite = number & (B10000000 >> j);
if(!toWrite) {
continue;
}
shiftIt(toWrite);
}
}
void shiftIt (byte data)
{
digitalWrite(latchPin, LOW);
for (int k=0; k <= 7; k++)
{
digitalWrite(clockPin, LOW);

if ( data & (1 << k) )
{
digitalWrite(dataPin, HIGH);
}
else
{
digitalWrite(dataPin, LOW);
}
digitalWrite(clockPin, HIGH);
}
digitalWrite(clockPin, LOW);
digitalWrite(latchPin, HIGH);
}

a tak już nie działa jak nalerzy.
const int latchPin = 5; // Pin connected to Pin 12 of 74HC595 (Latch)
const int dataPin = 6; // Pin connected to Pin 14 of 74HC595 (Data)
const int clockPin = 7; // Pin connected to Pin 11 of 74HC595 (Clock)
int counter = 0; // initialise counter as zero
int potReading =0;
const byte numbers[20] =
{0xfff0,0x7ff0,0xbff0,0xdff0,0x1ff0,0x6ff0,0x4ff0,0xf7f0,0x57f0,0xa7f0,0x7bf0,0x6bf0,0xd3f0,0xbdf0,0xadf0,0x35f0,0x45f0,0xe9f0,0x51f0,0x3ef0,

};
void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop()
{
potReading = analogRead (A0);
potReading = map(potReading, 0, 1023, 0, 20);
{
if(potReading > 20)
potReading --;
show(numbers[potReading]);
}
{
if(potReading < 0)
potReading ++;
show(numbers[potReading]);
}
}
void show( byte number)
{

for(int j = 0; j <= 7; j++)
{
byte toWrite = number & (B10000000 >> j);
if(!toWrite) {
continue;
}
shiftIt(toWrite);
}
}
void shiftIt (byte data)
{
digitalWrite(latchPin, LOW);
for (int k=0; k <= 7; k++)
{
digitalWrite(clockPin, LOW);

if ( data & (1 << k) )
{
digitalWrite(dataPin, HIGH);
}
else
{
digitalWrite(dataPin, LOW);
}
digitalWrite(clockPin, HIGH);
}
digitalWrite(clockPin, LOW);
digitalWrite(latchPin, HIGH);
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Tomek1978
Młodszy majsterkowicz
Posty: 2
Rejestracja: 23 lut 2015, 12:43

Re: Rejestr przesuwny sterowany potencjometrem

Post autor: Tomek1978 » 24 lut 2015, 22:16

Witam ponownie widze że nikt nie je w stanie mi pomóc jak zrobić żeby kod dzialal w 16 bitach .Jestem początkujący i to zadanie mnie troche przeroslo ale trudno jakoś sobie poradzę .
stiven
Złota rączka
Posty: 1581
Rejestracja: 13 maja 2014, 08:47
Lokalizacja: Zielona Góra

Re: Rejestr przesuwny sterowany potencjometrem

Post autor: stiven » 24 lut 2015, 22:46

Możliwe, że wystarczy zamienić linijki z

Kod: Zaznacz cały

for (int k=0; k <= 7; k++)

for (int j=0; j <= 7; j++)
na

Kod: Zaznacz cały

for (int k=0; k <= 15; k++)

for (int j=0; j <= 15; j++)
oraz

Kod: Zaznacz cały

byte toWrite = number & (B10000000 >> j);
na

Kod: Zaznacz cały

byte toWrite = number & (B1000000000000000 >> j);
ODPOWIEDZ

Strony partnerskie: