Arduino Polska Forum

Pełna wersja: Jak zmienić tablicę na liczbę całkowita??
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Stron: 1 2 3
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
y=x[0]*1000+x[1] x100+ ...itd.
Zapomniałem napisać ale chyba to ważne że tablice mam w char. Jaka tablice dać? Bo w char krzaki wychodza?
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ą.
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
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()
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:

}
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.
(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.
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
Stron: 1 2 3