Arduino 4 haneli sayıyı basamaklarına ayırma

Başlatan jun, 13 Ağustos 2021, 22:22:23

jun

13 Ağustos 2021, 22:22:23 Son düzenlenme: 13 Ağustos 2021, 23:38:35 gevv
Merhaba arkadaşlar arduino ile 7 segment sayıcı yapıyorum,sürücü olarak cd 4511 kullanıyorum.4 haneli bir sayıyı ayırıp dizi değişkende nasıl tutacağıma dair bir örnek verebilirmisiniz.
Teşekkürler

fide

Binler = sayi /1000
Yüzler = (sayi mod 1000) /100
Onlar =  (sayi mod 100) /10
Birler = sayi mod 10

Yani sadece matematik işlemi
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

mustafacan

Sayı parçalanmış şimdi bunları bir yerlere kayıt ettirmeli lazım olduğundada geri çağırmalı
Keşfedilecek çok teknoloji var. Boş Vaktim Yok!

fide

int dizi[4];

dizi = {birler, onlar, yüzler, binler};


Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

jun

Merhaba yardımlarınız için teşekkürler yazılımın loop bölümü aşağıdadır.
3. basamak olan yüzler hanesinde şöyle bir problem var yüzler hanesi 2 olması gerekirken 0, 3 olaması gerekirken 1, 6 olaması gerekirken 4, 7 olaması gerekirken 5, 8 olaması gerekirken 0, 9 olaması gerekirken 1 gösteriyor.

void loop(){
  
digitalWrite(mcuredHIGH); 
 
state1 digitalRead(artir);
 
state2 digitalRead(azalt);
 
state3 digitalRead(res_et);
 if(
state1 == HIGH){
 
        
int ekle =0;
        while(
state1==1){
        
sayi=sayi+1;
          
ekle=ekle+1;
          if(
ekle==8)
              {
              
// z=50;
              
z=150;
                }
          
//display.printNumber(sayi);
          
Binler sayi /1000;
          
Yuzler = (sayi 1000) /100;
          
Onlar =  (sayi 100) /10;
          
Birler sayi 10;                              
 
          
disp1(Birler);
          
disp2(Onlar);
          
disp3(Yuzler);
          
disp4(Binler);
          
delay(z);
            
state1 digitalRead(artir);
                    }  
 }

 if(
state2 == HIGH){
  
        
int ekle =0;
        while(
state2==1){
        
sayi=sayi-1;
          
ekle=ekle+1;
          if(
ekle==8)
              {
              
// z=50;
              
z=150;
                }
          
//display.printNumber(sayi);
          
Binler sayi /1000;
          
Yuzler = (sayi 1000) /100;
          
Onlar =  (sayi 100) /10;
          
Birler sayi 10;                      
 
          
disp1(Birler);
          
disp2(Onlar);
          
disp3(Yuzler);
          
disp4(Binler);
          
delay(z);
            
state2 digitalRead(azalt);
                    }  
 }

 if(
state3 == HIGH){
  
        
sayi=0;        
          
                      
 }
 
 if(
sayi==2000){
  
sayi=0;
 }



 
          
Binler sayi /1000;
          
Yuzler = (sayi 1000) /100;
          
Onlar =  (sayi 100) /10;
          
Birler sayi 10        ;                      
 
          
disp1(Birler);
          
disp2(Onlar);
          
disp3(Yuzler);
          
disp4(Binler);
 
delay(100);//100 ms delay to debounce
 
}

void disp1(int num){
  if(
num == 0)//0000
  
{
    
digitalWrite(x1aLOW); 
    
digitalWrite(x1bLOW);
    
digitalWrite(x1cLOW);
    
digitalWrite(x1dLOW);
  }
  if(
num == 1)//0001
  
{
    
digitalWrite(x1aHIGH);
    
digitalWrite(x1bLOW);
    
digitalWrite(x1cLOW);
    
digitalWrite(x1dLOW);
  }
  if(
num == 2)//0010
  
{
    
digitalWrite(x1aLOW);//0
    
digitalWrite(x1bHIGH);//1
    
digitalWrite(x1cLOW);//0
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 3)//0011
  
{
    
digitalWrite(x1aHIGH);//1
    
digitalWrite(x1bHIGH);//1
    
digitalWrite(x1cLOW);//0
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 4)//0100
  
{
    
digitalWrite(x1aLOW);//0
    
digitalWrite(x1bLOW);//0
    
digitalWrite(x1cHIGH);//1
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 5)//0101
  
{
    
digitalWrite(x1aHIGH);//1
    
digitalWrite(x1bLOW);//0
    
digitalWrite(x1cHIGH);//1
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 6)//0110
  
{
    
digitalWrite(x1aLOW);//0
    
digitalWrite(x1bHIGH);//1
    
digitalWrite(x1cHIGH);//1
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 7//0111
  
{
    
digitalWrite(x1aHIGH);//1
    
digitalWrite(x1bHIGH);//1
    
digitalWrite(x1cHIGH);//1
    
digitalWrite(x1dLOW);//0
  
}
  if(
num == 8//1000
  
{
    
digitalWrite(x1aLOW);//0
    
digitalWrite(x1bLOW);//0
    
digitalWrite(x1cLOW);//0
    
digitalWrite(x1dHIGH);//1
  
}
  if(
num == 9)//1001
  
{
    
digitalWrite(x1aHIGH);//1
    
digitalWrite(x1bLOW);//0
    
digitalWrite(x1cLOW);//0
    
digitalWrite(x1dHIGH);//1
  
}
}

void disp2(int num)
{  
  if(
num == 0)//0000
  
{
    
digitalWrite(x2aLOW);//
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 1)//0001
  
{
    
digitalWrite(x2aHIGH);//1
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 2)//0010
  
{
    
digitalWrite(x2aLOW);//0
    
digitalWrite(x2bHIGH);//1
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 3)//0011
  
{
    
digitalWrite(x2aHIGH);//1
    
digitalWrite(x2bHIGH);//1
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 4)//0100
  
{
    
digitalWrite(x2aLOW);//0
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cHIGH);//1
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 5//0101
  
{
    
digitalWrite(x2aHIGH);//1
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cHIGH);//1
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 6//0110
  
{
    
digitalWrite(x2aLOW);//0
    
digitalWrite(x2bHIGH);//1
    
digitalWrite(x2cHIGH);//1
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 7//0111
  
{
    
digitalWrite(x2aHIGH);//1
    
digitalWrite(x2bHIGH);//1
    
digitalWrite(x2cHIGH);//1
    
digitalWrite(x2dLOW);//0
  
}
  if(
num == 8//1000
  
{
    
digitalWrite(x2aLOW);//0
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dHIGH);//1
  
}
  if(
num == 9)//1001
  
{
    
digitalWrite(x2aHIGH);//1
    
digitalWrite(x2bLOW);//0
    
digitalWrite(x2cLOW);//0
    
digitalWrite(x2dHIGH);//1
  
}
}

void disp3(int num)
{  
  if(
num == 0)//0000
  
{
    
digitalWrite(x3aLOW);//
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 1)//0001
  
{
    
digitalWrite(x3aHIGH);//1
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 2)//0010
  
{
    
digitalWrite(x3aLOW);//0
    
digitalWrite(x3bHIGH);//1
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 3)//0011
  
{
    
digitalWrite(x3aHIGH);//1
    
digitalWrite(x3bHIGH);//1
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 4)//0100
  
{
    
digitalWrite(x3aLOW);//0
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cHIGH);//1
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 5//0101
  
{
    
digitalWrite(x3aHIGH);//1
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cHIGH);//1
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 6//0110
  
{
    
digitalWrite(x3aLOW);//0
    
digitalWrite(x3bHIGH);//1
    
digitalWrite(x3cHIGH);//1
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 7//0111
  
{
    
digitalWrite(x3aHIGH);//1
    
digitalWrite(x3bHIGH);//1
    
digitalWrite(x3cHIGH);//1
    
digitalWrite(x3dLOW);//0
  
}
  if(
num == 8//1000
  
{
    
digitalWrite(x3aLOW);//0
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dHIGH);//1
  
}
  if(
num == 9)//1001
  
{
    
digitalWrite(x3aHIGH);//1
    
digitalWrite(x3bLOW);//0
    
digitalWrite(x3cLOW);//0
    
digitalWrite(x3dHIGH);//1
  
}
}

void disp4(int num)
{  
  if(
num == 0)//0000
  
{
    
digitalWrite(x4aLOW);//
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 1)//0001
  
{
    
digitalWrite(x4aHIGH);//1
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 2)//0010
  
{
    
digitalWrite(x4aLOW);//0
    
digitalWrite(x4bHIGH);//1
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 3)//0011
  
{
    
digitalWrite(x4aHIGH);//1
    
digitalWrite(x4bHIGH);//1
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 4)//0100
  
{
    
digitalWrite(x4aLOW);//0
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cHIGH);//1
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 5//0101
  
{
    
digitalWrite(x4aHIGH);//1
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cHIGH);//1
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 6//0110
  
{
    
digitalWrite(x4aLOW);//0
    
digitalWrite(x4bHIGH);//1
    
digitalWrite(x4cHIGH);//1
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 7//0111
  
{
    
digitalWrite(x4aHIGH);//1
    
digitalWrite(x4bHIGH);//1
    
digitalWrite(x4cHIGH);//1
    
digitalWrite(x4dLOW);//0
  
}
  if(
num == 8//1000
  
{
    
digitalWrite(x4aLOW);//0
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dHIGH);//1
  
}
  if(
num == 9)//1001
  
{
    
digitalWrite(x4aHIGH);//1
    
digitalWrite(x4bLOW);//0
    
digitalWrite(x4cLOW);//0
    
digitalWrite(x4dHIGH);//1
  
}
}

gold3nnn

16 Ağustos 2021, 13:28:26 #5 Son düzenlenme: 16 Ağustos 2021, 16:13:56 gold3nnn
void decimalParcala(float decimal)
{
  float deger1 = 0;
  deger1 = decimal* 100;
  binler = deger1 / 1000;
  deger1 = deger1 - (binler * 1000); // bulduğumuz binler basamagı deger orjinal degerden çıkartılır.
  yuzler = deger1 / 100;
  deger1 = deger1 - (yuzler * 100);
  onlar = deger1 / 10;
  deger1 = deger1 - (onlar * 10);
  birler = deger1;
}

Bu çalışan bir kod kendim kullanıyorum.

serkan

xc8 de kullandığım çalışan kodu Arduino için düzenledim.


 
void  7segment
long sayi);
long say=0;
////////////////////////////////////////////////
void  7segmentlong sayi)    
    {                
  
//basamaklara ayir
    
long birler,onlar,yuzler,binler,onbinler,yuzbinler,milyonlar
 
milyonlar    =  (sayi/1000000)%10// 
 
yuzbinler   =  (sayi/100000)%10;   // 
 
onbinler   =  (sayi/10000)%10;     // 
 
binler    =  (sayi/1000)%10;       // 
 
yuzler   =  (sayi/100)%10;         //   
 
onlar   =  (sayi/10)%10;           //  
 
birler =  (sayi/1)%10;             //  

  
if(birler==1){digitalWrite(x1aHIGH);digitalWrite(x1bLOW); digitalWrite(x1cLOW);digitalWrite(x1dLOW);}     
  if(
birler==2){digitalWrite(x1aLOW); digitalWrite(x1bHIGH);digitalWrite(x1cLOW);digitalWrite(x1dLOW);} 
  if(
birler==3){digitalWrite(x1aHIGH);digitalWrite(x1bHIGH);digitalWrite(x1cLOW);digitalWrite(x1dLOW);} 
  if(
birler==4){digitalWrite(x1aLOW);digitalWrite(x1bLOW);  digitalWrite(x1cHIGH);digitalWrite(x1dLOW);}  
  if(
birler==5){digitalWrite(x1aHIGH);digitalWrite(x1bLOW); digitalWrite(x1cHIGH);digitalWrite(x1dLOW);}       
  if(
birler==6){digitalWrite(x1aLOW);digitalWrite(x1bHIGH); digitalWrite(x1cHIGH);digitalWrite(x1dLOW);}  
  if(
birler==7){digitalWrite(x1aHIGH);digitalWrite(x1bHIGH);digitalWrite(x1cHIGH);digitalWrite(x1dLOW);}  
  if(
birler==8){digitalWrite(x1aLOW);digitalWrite(x1bLOW);  digitalWrite(x1cLOW);digitalWrite(x1dHIGH);}  
  if(
birler==9){digitalWrite(x1aHIGH);digitalWrite(x1bLOW); digitalWrite(x1cLOW);digitalWrite(x1dHIGH);}       
  if(
birler==0){digitalWrite(x1aLOW); digitalWrite(x1bLOW); digitalWrite(x1cLOW); digitalWrite(x1dLOW);} 

  if(
onlar==1){digitalWrite(x2aHIGH);digitalWrite(x2bLOW); digitalWrite(x2cLOW);digitalWrite(x2dLOW);}     
  if(
onlar==2){digitalWrite(x2aLOW); digitalWrite(x2bHIGH);digitalWrite(x2cLOW);digitalWrite(x2dLOW);} 
  if(
onlar==3){digitalWrite(x2aHIGH);digitalWrite(x2bHIGH);digitalWrite(x2cLOW);digitalWrite(x2dLOW);} 
  if(
onlar==4){digitalWrite(x2aLOW);digitalWrite(x2bLOW);  digitalWrite(x2cHIGH);digitalWrite(x2dLOW);}  
  if(
onlar==5){digitalWrite(x2aHIGH);digitalWrite(x2bLOW); digitalWrite(x2cHIGH);digitalWrite(x2dLOW);}       
  if(
onlar==6){digitalWrite(x2aLOW);digitalWrite(x2bHIGH); digitalWrite(x2cHIGH);digitalWrite(x2dLOW);}  
  if(
onlar==7){digitalWrite(x2aHIGH);digitalWrite(x2bHIGH);digitalWrite(x2cHIGH);digitalWrite(x2dLOW);}  
  if(
onlar==8){digitalWrite(x2aLOW);digitalWrite(x2bLOW);  digitalWrite(x2cLOW);digitalWrite(x2dHIGH);}  
  if(
onlar==9){digitalWrite(x2aHIGH);digitalWrite(x2bLOW); digitalWrite(x2cLOW);digitalWrite(x2dHIGH);}       
  if(
onlar==0){digitalWrite(x2aLOW); digitalWrite(x2bLOW); digitalWrite(x2cLOW); digitalWrite(x2dLOW);} 

  if(
yuzler==1){digitalWrite(x3aHIGH);digitalWrite(x3bLOW);digitalWrite(x3cLOW);digitalWrite(x3dLOW);}     
  if(
yuzler==2){digitalWrite(x3aLOW); digitalWrite(x3bHIGH);digitalWrite(x3cLOW);digitalWrite(x3dLOW);} 
  if(
yuzler==3){digitalWrite(x3aHIGH);digitalWrite(x3bHIGH);digitalWrite(x3cLOW);digitalWrite(x3dLOW);} 
  if(
yuzler==4){digitalWrite(x3aLOW);digitalWrite(x3bLOW);digitalWrite(x3cHIGH);digitalWrite(x3dLOW);}  
  if(
yuzler==5){digitalWrite(x3aHIGH);digitalWrite(x3bLOW);digitalWrite(x3cHIGH);digitalWrite(x3dLOW);}       
  if(
yuzler==6){digitalWrite(x3aLOW);digitalWrite(x3bHIGH);digitalWrite(x3cHIGH);digitalWrite(x3dLOW);}  
  if(
yuzler==7){digitalWrite(x3aHIGH);digitalWrite(x3bHIGH);digitalWrite(x3cHIGH);digitalWrite(x3dLOW);}  
  if(
yuzler==8){digitalWrite(x3aLOW);digitalWrite(x3bLOW);digitalWrite(x3cLOW);  digitalWrite(x3dHIGH);}  
  if(
yuzler==9){digitalWrite(x3aHIGH);digitalWrite(x3bLOW);digitalWrite(x3cLOW); digitalWrite(x3dHIGH);}       
  if(
yuzler==0){digitalWrite(x3aLOW); digitalWrite(x3bLOW);digitalWrite(x3cLOW); digitalWrite(x3dLOW);} 
  
  if(
binler==1){digitalWrite(x4aHIGH);digitalWrite(x4bLOW);digitalWrite(x4cLOW);digitalWrite(x4dLOW);}     
  if(
binler==2){digitalWrite(x4aLOW); digitalWrite(x4bHIGH);digitalWrite(x4cLOW);digitalWrite(x4dLOW);} 
  if(
binler==3){digitalWrite(x4aHIGH);digitalWrite(x4bHIGH);digitalWrite(x4cLOW);digitalWrite(x4dLOW);} 
  if(
binler==4){digitalWrite(x4aLOW);digitalWrite(x4bLOW);digitalWrite(x4cHIGH);digitalWrite(x4dLOW);}  
  if(
binler==5){digitalWrite(x4aHIGH);digitalWrite(x4bLOW);digitalWrite(x4cHIGH);digitalWrite(x4dLOW);}       
  if(
binler==6){digitalWrite(x4aLOW);digitalWrite(x4bHIGH);digitalWrite(x4cHIGH);digitalWrite(x4dLOW);}  
  if(
binler==7){digitalWrite(x4aHIGH);digitalWrite(x4bHIGH);digitalWrite(x4cHIGH);digitalWrite(x4dLOW);}  
  if(
binler==8){digitalWrite(x4aLOW);digitalWrite(x4bLOW);digitalWrite(x4cLOW);  digitalWrite(x4dHIGH);}  
  if(
binler==9){digitalWrite(x4aHIGH);digitalWrite(x4bLOW);digitalWrite(x4cLOW); digitalWrite(x4dHIGH);}       
  if(
binler==0){digitalWrite(x4aLOW); digitalWrite(x4bLOW);digitalWrite(x4cLOW); digitalWrite(x4dLOW);} 

   
//delayms(200);

 
////////////////////////////////////////////////////////////////////

void  main()// void loop(){
{
 

  
say=10007segment(say);
  
  while(
1)             
  {      
 
state1 digitalRead(artir);
 
state2 digitalRead(azalt);      
if(
state1 == HIGH){ say+=1;7segment(say); }
if(
state2 == HIGH){ say-=1;7segment(say); }

  }
}

Yasal Uyarı: Picproje.org sitemizde 5651 sayılı kanunun 8. maddesine ve T.C.Knın 125. maddesine göre tüm üyelerimiz yaptıkları paylaşımlardan kendileri sorumludur. Picproje.org hakkında yapılacak tüm hukuksal şikayetleri İletişim sayfamızdan bize bildirdikten en geç 3 (üç) iş günü içerisinde ilgili kanunlar ve yönetmelikler çerçevesinde tarafımızca incelenerek gereken işlemler yapılacak ve site yöneticilerimiz tarafından bilgi verilecektir.