• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak zapisać kod, który ma sprawdzić, czy zawiera liczbę?

+1 głos
754 wizyt
pytanie zadane 15 listopada 2015 w Mikrokontrolery przez francus11 Gaduła (3,250 p.)

Witam. Po tytule pytania pewnie nikt nie wie o co chodzi. Już tłumaczę. Ostatnio bawię się silniczkiem DC za pomocą Arduino. Na razie zrobilem kod, który sprawia, że silnik kręci się w lewo, prawo lub zatrzymuje się. Całość wygląda tak:

String dane;
void setup() {
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
  pinMode(7, OUTPUT);
  digitalWrite(8, LOW);
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);
  Serial.begin(9600);
}

void loop() {
  if(Serial.available() > 0){
  dane = Serial.readStringUntil('\n');
  }
  if (dane == "stop"){
    digitalWrite(8, LOW);
    digitalWrite(7, LOW);
    digitalWrite(6, LOW);}
  if (dane == "prawo"){
    digitalWrite(8, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(6, HIGH);
  }
  if (dane == "lewo"){
    digitalWrite(8, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(6, HIGH);
  }
  

}

Jak widać dane z monitora szeregowego zapisują się w formie zmiennej String. Chciałbym dodać kod, który dodatkowo kontrolowałby obroty. I tu rodzi się problem. Chcę, żeby po wpisaniu liczby od 0 do 255 obroty ustawiały sięna wpisaną liczbę. A ponieważ to jest zmienna string nie mogę tego zapisać w formie

if (0 <= dane && dane <= 255) // dane to tutaj zmienna int
{
   analogWrite(6, dane)}

Czy dałoby się zrobić, żeby liczby zapisywały się w zmiennej int, a wyrazy w String?

4 odpowiedzi

0 głosów
odpowiedź 15 listopada 2015 przez jeremus Maniak (59,720 p.)

pewnie potrzenujesz konwersji string to int

https://www.arduino.cc/en/Tutorial/StringToIntExample

0 głosów
odpowiedź 31 stycznia 2016 przez wrzaskun Początkujący (280 p.)
0 głosów
odpowiedź 26 listopada 2016 przez Patrix354 Bywalec (2,030 p.)

Według mnie najlepiej by było zrobić tak żeby wysłać jedną literę S, P lub L, następnie spacja i stan PWM, np. "S -1", czyli stop, "P 255", czyli jedź w prawo z pełną mocą (255) itd. Na dane stworzyłbym 2 zmienne. Pierwsza na kierunek ( tak się wpisuje zerowy znak do zmiennej kierunek, zerowy bo liczby w ciągu znaków numeruje się od zera)

kierunek = dane[0];

Oczywiście zmienna kierunek musi być zadeklarowana (jak i wszystkie inne co użyje). Czyli w zmiennej kierunek(typ char) jest S, P lub L. Druga na PWM, w tym celu trzeba stworzyć stringa przechowującego liczbę do konwersji.

liczba_str = dane.substring(2);

Za pomocą funkcji substring tworzę mniejszy napis, tym razem od znaku nr 2 (przypominam o numeracji od zera). Więc w zmiennej liczba_str jest liczba, tylko w postaci napisu. Następnie trzeba przekonwetować zmienną z napisu na liczbę. 

liczba_PWM = liczba_str.toInt();

Teraz można użyć zmiennej liczba_PWM do zmany prędkości obrotów silnika (w tym wypadku).

–1 głos
odpowiedź 15 listopada 2015 przez francus11 Gaduła (3,250 p.)

A wiesz do czego służy funkcja isDigit?

Podobne pytania

0 głosów
2 odpowiedzi 4,366 wizyt
0 głosów
1 odpowiedź 1,252 wizyt
0 głosów
3 odpowiedzi 952 wizyt

93,425 zapytań

142,421 odpowiedzi

322,647 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...