SOYER Listopad 13, 2017 Udostępnij Listopad 13, 2017 Dzięki Treker za podpowiedź. Poradzi ktoś jak poprawnie zapisać takie coś, tutaj akurat ze zmienną float... jak to jest przy innych zmiennych? Serial.println("wlaczono diode przy napieciu" + napiecie + "V");
Treker (Damian Szymański) Listopad 13, 2017 Udostępnij Listopad 13, 2017 SOYER, więcej informacji o łączeniu ciągów wraz z przykładami programów znajdziesz na stronie Arduino: https://www.arduino.cc/en/Tutorial/StringAdditionOperator Jest tam dokładnie taki przykład jakiego szukasz
SOYER Listopad 13, 2017 Udostępnij Listopad 13, 2017 Dzięki, mój angielski jest mniej niż średni, ale z tego co zrozumiałem z kodu to powinienem utworzyć zmienną którą zdefiniuję w programie, a następnie wykorzystam w String.println(zmienna). Tak się to robi?
Treker (Damian Szymański) Listopad 13, 2017 Udostępnij Listopad 13, 2017 SOYER, tak, to jedna z możliwości
zioloiso Listopad 14, 2017 Udostępnij Listopad 14, 2017 O gdzie moje maniery, zapomniałem się przywitać. Witam i dzięki za powitanie. W sumie masz racje bo nie mam w ogóle nawyku komentarzy, a potem sam się będę zastanawiał o co chodzi.
Treker (Damian Szymański) Listopad 15, 2017 Udostępnij Listopad 15, 2017 zioloiso, super, to pamiętaj o nich przy następnych programach i na pewno będzie wtedy czytelniej
SOYER Listopad 16, 2017 Udostępnij Listopad 16, 2017 #include <Servo.h> //Biblioteka odpowiedzialna za serwa Servo serwomechanizm; //Tworzymy obiekt, dzięki któremu możemy odwołać się do serwa int pozycja = 0; //Aktualna pozycja serwa 0-180 String wpis =""; boolean wstep = false; #define led1 10 #define led2 12 #define led3 9 #define led4 11 #define led5 8 void setup() { serwomechanizm.attach(6); Serial.begin(9600);//Serwomechanizm podłączony do pinu 9 pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } void loop() { if(wstep == false){ Serial.println("Wpisz pozycje serwa w stopniach (1-180)"); wstep = true; } if (Serial.available()>0) { wpis = Serial.readStringUntil('\n'); pozycja = wpis.toInt(); serwomechanizm.write(pozycja); if(pozycja<=110 && pozycja>=70){ digitalWrite(led3, HIGH); } else{ digitalWrite(led3, LOW); } if(pozycja<70 && pozycja>35){ digitalWrite(led2, HIGH); } else{ digitalWrite(led2, LOW); } if(pozycja<=35 && pozycja>=1){ digitalWrite(led1, HIGH); } else{ digitalWrite(led1, LOW); } if(pozycja>110 && pozycja<155){ digitalWrite(led4, HIGH); } else{ digitalWrite(led4, LOW); } if(pozycja<=180 && pozycja>=155){ digitalWrite(led5, HIGH); } else{ digitalWrite(led5, LOW); } } else { pozycja = 0; } } dlaczego kiedy zamiast kolejnych if włączających diody próbuję wstawić else if to pyta mnie o nawias } przed else??? Np. if(pozycja<=110 && pozycja>=70){ digitalWrite(led3, HIGH); } else{ digitalWrite(led3, LOW); } else if(pozycja<70 && pozycja>35){ digitalWrite(led2, HIGH); } else{ digitalWrite(led2, LOW); } Expected } before 'else'.........?
marek1707 Listopad 17, 2017 Udostępnij Listopad 17, 2017 Bo te if-y już mają swoje else. Każdy if może mieć tylko dwie drogi: przez if albo przez else. Kompilator opisując napotkany błąd dodaje numer linii - korzystaj z tego, bo to precyzuje miejsce wystąpienia. Nie zawsze jednak komunikat wskazuje rzeczywiste miejsce błędu i nie zawsze opis jest zgodny z faktycznie popełnionym błędem. Jeśli błąd nie jest ewidentny (np. użycie niezadeklarowanej zmiennej lub swicz zamiast switch), kompilator próbuje sobie "radzić" i zajeżdża z kompilacją tak daleko jak to tylko możliwe. Dopiero tam gdzie już rozkłada ręce, wysyła komunikat. Jeśli np. zapomnisz o nawiasie zamykającym definicję funkcji, cała dalsza część programu będzie traktowana jak treść tej funkcji i dopiero 100 linijek dalej może się okazać, że pewna konstrukcja kodu jest w funkcji niedopuszczalna. Lawina absurdalnych komunikatów będzie wtedy zaskoczeniem, trzeba nabyć wprawy w rozumieniu ich prawdziwych znaczeń. Punkt widzenia kompilatora na kod jest troszkę inny niż nasz.
BrodatyElektryk Grudzień 6, 2017 Udostępnij Grudzień 6, 2017 Cześć wszystkim, napotkałem pierwszy problem z kursem a mianowicie zadanie 4.4. Posiłkując się podpowiedziami wyczarowałem coś takiego int wartosc5 = 0; // ADC 5 int prog = 0; //Próg włączenia światła - ustawiany potencjometrem ADC 4 float napiecie = 0; //Napiecie na dzielniku boolean stan = 0; // Stan diody pin 8 void setup() { Serial.begin(9600); pinMode(8, OUTPUT); // LED } void loop() { wartosc5 = analogRead(A5);//Odczytanie wartości z ADC prog = analogRead(A4);//Odczytanie wartości z ADC if( wartosc5<prog){ digitalWrite(8, HIGH); stan=1; napiecie=wartosc5*(5/1023.0); Serial.print(napiecie); } else{ digitalWrite(8,LOW); stan=0; } delay(50); } Program działa tylko wskazania w UART są w jednym wierszu a nie jak w innych zadaniach że wiadomość jest w kolumnie. Ktoś coś ?
marek1707 Grudzień 6, 2017 Udostępnij Grudzień 6, 2017 Przyjrzyj się więc dokładniej tej linii kodu która wypisuje wartość. Skoro w innych programach działa inaczej, musi być jakaś różnica. 1
BrodatyElektryk Grudzień 6, 2017 Udostępnij Grudzień 6, 2017 A no faktycznie . Stwierdziłem że jak program uznaje samo print to znaczy że jest ok. Najwyraźniej jest print i println. Dzięki !
Dawiddk1 Grudzień 15, 2017 Udostępnij Grudzień 15, 2017 Siema, dopiero zaczynam przygode z programowaniem mogłby ktoś mi powiedzieć gdzie mam błąd ? tj. zadanie 4.5 lekko przerobione bo sa 3 diody symbolizujące szanse "proby" za każdym razem gdy zle odpowiemy jedna z tych diód gaśnie. ogólnie program działa tak że jak trafimy to działa poprawnie jak odpowiemy zle to za piewszym razem działa poprawnie natomiast jak odpowiem zle drugi raz to na ekran wywala mi jakbym mail proby 2 i 1 i dodatkowo pisze pokrec potencjometrem :/ //przypisane pinów #define led_czerwona1 9 #define led_czerwona2 10 #define led_czerwona3 11 #define led_zielona 8 #define przycisk 7 #define pin_odczyt A5 int adc=0; // odczyt z potecjonometru String podana_liczba = ""; //liczba podana przez gracza int podana_liczba_int=0; // przskalowanie na int ? byte proby = 3; //ilosc prob boolean od_nowa = true; void setup() { pinMode(przycisk,INPUT_PULLUP); pinMode(led_zielona,OUTPUT); pinMode(led_czerwona1,OUTPUT); pinMode(led_czerwona2,OUTPUT); pinMode(led_czerwona3,OUTPUT); Serial.begin(9600); } void loop() { if(od_nowa=true) //jesli rozpoczynamy gre od nowa { proby=3; digitalWrite(led_zielona,LOW); //zgaszamy wszystkie diody digitalWrite(led_czerwona1,HIGH); digitalWrite(led_czerwona2,HIGH); digitalWrite(led_czerwona3,HIGH); while(!Serial)delay(10); //czekamy na otwarcie serial monitora Serial.println("pokreć potencjonometrem"); adc=analogRead(pin_odczyt); // szczytujemy wartosc z potecjonometru } while(Serial.available() ==0); //czekamy na podanie liczby podana_liczba=Serial.readStringUntil('\n'); podana_liczba_int=podana_liczba.toInt(); // zamieniamy ze String na int if(adc-podana_liczba_int<=50 && adc-podana_liczba_int >= -50) { Serial.println("trafiłeś! udało ci sie wygrać"); digitalWrite(led_zielona,HIGH); digitalWrite(led_czerwona1,LOW); digitalWrite(led_czerwona2,LOW); digitalWrite(led_czerwona3,LOW); od_nowa=true; Serial.println("jesli chcesz zagrać ponownie nacisnij przycisk"); while(digitalRead(przycisk)==HIGH); delay(20); } else { if (proby==3) { od_nowa=false; digitalWrite(led_czerwona1,LOW); proby --; Serial.println("nie udało ci się trafić ale masz jeszcze szanse"); Serial.println("ilosc szans: "); Serial.println(proby); Serial.println("podaj kolejna liczbe"); while(Serial.available()==0) delay(20); } if(proby==2) { od_nowa=false; digitalWrite(led_czerwona1,LOW); digitalWrite(led_czerwona2,LOW); proby--; Serial.println("nie udało ci się trafić ale masz jeszcze szanse"); Serial.println("ilosc szans: "); Serial.println(proby); Serial.println("podaj kolejna liczbe"); while(Serial.available()==0) delay(20); } if(proby==1) { digitalWrite(led_czerwona1,LOW); digitalWrite(led_czerwona2,LOW); digitalWrite(led_czerwona3,LOW); proby --; od_nowa=true; Serial.println("nie udało ci się trafić"); Serial.println("wykorzystales wszystkie swoje szanse"); Serial.println("jesli chcesz zagrać ponownie nacisnij przycisk"); while(digitalRead(przycisk)==HIGH); delay(20); } } delay(5); }
Treker (Damian Szymański) Grudzień 15, 2017 Udostępnij Grudzień 15, 2017 Dawiddk1, witam na forum Nie sprawdziłem całości, bo od razu zatrzymałem się na jednej linii. Pomysł nad tym zapisem: if(od_nowa=true) //jesli rozpoczynamy gre od nowa
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »