tamam yav şimdi oldu.Gönderdiğin değerler itibarı ile çıkışlar mantıklı, ama tek LED yakacak değer göndermen lazım. Şunları gönder:
0
1
2
4
8
16
32
64
128
int clockPin = 2;
int latchPin = 3;
int dataPin = 4;
int i = 0;
int flag = 0;
uint8_t _a[] = {
0b10000000,
0b11000000,
0b11100000,
0b01110000,
0b00111000,
0b00011100,
0b00001110,
0b00000111,
0b00000011,
0b00000001, //9. led pini burada high
0b00000011,
0b00000111,
0b00001110,
0b00011100,
0b00111000,
0b01110000,
0b11100000,
0b11000000,
0b10000000
};
void setup() {
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
void loop() {
if (flag == 0) {
for (i = 0; i <= 19; i++) {
updateShiftRegister();
delay(150);
}
flag = 1;
} else if (flag == 1) {
for (i = 19; i >= 0; i--) {
updateShiftRegister();
delay(150);
}
flag = 0;
}
}
void updateShiftRegister() {
digitalWrite(latchPin, LOW);
delayMicroseconds(2);
shiftOut(dataPin, clockPin, MSBFIRST, _a[i]);
digitalWrite(latchPin, HIGH);
}
Öyle direk hazıra konunca Timur abi kızıyor. İlla "kendin yapıp öğreneceksin" diyor. Yoksa ben Ahmete çoktan yaptırmıştım kodundan baskısına kadarKartı hazırlarsan, ben programı yapar gönderirim.
void loop() {
if (i <= 18) {
updateShiftRegister();
i++;
delay(150);
}
if(i == 18)i = 0;
}
void loop() {
updateShiftRegister();
i = (i + 1) % 18;
delay(150);
}
sizeof(_a)
diye kullanırsan daha iyi olur. Böylece array içindeki verileri istediğin gibi arttırıp azaltırsın, ama programın geri kalanı değişmesi gerekmez.rastgele pin olur.@Ahmet şu 9.ledi nasıl sıraya dahil ederiz azıcık kopya versene. Benim kafa basmıyor.
Birde 74HC595'i rastgele 3 digital pine bağlamak yetiyor mu yoksa mosi- miso filan gözeterek mi takmamız lazım?
interrupt mu yapacağız, nasıl durduracağız?rastgele pin olur.
9. ledi devreye almak için oluşturduğun döngünün son adımını kullan abi son adıma geldiğinde 595 saydırmayı durdurmalı senin IO konuşup sırasını tekrar 595e bırakmalı.
void loop() {
updateShiftRegister(_a);
i = (i + 1) % 11;
delay(150);
digitalWrite(led9, HIGH);
delay(150);
digitalWrite(led9, LOW);
updateShiftRegister(_b);
i = (i + 1) % 9;
delay(150);
}
void updateShiftRegister(uint8_t _c[]) {
digitalWrite(latchPin, LOW);
delayMicroseconds(2);
shiftOut(dataPin, clockPin, LSBFIRST, _c[i]);
digitalWrite(latchPin, HIGH);
}
i değeri shift register port sayısını aşma durumunu başka bir if ile kontrol edeceksin abi 1 aştığında 9 numara işini yapıp sıfırlayacakinterrupt mu yapacağız, nasıl durduracağız?
Şöyle ikiye böldüm ama arada 9.ledi kontrol edemiyorum.
C++:void loop() { updateShiftRegister(_a); i = (i + 1) % 11; delay(150); digitalWrite(led9, HIGH); delay(150); digitalWrite(led9, LOW); updateShiftRegister(_b); i = (i + 1) % 9; delay(150); } void updateShiftRegister(uint8_t _c[]) { digitalWrite(latchPin, LOW); delayMicroseconds(2); shiftOut(dataPin, clockPin, LSBFIRST, _c[i]); digitalWrite(latchPin, HIGH); }
//-*- mode: c++; c-basic-offset: 2; -*-
const int clockPin = 2;
const int latchPin = 3;
const int dataPin = 4;
const int led9Pin = 5;
static uint16_t led[] =
{
0b1100000000000000,
0b0110000000000000,
0b0011000000000000,
0b0001100000000000,
0b0000110000000000,
0b0000011000000000,
0b0000001100000000,
0b0000000110000000,
0b0000001100000000,
0b0000011000000000,
0b0000110000000000,
0b0001100000000000,
0b0011000000000000,
};
void setup()
{
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(led9Pin, OUTPUT);
}
void loop()
{
for (unsigned int i = 0;
i < (sizeof(led) / sizeof(led[0]));
++i)
{
// 595 verisini yaz
shiftOut(dataPin, clockPin, LSBFIRST, led[i] >> 8);
digitalWrite(latchPin, HIGH);
digitalWrite(latchPin, LOW);
// GPIO verisini yaz
digitalWrite(led9Pin, !!(led[i] & 0xff));
delay(250);
}
}
İkinci bir 595 mi eklemesini öneriyorsunuz.9 numarayı da tabloda tanımla.
Kolaymış ya. Benim aklım i'nin for döngüsündeki gibi sayıyı tamamlamadan aşağıya geçmiyor algısına takılmış.i değeri shift register port sayısını aşma durumunu başka bir if ile kontrol edeceksin abi 1 aştığında 9 numara işini yapıp sıfırlayacak
void loop() {
updateShiftRegister();
i = (i + 1) % 19;
delay(150);
if (i == 11){
digitalWrite(led9, HIGH);
delay(150);
digitalWrite(led9, LOW);
}
}
Abi senin kodlar mükemmel ama Ahmetin kalemi hep. Benim için ileri düzey kalıyor9 numarayı da tabloda tanımla.
C++://-*- mode: c++; c-basic-offset: 2; -*- const int clockPin = 2; const int latchPin = 3; const int dataPin = 4; const int led9Pin = 5; static uint16_t led[] = { 0b1100000000000000, 0b0110000000000000, 0b0011000000000000, 0b0001100000000000, 0b0000110000000000, 0b0000011000000000, 0b0000001100000000, 0b0000000110000000, 0b0000001100000000, 0b0000011000000000, 0b0000110000000000, 0b0001100000000000, 0b0011000000000000, }; void setup() { pinMode(clockPin, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(led9Pin, OUTPUT); } void loop() { for (unsigned int i = 0; i < (sizeof(led) / sizeof(led[0])); ++i) { // 595 verisini yaz shiftOut(dataPin, clockPin, LSBFIRST, led[i] >> 8); digitalWrite(latchPin, HIGH); digitalWrite(latchPin, LOW); // GPIO verisini yaz digitalWrite(led9Pin, !!(led[i] & 0xff)); delay(250); } }
Abi senin kodlar mükemmel ama Ahmetin kalemi hep. Benim için ileri düzey kalıyor
O zaman mezarıma gelir proje bırakırsın yap diyeBen prensip gereği 10 yılım dolmadan çırak kabul etmiyorum.
Tr lerin hepsine çekme direnci eklemelisin abi.Şemay yapısını da şöyle kurdum. Daha tam bitmedi ama vaktim de kalmadı. Yavaştan yatmam lazım. Bu gün izin günümdü iyi iş gördüm
Burada iki 74HC595 arasındaki bağlantıyı doğru yapmış mıyım? PJC7404 mosfet KiCad de olmadığı için salladım.
22259 eklentisine bak