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

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

jun

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(mcured, HIGH); 
 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(x1a, LOW); 
    digitalWrite(x1b, LOW);
    digitalWrite(x1c, LOW);
    digitalWrite(x1d, LOW);
  }
  if(num == 1)//0001
  {
    digitalWrite(x1a, HIGH);
    digitalWrite(x1b, LOW);
    digitalWrite(x1c, LOW);
    digitalWrite(x1d, LOW);
  }
  if(num == 2)//0010
  {
    digitalWrite(x1a, LOW);//0
    digitalWrite(x1b, HIGH);//1
    digitalWrite(x1c, LOW);//0
    digitalWrite(x1d, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(x1a, HIGH);//1
    digitalWrite(x1b, HIGH);//1
    digitalWrite(x1c, LOW);//0
    digitalWrite(x1d, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(x1a, LOW);//0
    digitalWrite(x1b, LOW);//0
    digitalWrite(x1c, HIGH);//1
    digitalWrite(x1d, LOW);//0
  }
  if(num == 5)//0101
  {
    digitalWrite(x1a, HIGH);//1
    digitalWrite(x1b, LOW);//0
    digitalWrite(x1c, HIGH);//1
    digitalWrite(x1d, LOW);//0
  }
  if(num == 6)//0110
  {
    digitalWrite(x1a, LOW);//0
    digitalWrite(x1b, HIGH);//1
    digitalWrite(x1c, HIGH);//1
    digitalWrite(x1d, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(x1a, HIGH);//1
    digitalWrite(x1b, HIGH);//1
    digitalWrite(x1c, HIGH);//1
    digitalWrite(x1d, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(x1a, LOW);//0
    digitalWrite(x1b, LOW);//0
    digitalWrite(x1c, LOW);//0
    digitalWrite(x1d, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(x1a, HIGH);//1
    digitalWrite(x1b, LOW);//0
    digitalWrite(x1c, LOW);//0
    digitalWrite(x1d, HIGH);//1
  }
}

void disp2(int num)
{  
  if(num == 0)//0000
  {
    digitalWrite(x2a, LOW);//
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, LOW);//0
  }
  if(num == 1)//0001
  {
    digitalWrite(x2a, HIGH);//1
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, LOW);//0
  }
  if(num == 2)//0010
  {
    digitalWrite(x2a, LOW);//0
    digitalWrite(x2b, HIGH);//1
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(x2a, HIGH);//1
    digitalWrite(x2b, HIGH);//1
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(x2a, LOW);//0
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, HIGH);//1
    digitalWrite(x2d, LOW);//0
  }
  if(num == 5) //0101
  {
    digitalWrite(x2a, HIGH);//1
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, HIGH);//1
    digitalWrite(x2d, LOW);//0
  }
  if(num == 6) //0110
  {
    digitalWrite(x2a, LOW);//0
    digitalWrite(x2b, HIGH);//1
    digitalWrite(x2c, HIGH);//1
    digitalWrite(x2d, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(x2a, HIGH);//1
    digitalWrite(x2b, HIGH);//1
    digitalWrite(x2c, HIGH);//1
    digitalWrite(x2d, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(x2a, LOW);//0
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(x2a, HIGH);//1
    digitalWrite(x2b, LOW);//0
    digitalWrite(x2c, LOW);//0
    digitalWrite(x2d, HIGH);//1
  }
}

void disp3(int num)
{  
  if(num == 0)//0000
  {
    digitalWrite(x3a, LOW);//
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, LOW);//0
  }
  if(num == 1)//0001
  {
    digitalWrite(x3a, HIGH);//1
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, LOW);//0
  }
  if(num == 2)//0010
  {
    digitalWrite(x3a, LOW);//0
    digitalWrite(x3b, HIGH);//1
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(x3a, HIGH);//1
    digitalWrite(x3b, HIGH);//1
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(x3a, LOW);//0
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, HIGH);//1
    digitalWrite(x3d, LOW);//0
  }
  if(num == 5) //0101
  {
    digitalWrite(x3a, HIGH);//1
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, HIGH);//1
    digitalWrite(x3d, LOW);//0
  }
  if(num == 6) //0110
  {
    digitalWrite(x3a, LOW);//0
    digitalWrite(x3b, HIGH);//1
    digitalWrite(x3c, HIGH);//1
    digitalWrite(x3d, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(x3a, HIGH);//1
    digitalWrite(x3b, HIGH);//1
    digitalWrite(x3c, HIGH);//1
    digitalWrite(x3d, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(x3a, LOW);//0
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(x3a, HIGH);//1
    digitalWrite(x3b, LOW);//0
    digitalWrite(x3c, LOW);//0
    digitalWrite(x3d, HIGH);//1
  }
}

void disp4(int num)
{  
  if(num == 0)//0000
  {
    digitalWrite(x4a, LOW);//
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, LOW);//0
  }
  if(num == 1)//0001
  {
    digitalWrite(x4a, HIGH);//1
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, LOW);//0
  }
  if(num == 2)//0010
  {
    digitalWrite(x4a, LOW);//0
    digitalWrite(x4b, HIGH);//1
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, LOW);//0
  }
  if(num == 3)//0011
  {
    digitalWrite(x4a, HIGH);//1
    digitalWrite(x4b, HIGH);//1
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, LOW);//0
  }
  if(num == 4)//0100
  {
    digitalWrite(x4a, LOW);//0
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, HIGH);//1
    digitalWrite(x4d, LOW);//0
  }
  if(num == 5) //0101
  {
    digitalWrite(x4a, HIGH);//1
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, HIGH);//1
    digitalWrite(x4d, LOW);//0
  }
  if(num == 6) //0110
  {
    digitalWrite(x4a, LOW);//0
    digitalWrite(x4b, HIGH);//1
    digitalWrite(x4c, HIGH);//1
    digitalWrite(x4d, LOW);//0
  }
  if(num == 7) //0111
  {
    digitalWrite(x4a, HIGH);//1
    digitalWrite(x4b, HIGH);//1
    digitalWrite(x4c, HIGH);//1
    digitalWrite(x4d, LOW);//0
  }
  if(num == 8) //1000
  {
    digitalWrite(x4a, LOW);//0
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, HIGH);//1
  }
  if(num == 9)//1001
  {
    digitalWrite(x4a, HIGH);//1
    digitalWrite(x4b, LOW);//0
    digitalWrite(x4c, LOW);//0
    digitalWrite(x4d, HIGH);//1
  }
}

gold3nnn

#5
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  7segment( long 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(x1a, HIGH);digitalWrite(x1b, LOW); digitalWrite(x1c, LOW);digitalWrite(x1d, LOW);}     
  if(birler==2){digitalWrite(x1a, LOW); digitalWrite(x1b, HIGH);digitalWrite(x1c, LOW);digitalWrite(x1d, LOW);} 
  if(birler==3){digitalWrite(x1a, HIGH);digitalWrite(x1b, HIGH);digitalWrite(x1c, LOW);digitalWrite(x1d, LOW);} 
  if(birler==4){digitalWrite(x1a, LOW);digitalWrite(x1b, LOW);  digitalWrite(x1c, HIGH);digitalWrite(x1d, LOW);}  
  if(birler==5){digitalWrite(x1a, HIGH);digitalWrite(x1b, LOW); digitalWrite(x1c, HIGH);digitalWrite(x1d, LOW);}       
  if(birler==6){digitalWrite(x1a, LOW);digitalWrite(x1b, HIGH); digitalWrite(x1c, HIGH);digitalWrite(x1d, LOW);}  
  if(birler==7){digitalWrite(x1a, HIGH);digitalWrite(x1b, HIGH);digitalWrite(x1c, HIGH);digitalWrite(x1d, LOW);}  
  if(birler==8){digitalWrite(x1a, LOW);digitalWrite(x1b, LOW);  digitalWrite(x1c, LOW);digitalWrite(x1d, HIGH);}  
  if(birler==9){digitalWrite(x1a, HIGH);digitalWrite(x1b, LOW); digitalWrite(x1c, LOW);digitalWrite(x1d, HIGH);}       
  if(birler==0){digitalWrite(x1a, LOW); digitalWrite(x1b, LOW); digitalWrite(x1c, LOW); digitalWrite(x1d, LOW);} 

  if(onlar==1){digitalWrite(x2a, HIGH);digitalWrite(x2b, LOW); digitalWrite(x2c, LOW);digitalWrite(x2d, LOW);}     
  if(onlar==2){digitalWrite(x2a, LOW); digitalWrite(x2b, HIGH);digitalWrite(x2c, LOW);digitalWrite(x2d, LOW);} 
  if(onlar==3){digitalWrite(x2a, HIGH);digitalWrite(x2b, HIGH);digitalWrite(x2c, LOW);digitalWrite(x2d, LOW);} 
  if(onlar==4){digitalWrite(x2a, LOW);digitalWrite(x2b, LOW);  digitalWrite(x2c, HIGH);digitalWrite(x2d, LOW);}  
  if(onlar==5){digitalWrite(x2a, HIGH);digitalWrite(x2b, LOW); digitalWrite(x2c, HIGH);digitalWrite(x2d, LOW);}       
  if(onlar==6){digitalWrite(x2a, LOW);digitalWrite(x2b, HIGH); digitalWrite(x2c, HIGH);digitalWrite(x2d, LOW);}  
  if(onlar==7){digitalWrite(x2a, HIGH);digitalWrite(x2b, HIGH);digitalWrite(x2c, HIGH);digitalWrite(x2d, LOW);}  
  if(onlar==8){digitalWrite(x2a, LOW);digitalWrite(x2b, LOW);  digitalWrite(x2c, LOW);digitalWrite(x2d, HIGH);}  
  if(onlar==9){digitalWrite(x2a, HIGH);digitalWrite(x2b, LOW); digitalWrite(x2c, LOW);digitalWrite(x2d, HIGH);}       
  if(onlar==0){digitalWrite(x2a, LOW); digitalWrite(x2b, LOW); digitalWrite(x2c, LOW); digitalWrite(x2d, LOW);} 

  if(yuzler==1){digitalWrite(x3a, HIGH);digitalWrite(x3b, LOW);digitalWrite(x3c, LOW);digitalWrite(x3d, LOW);}     
  if(yuzler==2){digitalWrite(x3a, LOW); digitalWrite(x3b, HIGH);digitalWrite(x3c, LOW);digitalWrite(x3d, LOW);} 
  if(yuzler==3){digitalWrite(x3a, HIGH);digitalWrite(x3b, HIGH);digitalWrite(x3c, LOW);digitalWrite(x3d, LOW);} 
  if(yuzler==4){digitalWrite(x3a, LOW);digitalWrite(x3b, LOW);digitalWrite(x3c, HIGH);digitalWrite(x3d, LOW);}  
  if(yuzler==5){digitalWrite(x3a, HIGH);digitalWrite(x3b, LOW);digitalWrite(x3c, HIGH);digitalWrite(x3d, LOW);}       
  if(yuzler==6){digitalWrite(x3a, LOW);digitalWrite(x3b, HIGH);digitalWrite(x3c, HIGH);digitalWrite(x3d, LOW);}  
  if(yuzler==7){digitalWrite(x3a, HIGH);digitalWrite(x3b, HIGH);digitalWrite(x3c, HIGH);digitalWrite(x3d, LOW);}  
  if(yuzler==8){digitalWrite(x3a, LOW);digitalWrite(x3b, LOW);digitalWrite(x3c, LOW);  digitalWrite(x3d, HIGH);}  
  if(yuzler==9){digitalWrite(x3a, HIGH);digitalWrite(x3b, LOW);digitalWrite(x3c, LOW); digitalWrite(x3d, HIGH);}       
  if(yuzler==0){digitalWrite(x3a, LOW); digitalWrite(x3b, LOW);digitalWrite(x3c, LOW); digitalWrite(x3d, LOW);} 
  
  if(binler==1){digitalWrite(x4a, HIGH);digitalWrite(x4b, LOW);digitalWrite(x4c, LOW);digitalWrite(x4d, LOW);}     
  if(binler==2){digitalWrite(x4a, LOW); digitalWrite(x4b, HIGH);digitalWrite(x4c, LOW);digitalWrite(x4d, LOW);} 
  if(binler==3){digitalWrite(x4a, HIGH);digitalWrite(x4b, HIGH);digitalWrite(x4c, LOW);digitalWrite(x4d, LOW);} 
  if(binler==4){digitalWrite(x4a, LOW);digitalWrite(x4b, LOW);digitalWrite(x4c, HIGH);digitalWrite(x4d, LOW);}  
  if(binler==5){digitalWrite(x4a, HIGH);digitalWrite(x4b, LOW);digitalWrite(x4c, HIGH);digitalWrite(x4d, LOW);}       
  if(binler==6){digitalWrite(x4a, LOW);digitalWrite(x4b, HIGH);digitalWrite(x4c, HIGH);digitalWrite(x4d, LOW);}  
  if(binler==7){digitalWrite(x4a, HIGH);digitalWrite(x4b, HIGH);digitalWrite(x4c, HIGH);digitalWrite(x4d, LOW);}  
  if(binler==8){digitalWrite(x4a, LOW);digitalWrite(x4b, LOW);digitalWrite(x4c, LOW);  digitalWrite(x4d, HIGH);}  
  if(binler==9){digitalWrite(x4a, HIGH);digitalWrite(x4b, LOW);digitalWrite(x4c, LOW); digitalWrite(x4d, HIGH);}       
  if(binler==0){digitalWrite(x4a, LOW); digitalWrite(x4b, LOW);digitalWrite(x4c, LOW); digitalWrite(x4d, LOW);} 

   //delayms(200);
} 
 
////////////////////////////////////////////////////////////////////

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

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

  }
}