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ı.

Kod:
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ı.
 

Forum istatistikleri

Konular
7,552
Mesajlar
126,466
Üyeler
3,057
Son üye
Hacın

Son kaynaklar

Son profil mesajları

Python Geliştirmeye eklediğim yapay zeka sunucusu, yeni başlayanlar için roket etkisi
Bir insanın zeka seviyesinin en kolay tesbiti, sorduğu sorulardır.
yapay zeka interneti yedi bitirdi, arama motoru kullanan, forumlara yazan kaldı mı ?
Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
az bilgili çok meraklı
Back
Top