• 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
Zliczanie z portu szeregowego
#1
Big Grin 
Witam, chciałbym się przywitać jako Świeżak Wink

Mam arduino uno, do którego za pomocą portu szeregowego przesyłam dane do arduino.
Przykład:
(000000000000000000000000111111111111111111111110000000000000000000011111111111111111100000000000000)


zera świadczą o spoczynku, ale gdy dostaję jedynki chcę aby servo zrobiło ruch ale tylko raz gdy jest zestaw jedynek.
to co udało mi się zrobić to, ile jedynek dostanie tyle razy się porusza, a przy zestawie jedynek ma zrobić to tylko raz, poźniej po np. 10 zerach gdy znów dostanie np.10 jedynek pod rząd ma znów zrobić raz ruch.
Cyfry są wysyłane od nowej lini
Potrzebuję kodu np:

Gdy jest 10 jedynek jedna z drugą, serwo.write(20),  delay(500) serwo.write(100), i czekaj, gdy znów będzie 10 jedynek pod rząd znów wykonaj raz ruch.

Kod:
#include <Servo.h>
Servo myservo;
String odebraneDane = ""; //Pusty ciąg odebranych danych

void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  myservo.attach(3);
}

void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    odebraneDane = Serial.readStringUntil('\n'); //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane
    Serial.println(odebraneDane); //Wyświetl komunikat

    if(odebraneDane == "1") {
    delay(1000);
    myservo.write(20);
    delay(500);
    myservo.write(120);
    }
  }
}


Przepraszam za niezrozumienie, ale troszkę ciężko mi to wytłumaczyć.


Dzięki i pozdrawiam Wink
 
Odpowiedź
#2
Pokaż kod jaki napisałeś, będzie się można do czegoś odnieść, coś podpowiedzieć.
 
Odpowiedź
#3
Okey, posiedziałem, coś zrobiłem, ale nie działa za dobrze, ale działa jako tako  Shy

macie pomysł jak go zmodyfikować żeby lepiej to działało ?

Kod:
#include <Servo.h>
Servo myservo;
String odebraneDane = ""; //Pusty ciąg odebranych danych
String l1 = "";
String l2 = "";
String l3 = "";
String l4 = "";
String l5 = "";
String l6 = "";
String l7 = "";
void setup() {
  Serial.begin(9600); //Uruchomienie komunikacji
  myservo.attach(3);
}

void loop() {
  if(Serial.available() > 0) { //Czy Arduino odebrało dane
    odebraneDane = Serial.readStringUntil('\n'); //Jeśli tak, to odczytaj je do znaku końca linii i zapisz w zmiennej odebraneDane
  //  Serial.println("dane" + odebraneDane); //Wyświetl komunikat
  }
   
    if(odebraneDane == "1" && Serial.available() > 0) {
    l1 = Serial.readStringUntil('\n');
//   Serial.println("l1 " + l1);
   
    }
    if(odebraneDane == "1" && l1 == "1" && Serial.available() > 0) {
    l2 = Serial.readStringUntil('\n');
   // Serial.println("l2 " + l2);
   
    }
    if(odebraneDane == "1" && l1 == "1" && l2 == "1" && Serial.available() > 0) {
    l3 = Serial.readStringUntil('\n');
  //  Serial.println("l3 " + l3);
   
    }
    if(odebraneDane == "1" && l1 == "1" && l2 == "1" && l3 == "1" && Serial.available() > 0) {
    l4 = Serial.readStringUntil('\n');
   // Serial.println("l4 " + l4);
   
    }
    if(odebraneDane == "1" && l1 == "1" && l2 == "1" && l3 == "1" && l4 == "1" && Serial.available() > 0) {
    l5 = Serial.readStringUntil('\n');
   // Serial.println("l5 " + l5);
   
    }
 
      if(l1 == "1" && l2 == "1" && l3 == "1" && l4 == "1" && l5 == "1" && odebraneDane == "1") {
      delay(1000);
      myservo.write(120);
      delay(500);
      myservo.write(20);
      odebraneDane = "0";
      l1 = "0";
      l2 = "0";
      l3 = "0";
      l4 = "0";
      l5 = "0";
     
     
     }
}
 
Odpowiedź
#4
if(aktualne !=poprzednie)
{
poprzednie =aktualne;
if(aktualne ==1) ruchserwa();
}
I naucz się żyć bez delay().
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości