• 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
Jak zmienić tablicę na liczbę całkowita??
#1
dam przykład mam tablicę 
x[] = (1,2,3,4);

i liczbę całkowitą
int y;

 teraz jak zapisać

x[0] = 1;
x[1] = 2;
x[2] = 3;
x[3] = 4;

do postaci liczby 

y= 1234
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#2
y=x[0]*1000+x[1] x100+ ...itd.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Zapomniałem napisać ale chyba to ważne że tablice mam w char. Jaka tablice dać? Bo w char krzaki wychodza?
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#4
Char to też liczba 0-255, można to wykorzystać, że określone cyfry to określona liczba i odjąć stałą przesunięcia w tablicy char bo znaki drukowalne są przesunięte o kilkadziesiąt. Są też do tego gotowe funkcje, w C konwertujesz itoa (int to asccii), atoi w druga stronę, w C i w Arduino możesz skleić napis w String i cały przekonwertować funkcją https://www.arduino.cc/reference/en/lang...ons/toint/. Do każdego typu liczb są inne funkcje, więc jak masz jakieś przecinki to musisz wiedzieć.




Kod:
String myString="";
myString= x[0] +x[1]  + ...itd.;

int zmiennaliczbowa=myString.toInt();

Jaką liczbą jest znak możesz sprawdzić oczami Serial.println((uint8_t) (x[0]));
Metod jest wiele, warto sprawdzać przy łączeniu czy znak jest cyfrą.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
No właśnie to liczba co chce zmienić  przechwytuje pakiet UDP  AC1234\n rozbijam to do tablicy char

ubuffer [0]
ubuffer [1] itd.. wyluczam litery AC i koniec \n 

i zrobiłem tak jak wyżej 

int zmienna =ubufffer[2]*1000+ubuffer[3] x100+ ...itd do [5]

Co widać że po przechwyceniu w tablicy mam AC1234\n

A po obliczeniu zmienna 54562


Zobaczę wieczorem ze stringiem choć to było łatwiejszeWink


Załączone pliki Miniatury
   
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#6
Kaczakat dobrze pisze, tylko że nie istnieje coś takiego jak konkatenacja zmiennych char.
Trzeba je od razu konwertować do String.
Kod:
myString = String(x[0]) + String(x[1]) + ...itd.;

A potem dopiero można zrobić z tego inta:
myString.toInt()
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#7
Przyznaję, że w poprzednim poście pomieszałem trochę C i Arduino, konwertować literek w ogóle nie trzeba, bo tablica char (i powinna być zapisana np. jak poniżej, by było wiadomo, że to literki) jest C stringiem i całą można zamienić na stringa Arduino. Ale można ją też w całości przekonwertować na liczbę, jeśli jest już sprawdzona:
Kod:
char tabchar[]={'1','2','3','4'};


void setup() {
 // put your setup code here, to run once:
int liczba = atoi(tabchar);
Serial.begin(115200);
Serial.print("jako napis ");
Serial.println(tabchar);
Serial.print("Jako liczba ");
Serial.println(liczba/2);

Serial.print ("Jako string ");
String napis=String(tabchar);
Serial.println(napis);
liczba=napis.toInt();
Serial.print("Jako liczba ze stringa ");
Serial.println(liczba/4);


}

void loop() {
 // put your main code here, to run repeatedly:

}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#8
Dzięki chłopaki za pomoc działa pierwszy sposób znalazłem u siebie błąd głupi błąd bo ja pakiet udp telefonem wysyłałem i wysyłałem w HEX ale liczby 1,2,3 jako 0x31 0x32 itd.. Dopiero przy stringach mi wyszło że liczba wysłana to w udp hex bedzie 0x01 0x02 itd.. Ja początkujący raczkujący.


Wiec y=x[0]*1000+x[1] x100+ ...itd. jest OK Smile

Robię komunikacje ESP8266 - ESP32 gdzie ESP8266 obsługuje dwa wyświetlacze a ESP32 czujniki i dane z czujników przesyłam przez UDP , UDP rozdzielam przechwytuje które dane są dla danego wyświetlacza.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#9
(06-03-2019, 00:17)Jarewa0606 napisał(a): Dzięki chłopaki za pomoc działa pierwszy sposób znalazłem u siebie błąd


Wiec y=x[0]*1000+x[1] x100+ ...itd. jest OK Smile

Robię komunikacje ESP8266 - ESP32 gdzie ESP8266 obsługuje dwa wyświetlacze  a ESP32 czujniki i dane z czujników przesyłam przez UDP , UDP rozdzielam przechwytuje które dane są dla danego wyświetlacza.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#10
Jednak powrócę do tematu. 

Zrobiłem to na stringach i uklepałem takie coś:

Kod:
if (startMarker_AC == rc_){      // sprawdzanie czy pierwszy bajt to 0x41 dla AC
             rc_ = udp.read();
             if (udp.available() >= 6){
               data_AC_uBuffer[0] = rc_;
               for (i_ = 1; i_ < 7; i_ ++){   // rozbijanie ciagu znaków na bufory
                  data_AC_uBuffer[i_] = udp.read();
               }
               if (endMarker_AC == data_AC_uBuffer[6]){
                  data_AC_Buffer[0]= data_AC_uBuffer[2];
                  data_AC_Buffer[1]= data_AC_uBuffer[3];
                  data_AC_Buffer[2]= data_AC_uBuffer[4];
                  data_AC_Buffer[3]= data_AC_uBuffer[5];
                  String dane_UDP_data_AC = String (data_AC_Buffer);
                  strona_AC = dane_UDP_data_AC.toInt();
                  AC_data_send = true;
                 
               }else{
                 data_AC_uBuffer[i_] = 0x00;
               }
             
             }
         }
 I ESP32 wywala mi błędem jak to zrobić??
W pakiecie jest "AC1234\n wiec tablicą wyciągałem samą liczbę bo jednak dobra funkcja jak liczba jest ujemna... Działa to ale niestety po kilkunastu sekundach wywala błedem i resetem ESP32


Załączone pliki Miniatury
   
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości