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;
}
Son düzenleme: