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,285
Mesajlar
123,125
Üyeler
2,938
Son üye
oguzbaste

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top