5 Haneli 7 Segment Display Arduino Yazma Hatası

Burak27471

Yeni Üye
Katılım
13 Ekim 2024
Mesajlar
2
İyi günler, Bluetooth ile 5 Haneli 7-Segment Display'e gönderdiğim numaranın ilk hanesi görünmüyor. Farklı gönderimlerin sonuçları aşağıdadır. Yardımcı olursanız sevinirim.

Kod:
#include <SPI.h>
#include <SoftwareSerial.h>


int exctDigit(byte input);

void dataWrite(int st);
int latchPin = 5;   // to pin 12
int clockPin = 6;  // to pin 11
int dataPin = 4;  // to pin 14
SoftwareSerial mySerial(7, 8); // RX, TX

boolean sayi[10][8] =
{
{0,1,1,1,1,1,1,1},
{0,1,1,0,0,0,0,1},
{1,0,1,1,0,1,1,1},
{1,1,1,1,0,0,1,1},
{1,1,1,0,1,0,0,1},
{1,1,0,1,1,0,1,1},
{1,1,0,1,1,1,1,1},
{0,1,1,1,0,0,0,1},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,0,1,1}
};
boolean dizi[] = {
  1, 0, 0, 0, 0, 0, 0, 1,
  1, 0, 0, 1, 0, 0, 1, 1,
  1, 0, 0, 1, 0, 0, 1, 1,
  1, 0, 0, 1, 0, 0, 1, 1,
  1, 0, 0, 1, 0, 0, 1, 1};  //sadece "1"lerden ve "0"lardan oluşan dizi
byte b1 = 0;        // byte place holders for each shift register
byte b2 = 0;        // extracted from "light"
byte b3 = 0;
byte b4 = 0;
byte b5 = 0;
int x = 0;
unsigned long sa = 2541;

int parseIntArray[5];


void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  for (int i = 0 ; i < 5 ; i++)    
  {
    for(int k = 0;k <8;k++)
    {
     
       x =  sayi[0][k];                    //for dönügü boyunca dizinin i. değeri x'e atanır
   
    digitalWrite(dataPin, x);       //datapin'e x değeri verilir
    digitalWrite(clockPin, 1);      //saat darbesi ile yazma ve kaydırma işlemi yapılır
    digitalWrite(clockPin, 0);
    }
   
  }
  digitalWrite(latchPin, 1);        //8 bitli dizi çıkışa verilir


}

void loop() {
 byte buffer[8];
  // put your main code here, to run repeatedly:

 
   int numberOfData = mySerial.available() ;
    if(numberOfData>0)
      {
      unsigned long  k=0;
     
      for(int i=1;i<=numberOfData;i++)
      {
         unsigned long ust =1;
         for(int s =0;s<numberOfData-i;s++)
         {
          ust = ust * 10;
         }
         k +=(unsigned long) exctDigit (mySerial.read())*(unsigned long)ust;
       
      }
   
      dataWrite(k);
      buffer[0] =0;
      buffer[1] =0;
      buffer[2] =0;
      buffer[3] =0;
   

 }
}
void dataWrite(unsigned long st)
{
    digitalWrite(latchPin, 0);        //latchpin "0" konumuna getirilir
   
 parseIntArray[4]= (st%1000)/100;
 parseIntArray[3]= (st%10000)/1000;
 parseIntArray[2]= (st%100000)/10000;
 parseIntArray[1]= (st%1000000)/100000;
 parseIntArray[0]= (st%10000000)/1000000;

 
 for (int i = 0 ; i < 5 ; i++)    
  {
    for(int k = 0;k <8;k++)
    {
     
       x =  sayi[parseIntArray[i]][k];                    //for dönügü boyunca dizinin i. değeri x'e atanır
   
    digitalWrite(dataPin, x);       //datapin'e x değeri verilir
    digitalWrite(clockPin, 1);      //saat darbesi ile yazma ve kaydırma işlemi yapılır
    digitalWrite(clockPin, 0);
    }
   
  }
  digitalWrite(latchPin, 1);        //8 bitli dizi çıkışa verilir

}
int exctDigit(byte input)

{
  switch(input)
        {
                case '0':       return 0;
                case '1':       return 1;
                case '2':       return 2;
                case '3':       return 3;
                case '4':       return 4;
                case '5':       return 5;
                case '6':       return 6;
                case '7':       return 7;
                case '8':       return 8;
                case '9':       return 9;
               
        }
        return 0;

}

1-.jpeg
1.jpeg
2-.jpeg
2.jpeg
3-.jpeg
3.jpeg

WhatsApp Image 2024-10-12 at 18.22.03 (1).jpeg

WhatsApp Image 2024-10-12 at 18.22.03.jpeg
 
Son düzenleme:
Programı bir "kod" bloğunun içine alırsan okunabilirliği çok daha iyi olur.

1728851035484.png
 
Aşağıdaki for loop'ta i değişkenini çıkarman yanlış gibime geliyor. Genel olarak for loop'larda belli bir konvansiyona göre gitmek lazım. Mesela 0 dan (count - 1) değerine gitmek bana göre en mantıklısı.

C++:
for(int s =0;s<numberOfData-i;s++)
 
seriden gelen ilk bytetı bir şekilde kaçırıyosun bence. ekrana yazdırmak yerine seriden aldığın veri dizisini debug amaçlı tekrar başka bir seri portdan yazdır. bakalım verilerde bir eksik var mı.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
6,704
Mesajlar
114,480
Üyeler
2,750
Son üye
Kahraman

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Back
Top