Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

arduino - nie mam pojęcia jak wyjść z pętli

maetqsz1990 11 Lip 2016 13:18 1284 9
  • #1 11 Lip 2016 13:18
    maetqsz1990
    Poziom 3  

    Cześć, mam problem z wyjściem z pętli while:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    przy zmianie while na if w ogóle nie działa pętla, też nie działa ten sposób:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    ma ktoś jakiś pomysł jak wyjść z pętli?

    0 9
  • #3 11 Lip 2016 13:35
    maetqsz1990
    Poziom 3  

    char bt = Serial.read();
    a wyjść kiedy ja nacisnę przycisk stop
    dzięki za szybką odpowiedź

    0
  • #4 11 Lip 2016 13:38
    excray
    Poziom 39  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 11 Lip 2016 13:49
    maetqsz1990
    Poziom 3  

    program jest tworzony w app inventor, na ekranie mam 2 przyciski 1 do wysłania z i 2 do wysłania s

    else{
    moveForward();
    }
    else{
    bt = 's';
    }
    coś takiego?

    Dodano po 6 [minuty]:

    #include <NewPing.h>

    #define TRIGGER_PIN 2
    #define ECHO_PIN 3
    #define MAX_DISTANCE 100

    const int outPin = 5;
    const int outPin2 = 6;
    const int outPin3 = 11;
    const int outPin4 = 10;

    NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

    unsigned int time;
    int distance;
    int triggerDistance = 30;
    int fDistance;
    int lDistance;
    int rDistance;

    void setup()
    {
    Serial.begin(9600);
    pinMode(outPin, OUTPUT);
    pinMode(outPin2, OUTPUT);
    pinMode(outPin3, OUTPUT);
    pinMode(outPin4, OUTPUT);
    }

    void scan(){
    time = sonar.ping();
    distance = time / US_ROUNDTRIP_CM;
    if(distance == 0){
    distance = 100;
    }
    delay(5);
    }

    void moveBackward(){
    digitalWrite(outPin, LOW);
    digitalWrite(outPin2, HIGH);
    digitalWrite(outPin3, HIGH);
    digitalWrite(outPin4, LOW);
    }

    void moveForward(){
    digitalWrite(outPin, HIGH);
    digitalWrite(outPin2, LOW);
    digitalWrite(outPin3, LOW);
    digitalWrite(outPin4, HIGH);
    }

    void moveRight(){
    digitalWrite(outPin, LOW);
    digitalWrite(outPin2, LOW);
    digitalWrite(outPin3, LOW);
    digitalWrite(outPin4, HIGH);
    }

    void moveLeft(){
    digitalWrite(outPin, HIGH);
    digitalWrite(outPin2, LOW);
    digitalWrite(outPin3, LOW);
    digitalWrite(outPin4, LOW);
    }

    void moveStop(){
    digitalWrite(outPin, LOW);
    digitalWrite(outPin2, LOW);
    digitalWrite(outPin3, LOW);
    digitalWrite(outPin4, LOW);
    }


    void loop()
    {
    if (Serial.available()){
    char bt = Serial.read();

    if(bt == 'u'){ //do przodu
    digitalWrite(outPin,HIGH);
    digitalWrite(outPin2,LOW);
    digitalWrite(outPin3,HIGH);
    digitalWrite(outPin4,LOW);
    }
    else if (bt == 'd'){ //do tyłu
    digitalWrite(outPin,LOW);
    digitalWrite(outPin2,HIGH);
    digitalWrite(outPin3,LOW);
    digitalWrite(outPin4,HIGH);
    }
    else if (bt == 's'){ //stop
    digitalWrite(outPin,LOW);
    digitalWrite(outPin2,LOW);
    digitalWrite(outPin3,LOW);
    digitalWrite(outPin4,LOW);
    }
    else if (bt == 'r'){ //prawo
    digitalWrite(outPin,HIGH);
    digitalWrite(outPin2,LOW);
    digitalWrite(outPin3,LOW);
    digitalWrite(outPin4,LOW);
    }

    else if (bt == 'l'){ //lewo
    digitalWrite(outPin,LOW);
    digitalWrite(outPin2,LOW);
    digitalWrite(outPin3,HIGH);
    digitalWrite(outPin4,LOW);
    }
    else if (bt == 'e'){ //lewo w tym samym miejscu
    digitalWrite(outPin,LOW);
    digitalWrite(outPin2,HIGH);
    digitalWrite(outPin3,HIGH);
    digitalWrite(outPin4,LOW);
    }

    else if (bt == 'i'){ //prawo w tym samym miejscu
    digitalWrite(outPin,HIGH);
    digitalWrite(outPin2,LOW);
    digitalWrite(outPin3,LOW);
    digitalWrite(outPin4,HIGH);
    }

    while (bt == 'z') /// automatyczny
    {
    scan();
    fDistance = distance;
    if(fDistance < triggerDistance){
    moveBackward();
    delay(1000);
    moveRight();
    delay(500);
    moveStop();
    scan();
    rDistance = distance;
    moveLeft();
    delay(1000);
    moveStop();
    scan();
    lDistance = distance;
    if(lDistance < rDistance){
    moveRight();
    delay(200);
    moveForward();
    }
    else{
    moveForward();
    }
    }
    else{
    moveForward();
    }
    }
    }
    }
    tak wiem mam nieporządek w kodzie ale działa i to jest najważniejsze

    0
  • #8 11 Lip 2016 13:53
    maetqsz1990
    Poziom 3  

    mniej więcej rozumiem

    0
  • #10 02 Sie 2016 16:23
    andrew102
    Poziom 9  

    Wewnątrz pętli while (bt == 'z') sprawdź wartość bt

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Albo wymusić przerwanie pętli break-iem.
    Ewentualnie przypisz do bt inną wartość.
    Kod: c
    Zaloguj się, aby zobaczyć kod

    0