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ć.
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.
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:
06-03-2019, 00:17 (Ten post był ostatnio modyfikowany: 06-03-2019, 00:30 przez Jarewa0606.)
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
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ą.
(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
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ą.
08-03-2019, 23:35 (Ten post był ostatnio modyfikowany: 08-03-2019, 23:38 przez Jarewa0606.)
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
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.