Skocz do zawartości

Kurs Arduino - #4 - Przetwornik ADC


Pomocna odpowiedź

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");
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

#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'.........?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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ś ? 🙂

Link do komentarza
Share on other sites

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);





}
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.