• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Prośba o pomoc z uzupełnieniu małego projektu
#1
Witam
Zaczynam przygodę z Arduino i studiuję początki.
Mam jednak 1 temat.
Wpadł mi gotowy program do wyników z matrycy 4x16.
Program działa i zwraca dwie zmienne [i],[j]
Potrzebuję wprowadzić do tego programu dodatkowy kod.
1. Wynik zmiennej [j] zamienić na liczbę binarną
2. Przesunąć liczbę binarną o 4 = "dodać 4 zera na końcu"
3. Zmienić poz. 2 na liczbę dziesiętną i dodać do niej zmienną [i]

Coś takiego.
[i] 6
[j] 4=100 (bin)
100(4x0) = 1000000
1000000 = 64 (bin)
64+[i] = 70

Wiem, że to jeszcze nie mój etap, ale wdzięczny będę za pomoc. Może kiedyś pomogę komuś z grupy.
Kod aktualny

int masterLines = 17; //Change here to the number of lines of your Master Layer
int slaveLines = 5; //Change here to the number of lines of your Slave Layer
int matrixMaster[] = {20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52}; //Pins the Master Layer
int matrixSlave[] = {29, 31, 33, 35, 37 }; //pins the Slave Layer
int scal;
void setup() {   
    Serial.begin(9600);   
    Serial.println("Start"); //Start
    for(int i = 0; i < slaveLines; i++){       
        pinMode(matrixSlave[i], INPUT_PULLUP);   
    }
  for(int i = 0; i < masterLines; i++){       
      pinMode(matrixMaster[i], OUTPUT);       
      digitalWrite(matrixMaster[i], HIGH);   
  }
}
void loop() {   
    for(int i = 0; i < masterLines; i++)
      {       
        digitalWrite(matrixMaster[i], LOW);
               
        for(int j = 0; j < slaveLines; j++)
      {           
            if(digitalRead(matrixSlave[j]) == LOW)
              {
               
              Serial.print(j);
              Serial.print(",");                             
              Serial.println(i);
                delay(500);               
                break;           
            }       
        }       
        digitalWrite(matrixMaster[i], HIGH);   
    }
      }
 
Odpowiedź
#2
Żeby zrobić przesunięcie bitowe, pomnożyć czy zrobić jakiekolwiek inne działania arytmetyczne nie musisz zmieniać formatu liczb, bo w programie przechowywana jest ich wartość, a nie to co widzisz na ekranie. To programista decyduje, że typowo są one wyświetlane w formacie dziesiętnym (domyślnie i by taki efekt uzyskać nic szczególnego robić nie trzeba), binarnym, ósemkowym czy HEX.
Obojętne jest też, czy w programie do obliczeń podasz liczbę w formacie dziesiętnym, czy innym wymienonym wcześniej, ale po prostu do innych niż dziesiętne trzeba to programowi dodatkowo zakomunikować.
Przsunięcie bitowe to to samo co mnożenie lub dzielenie przez 2.
https://pl.wikibooks.org/wiki/C/Operator...cie_bitowe
A na koniec wystarczy uzyskaną liczbę wydrukować z zaznaczeniem, że ma być binarnie:
Serial.println(liczba,2);
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości