interactive led table yapımı
  • Arkaşalar merhaba;

    Resim paylaşamıyorum elimde blok diyagramı olan bir devre var uzerınde 74HC595 serial shift registers ve 4051 multiplexer bulunyor foruma resim eklenebilseydi anlatmak daha kolay olurdu. benim sorunum tasarlanan devreyi bir türlü kararlı çalıştıramıyor olmam, pic yardımıyla durumu çözebiliyorum fakat arduino ile bunu yapmak benim için gerçekten güç geliyor. arduinoya upload edilen program aşağıdaki gibi fakat derleme sırasında da hata alıyorum. Yardımcı olacak arkadaşlar varsa devre tasarımını ve programları paylaşabilirim. sercanbakdi@yandex.com adresinden da irtibata geçebilirsiniz. Gerçekten yardıma ihtiyacım var.

    İlginiz için teşekkür ederim.

  • int dataPin = 10; //DS
    int latchPin = 9; //ST
    int clockPin = 8; //SH

    int sS0 = 7; //sS0
    int sS1 = 6; //sS1
    int sS2 = 5; //sS2

    int mS0 = 4; //mS0
    int mS1 = 3; //mS1
    int mS2 = 2; //mS2

    // Pinf for the Status LED
    int led = 13;

    // Pin for the IR LEDs
    int LEDpin = 11;

    // Analog Inputs von den Fototransistoren
    int analogInput = 0;

    // variable to store the value

    int values0[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values1[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values2[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values3[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values4[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values5[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values6[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values7[] = {
    0, 0, 0, 0, 0, 0, 0, 0};

    int values[8][8]; //display
    int counters[8][8];//storrage

    // a threshold to decide when the LED turns on 512 normal
    int threshold = 700;

    int timer = 0;

    //holders for infromation you?re going to pass to shifting function
    byte dataRED;
    byte dataGREEN;
    byte dataArrayRED[8];
    byte dataArrayGREEN[8];

    //alles für den multiplexer
    int rm0 = 0; // value Master 4051 (s0)
    int rm1 = 0; // value Master 4051 (s1)
    int rm2 = 0; // value Master 4051 (s2)
    int rowM = 0; // storeing the bin code
    int bin [] = {
    000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy

    int rs0 = 0; // value Slave 4051 (s0)
    int rs1 = 0; // value Slave 4051 (s1)
    int rs2 = 0; // value Slave 4051 (s2)
    int rowS = 0; // storeing the bin code

    void setup() {

    //multiplexer
    pinMode(mS0, OUTPUT); // Master s0
    pinMode(mS1, OUTPUT); // Master s1
    pinMode(mS2, OUTPUT); // Master s2

    pinMode(sS0, OUTPUT); // Slave s0
    pinMode(sS1, OUTPUT); // Slave s1
    pinMode(sS2, OUTPUT); // Slave s2

    digitalWrite(led, HIGH); //die kontroll LED

    //set pins to output because they are addressed in the main loop
    pinMode(latchPin, OUTPUT);

    //set the pin for the IR LEDs
    pinMode(LEDpin, OUTPUT);
    digitalWrite(LEDpin, HIGH);

    // Analog Inputs von den Fototransistoren
    pinMode(analogInput, INPUT);

    dataArrayGREEN[0] = 254;
    dataArrayGREEN[1] = 253;
    dataArrayGREEN[2] = 251;
    dataArrayGREEN[3] = 247;
    dataArrayGREEN[4] = 239;
    dataArrayGREEN[5] = 223;
    dataArrayGREEN[6] = 191;
    dataArrayGREEN[7] = 127;

    for(int j = 0; j < 8; j++){
    values[0][j] = values0[j];
    values[1][j] = values1[j];
    values[2][j] = values2[j];
    values[3][j] = values3[j];
    values[4][j] = values4[j];
    values[5][j] = values5[j];
    values[6][j] = values6[j];
    values[7][j] = values7[j];
    }
    for(int i = 0; i < 8; i++){
    for(int j = 0; j < 8; j++){
    counters[i][j] = 0;
    }
    }
    }

    void loop() {

    /// Multiplexer read alle
    for (int countM=0; countM<8; countM++) {<br />rowM = bin[countM];
    rm0 = rowM & 0×01;
    rm1 = (rowM>>1) & 0×01;
    rm2 = (rowM>>2) & 0×01;
    digitalWrite(mS0, rm0);
    digitalWrite(mS1, rm1);
    digitalWrite(mS2, rm2);

    for (int countS=0; countS<8; countS++) {<br />rowS = bin[countS];
    rs0 = rowS & 0×01;
    rs1 = (rowS>>1) & 0×01;
    rs2 = (rowS>>2) & 0×01;
    digitalWrite(sS0, rs0);
    digitalWrite(sS1, rs1);
    digitalWrite(sS2, rs2);

    if(values[countS][countM] == 1) {
    counters[countS][countM] = counters[countS][countM] + 1;
    }
    if( counters[countS][countM] > 50) {
    counters[countS][countM] = 0;
    values[countS][countM] = 0;
    }

    if ( analogRead(analogInput) < threshold) {
    // macht die umschaltung
    if(values[countS][countM] == 0) {
    values[countS][countM] = 1;
    }
    }

    dataArrayRED[countS] = values[countS][0]*1+values[countS][1]*2+values[countS][2]*4+values[countS][3]*8+values[countS][4]*16+values[countS][5]*32+values[countS][6]*64+values[countS][7]*128;
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, 0);
    //move ?em out
    shiftOut(dataPin, clockPin, dataArrayGREEN[countS]);
    shiftOut(dataPin, clockPin, dataArrayRED[countS]);
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, 1);
    }
    }

    }

    // the heart of the program
    void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {

    //internal function setup
    int i=0;
    int pinState;
    pinMode(myClockPin, OUTPUT);
    pinMode(myDataPin, OUTPUT);

    //clear everything out
    digitalWrite(myDataPin, 0);
    digitalWrite(myClockPin, 0);

    for (i=7; i>=0; i?) {
    digitalWrite(myClockPin, 0);
    if ( myDataOut & (1<<i) ) {<br />pinState= 1;
    }
    else {
    pinState= 0;
    }
    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(myDataPin, pinState);
    //register shifts bits on upstroke of clock pin
    digitalWrite(myClockPin, 1);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(myDataPin, 0);
    }
    //stop shifting
    digitalWrite(myClockPin, 0);
    }
  • shiftOut fonksiyonu içinde tanımlayıp kullandığınız myClockPin, myDataPin gibi değişkenlerin hangi pin olduklarını yukarıda kodun başında tanımlarken "dataPin", "clockPin" olarak yazmışsınız.

    Arduino'daki digitalWrite "digitalWrite(myClockPin, 0);" şeklinde çalışmaz; digitalWrite(pin, LOW); şeklinde çalışır. Aynı şekilde "1" yerine "HIGH" kullanılır.

    Hata verdiğinde hata mesajını da yazarsanız daha kolay cevap verebiliriz.

    Düzeltmeyi yaptığınızda çıkması muhtemel bir hatayı daha söyleyeyim; yukarıda pin numarasına atadığınız değişken adıyla o pini tanımlamış oluyorsunuz. shiftOut fonksiyonu içinde aynısını tekrar tanımlamış olacaksınız. O da hata verebilir. Siz deneyin ona göre hata kodunu paylaşın, tekrar bakalım.

    http://forum.arduinoturkiye.com/discussion/61/derleme-sirasinda-hata-ayiklama-sorunlari#Item_4 deki hataların aynısını mı alıyorsunuz? Burada yazdığınız sorunları çözdünüz mü?
  • oradaki hata veren sorunlar çözülmedi.
    şu anki programda aşağıdaki hataları alıyorum, ayrıca yardımcı olmanız açısından size devre blok diyagramınıda gönderebilirim.

    sketch_oct20c:123: error: stray '\' in program
    sketch_oct20c:124: error: stray '\' in program
    sketch_oct20c:125: error: stray '\' in program
    sketch_oct20c:132: error: stray '\' in program
    sketch_oct20c:133: error: stray '\' in program
    sketch_oct20c:134: error: stray '\' in program
    sketch_oct20c:181: error: stray '\' in program
    sketch_oct20c.cpp: In function 'void loop()':
    sketch_oct20c:123: error: expected `;' before 'u00d701'
    sketch_oct20c:124: error: expected `;' before 'u00d701'
    sketch_oct20c:125: error: expected `;' before 'u00d701'
    sketch_oct20c:132: error: expected `;' before 'u00d701'
    sketch_oct20c:133: error: expected `;' before 'u00d701'
    sketch_oct20c:134: error: expected `;' before 'u00d701'
    sketch_oct20c.cpp: In function 'void shiftOut(int, int, byte)':
    sketch_oct20c:181: error: expected `)' before 'u2013'
    sketch_oct20c:181: error: 'u2013' was not declared in this scope
    sketch_oct20c:181: error: expected `;' before ')' token
    sketch_oct20c:198: error: expected `}' at end of input

    satırlarda şu şekilde

    rm0 = rowM & 0×01;
    rm1 = (rowM>>1) & 0×01;
    rm2 = (rowM>>2) & 0×01;
    --------------------------
    rs0 = rowS & 0×01;
    rs1 = (rowS>>1) & 0×01;
    rs2 = (rowS>>2) & 0×01;

    --------------------------
    for (i=7; i>=0; i?) {
    --------------------------
    digitalWrite(myClockPin, 0);
  • Söylediginiz gibi digitalWrite kısımlarında "0" ları LOW "1" leride HIGH olarak düzelttim.
    şuan tek olarak hatayı son satırda bulunan
    "" digitalWrite(myClockPin, LOW); "" hatasını alıyorum

    hata koduda şu şekilde;İ



    sketch_nov22a:197: error: expected constructor, destructor, or type conversion before '(' token
    sketch_nov22a:198: error: expected declaration before '}' token
  • şu hataları gideremedim sildikten sonra program derleme işleminde devam ediyor.

    rm0 = rowM & 0×01;
    rm1 = (rowM>>1) & 0×01;
    rm2 = (rowM>>2) & 0×01;
    --------------------------
    rs0 = rowS & 0×01;
    rs1 = (rowS>>1) & 0×01;
    rs2 = (rowS>>2) & 0×01;

    --------------------------
    for (i=7; i>=0; i?) {

    bunlarla ilgili çözümünüz varmı acaba
  • " digitalWrite(myClockPin, LOW); " de veriyor dediğiniz hata, satırdan önceki satırda bir yerde ";, (), {}" hataları. Eksik, fazla, yanlış kullanım var. "<"br">" gibi bir şeyler varsa dıştaki tırnaktan itibaren onu kaldırın.

    ----------------------------------------------------
    rm0 = rowM & 0×01;
    rm1 = (rowM>>1) & 0×01;
    rm2 = (rowM>>2) & 0×01;
    --------------------------
    rs0 = rowS & 0×01;
    rs1 = (rowS>>1) & 0×01;
    rs2 = (rowS>>2) & 0×01;

    --------------------------
    Yukarıdaki satırların yaptığı şey demultiplexerda bit seçmek, kaydırmak, yazdırmak... Şimdi devre olmadığı, kodu da ben yazmadığım için düzenleme öneremeyeceğim ama siz Arduino ile multiplexer nasıl kontrol edilir diye bir araştırın. Çıkan devrelere ve kodlara bakın, öğrendikten sonra kendi bilginize göre düzenleyin. Bize de "şunu yapmak istiyorum ama yapamıyorum" şeklinde soru sorarsanız daha efektif olur. Bu kod yeni versiyon IDE'de çalışmayabilir. Hangisini kullanıyorsunuz?

    Yukarıdaki satırların yerine şunu bir deneyin;

    rm0 = bitRead(countM,0);
    rm1 = bitRead(countM,1);
    rm2 = bitRead(countM,2);

    rs0 = bitRead(countS,0);      
    rs1 = bitRead(countS,1);     
    rs2 = bitRead(countS,2);

    ----------------------------------------------------
    for (i=7; i>=0; i?) { satırı for (i=7; i>=0; i?-) olacak. "i"nin yanına bir tane daha "-" gelecek. i'yi 7'den 0 olana kadar aşağı saydır demek. Burada clock pinindeki her biti sıfırlıyor.
    ----------------------------------------------------
    Kodda loop() altında "<"br">" kısmı hala varsa onu kaldırın. Kopyalarken HTML kodundan parça almışsınız. Arduino ile alakası yok oranın.
    ----------------------------------------------------
    Yaptığınız düzeltmelerle tekrar deneyin. Hata verirse son kodlarla birlikte hata kodunu tekrar paylaşın. Hata vermez ama düzgün çalışmazsa kodları yine de paylaşın.
  • IDE olarak 1.0.1 kullanıyorum program eski sürüm olan 0006 da derlenmiş.
    dediğiniz şekilde komutları sırasıyla düzelttim hataları tek tek atladı fakat
    for (i=7; i>=0; i?-) komutunda hala hata alıyorum hata kodu şu şekilde;

    table:180: error: stray '\' in program
    table.cpp: In function 'void shiftOut(int, int, byte)':
    table:180: error: expected `)' before 'u2013'
    table:180: error: 'u2013' was not declared in this scope
    table:180: error: expected primary-expression before ')' token
    table:180: error: expected `;' before ')' token
    table:196: error: expected `}' at end of input

    yalnız şöyle bir gariplik var derleme sırasında for (i=7; i>=0; i?-) komuta hata veriyor komutu silip yerine for (i=7; i>=0; i=i) yaptığımda komutu derliyor daha sonra tekrar eski haline getiriyorum for (i=7; i>=0; i?-) tekrar derleyince hata vermeden devam ediyor.
  • Noktasına virgulune dokunmadan kodun son halini tekrar paylaşır mısınız? Bir yerlerde syntax hatası yapıyorsunuz. Daha önce Arduino ile kod yazmışlığınız var mı? Herhangi bir dilde kod yazmışlığınız var mı?
  • daha önce arduino ile kod yazmışlığım var fakat genellikle pic kullanıyorum bu programıda ben yazmadım üzerinde bilmediğim bir çok komut var ve ne işe yaradıklarını anlamak açısından ornek olarak buldum kendimi geliştirmek için üzerinde uğraşıyorum.


    int dataPin = 10; //DS
    int latchPin = 9; //ST
    int clockPin = 8; //SH

    int sS0 = 7; //sS0
    int sS1 = 6; //sS1
    int sS2 = 5; //sS2

    int mS0 = 4; //mS0
    int mS1 = 3; //mS1
    int mS2 = 2; //mS2

    // Pinf for the Status LED
    int led = 13;

    // Pin for the IR LEDs
    int LEDpin = 11;

    // Analog Inputs von den Fototransistoren
    int analogInput = 0;

    // variable to store the value

    int values0[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values1[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values2[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values3[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values4[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values5[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values6[] = {
    0, 0, 0, 0, 0, 0, 0, 0};
    int values7[] = {
    0, 0, 0, 0, 0, 0, 0, 0};

    int values[8][8]; //display
    int counters[8][8];//storrage

    // a threshold to decide when the LED turns on 512 normal
    int threshold = 700;

    int timer = 0;

    //holders for infromation you?re going to pass to shifting function
    byte dataRED;
    byte dataGREEN;
    byte dataArrayRED[8];
    byte dataArrayGREEN[8];

    //alles für den multiplexer
    int rm0 = 0; // value Master 4051 (s0)
    int rm1 = 0; // value Master 4051 (s1)
    int rm2 = 0; // value Master 4051 (s2)
    int rowM = 0; // storeing the bin code
    int bin [] = {
    000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy

    int rs0 = 0; // value Slave 4051 (s0)
    int rs1 = 0; // value Slave 4051 (s1)
    int rs2 = 0; // value Slave 4051 (s2)
    int rowS = 0; // storeing the bin code

    void setup() {

    //multiplexer
    pinMode(mS0, OUTPUT); // Master s0
    pinMode(mS1, OUTPUT); // Master s1
    pinMode(mS2, OUTPUT); // Master s2

    pinMode(sS0, OUTPUT); // Slave s0
    pinMode(sS1, OUTPUT); // Slave s1
    pinMode(sS2, OUTPUT); // Slave s2

    digitalWrite(led, HIGH); //die kontroll LED

    //set pins to output because they are addressed in the main loop
    pinMode(latchPin, OUTPUT);

    //set the pin for the IR LEDs
    pinMode(LEDpin, OUTPUT);
    digitalWrite(LEDpin, HIGH);

    // Analog Inputs von den Fototransistoren
    pinMode(analogInput, INPUT);

    dataArrayGREEN[0] = 254;
    dataArrayGREEN[1] = 253;
    dataArrayGREEN[2] = 251;
    dataArrayGREEN[3] = 247;
    dataArrayGREEN[4] = 239;
    dataArrayGREEN[5] = 223;
    dataArrayGREEN[6] = 191;
    dataArrayGREEN[7] = 127;

    for(int j = 0; j < 8; j++){
    values[0][j] = values0[j];
    values[1][j] = values1[j];
    values[2][j] = values2[j];
    values[3][j] = values3[j];
    values[4][j] = values4[j];
    values[5][j] = values5[j];
    values[6][j] = values6[j];
    values[7][j] = values7[j];
    }
    for(int i = 0; i < 8; i++){
    for(int j = 0; j < 8; j++){
    counters[i][j] = 0;
    }
    }
    }

    void loop() {

    /// Multiplexer read alle
    for (int countM=0; countM<8; countM++) {<br />rowM = bin[countM];
    rm0 = bitRead(countM,0);
    rm1 = bitRead(countM,1);
    rm2 = bitRead(countM,2);
    digitalWrite(mS0, rm0);
    digitalWrite(mS1, rm1);
    digitalWrite(mS2, rm2);

    for (int countS=0; countS<8; countS++) {<br />rowS = bin[countS];
    rs0 = bitRead(countS,0);
    rs1 = bitRead(countS,1);
    rs2 = bitRead(countS,2);
    digitalWrite(sS0, rs0);
    digitalWrite(sS1, rs1);
    digitalWrite(sS2, rs2);

    if(values[countS][countM] == 1) {
    counters[countS][countM] = counters[countS][countM] + 1;
    }
    if( counters[countS][countM] > 50) {
    counters[countS][countM] = 0;
    values[countS][countM] = 0;
    }

    if ( analogRead(analogInput) < threshold) {
    // macht die umschaltung
    if(values[countS][countM] == 0) {
    values[countS][countM] = 1;
    }
    }

    dataArrayRED[countS] = values[countS][0]*1+values[countS][1]*2+values[countS][2]*4+values[countS][3]*8+values[countS][4]*16+values[countS][5]*32+values[countS][6]*64+values[countS][7]*128;
    //ground latchPin and hold low for as long as you are transmitting
    digitalWrite(latchPin, LOW);
    //move ?em out
    shiftOut(dataPin, clockPin, dataArrayGREEN[countS]);
    shiftOut(dataPin, clockPin, dataArrayRED[countS]);
    //return the latch pin high to signal chip that it
    //no longer needs to listen for information
    digitalWrite(latchPin, HIGH);
    }
    }

    }

    // the heart of the program
    void shiftOut(int dataPin, int clockPin, byte myDataOut) {

    //internal function setup
    int i=0;
    int pinState;
    pinMode(clockPin, OUTPUT);
    pinMode(dataPin, OUTPUT);


    digitalWrite(dataPin, LOW);
    digitalWrite(clockPin, LOW);

    for (i=7; i>=0; i?-) {
    digitalWrite(clockPin, LOW);
    if ( myDataOut & (1<<i) ) {<br />pinState= 1;
    }
    else {
    pinState= 0;
    }
    //Sets the pin to HIGH or LOW depending on pinState
    digitalWrite(dataPin, pinState);
    //register shifts bits on upstroke of clock pin
    digitalWrite(clockPin, HIGH);
    //zero the data pin after shift to prevent bleed through
    digitalWrite(dataPin, LOW);
    }
    digitalWrite(clockPin, LOW);
    }
  • for döngüsü içindeki countM ve countS'lerin tekrar çağırılması esnasında okunamama sorunu çıkıyor. Bu kodu bir yerden alırken parantezlerini vs. karıştırmış olmanız muhtemel. Kod uzun olduğu için de parantezleri kontrol edemem.

    Bu proje öğrenme projesiyse daha basit bir şeyle başlamanızı tavsiye ederim. Bu yeni başlayan biri için zor bir proje.

    Yukarıdaki postlarda belirttiğim düzeltmeleri yapmamışsınız zaten. Bu şekilde maalesef yardımcı olamayacağım.
  • Yukarıdaki postlarda verdiğiniz düzeltmelerin hepsini yaptım son halini ekledim. yinede çok teşekkür ederim koskaca forumda sizden başka yardımcı olan çıkmadı, bir çok komutun burada olmasından dolayı bu çalışmayı seçtim. Yine de çok teşekkür ederim.
    İyi çalışmalar...
  • br'leri kaldırmamışsınız. Kaldırsanız bile for döngüleri içindeki countM ve countSler for döngüsü dışında tekrar kullanılıyor, compiler doğal olarak o değişkenleri bulamıyor ve hata veriyor. Bu hatayı "{,}" doğru yerlere koyarak ya da döngüleri düzgün bir şekilde tekrar yazarak giderebilirsiniz. O zaman derleme hatasız gerçekleşiyor.

    Bu kodlar fonksiyon kullanımı açısından da zengin değil. Hatta oldukça kıt. Tamamen dizilerle yazılmış, Arduino adına sadece digitalWrite, pinMode fonksiyonları kullanılmış. Bu proje size Arduino kullanmayı öğretmez. Multiplexer kullanmayı öğretir.

    İyi çalışmalar.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.