Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

Kurs Arduino - #4 - Przetwornik ADC

Autor Wiadomość
zioloiso 



Posty: 3
Skąd: Nowosielce
Wysłany: 11-11-2017, 19:48   

Moja prostacka gra, ale działa :D
4.5
Kod programu: Zaznacz cały

#define green 5
#define yellow 6
#define red 7
#define button 2

int pote = 0;
String liczba="";
int liczba2 = 0;


void setup() {
  pinMode(green,OUTPUT);
  pinMode(yellow,OUTPUT);
  pinMode(red,OUTPUT);
  pinMode(button,INPUT_PULLUP);
  Serial.begin(9600);
}

void loop() {
    digitalWrite(yellow,LOW);
    digitalWrite(red,LOW);
    digitalWrite(green,LOW);

    Serial.println("Witaj w mojej grze, ustaw pote i wciśnij przycisk");
    pote = analogRead(A4);
    while(digitalRead(button) == HIGH){}
    delay(1000);
    Serial.println("Podaj Liczbę od 0 do 1023");
    Serial.println("Masz trzy próby");
    while(Serial.available() == 0){}
    liczba = Serial.readStringUntil('\n');
    liczba2 = liczba.toInt();
      if(liczba2-50 <=pote && liczba2+50 >=pote){
      Serial.println("Wygrałeś!!!");
      digitalWrite(green,HIGH);
      Serial.println(pote);
     
           
      }else{
        digitalWrite(yellow,HIGH);
        Serial.println("Zła liczba, masz jeszcze dwie próby");
        while(Serial.available() == 0){}
        liczba = Serial.readStringUntil('\n');
        liczba2 = liczba.toInt();
        if(liczba2-50 <=pote && liczba2+50 >=pote){
        digitalWrite(yellow,LOW);
        delay(3000);
        Serial.println("Wygrałeś!!!");
        digitalWrite(green,HIGH);
        Serial.println(pote);
       
           
        }else{
          digitalWrite(yellow,LOW);
          delay(3000);           
          Serial.println("Zła liczba, masz jeszcze jedną próbę");
          digitalWrite(yellow,HIGH);
          while(Serial.available() == 0){}
          liczba = Serial.readStringUntil('\n');
          liczba2 = liczba.toInt();
          if(liczba2-50 <=pote && liczba2+50 >=pote){
            digitalWrite(yellow,LOW);
            delay(3000);           
            Serial.println("Wygrałeś!!!");
            digitalWrite(green,HIGH);
            Serial.println(pote);
           
           
          }else{
            digitalWrite(yellow,LOW);
            delay(3000);
            digitalWrite(red,HIGH);
            Serial.println("Koniec Gry, Przegrałeś");
           
           

           
          }
       
        }
       
        }
           Serial.println("Wciśnij Przycisk aby zagrać ponownie");
         while(digitalRead(button) == HIGH){}
         delay(1000);
    }
     



Jutro pobije się może z dwoma fotorezystorami.

@Edit

Udało się, jupi. Prostym językiem, ale działa:D

Kod programu: Zaznacz cały
#define red1 12
#define red2 10
#define yellow 8
#define green1 6
#define green2 4

int foto1 = 0;
int foto2 = 0;


void setup() {
  Serial.begin(9600);
  pinMode(red1,OUTPUT);
  pinMode(red2,OUTPUT);
  pinMode(yellow,OUTPUT);
  pinMode(green1,OUTPUT);
  pinMode(green2,OUTPUT);
  digitalWrite(red1,LOW);
  digitalWrite(red2,LOW);
  digitalWrite(yellow,LOW);
  digitalWrite(green1,LOW);
  digitalWrite(green2,LOW);

}

void loop() {
  foto1 = analogRead(A4);
  foto2 = analogRead(A5);

  delay(25);
  Serial.println("Lewa Strona:");
  Serial.println(foto1);
  delay(25);
  Serial.println("Prawa Strona:");
  Serial.println(foto2);
  delay(25);
  if(foto1-150<=foto2 && foto1+150>=foto2){
    digitalWrite(yellow,HIGH);
  }else{
    digitalWrite(yellow,LOW);
  }
  if(foto1>=foto2+150){
    digitalWrite(red2,HIGH);
    if(foto1>=foto2+300){
      digitalWrite(red1,HIGH);
    }else{
      digitalWrite(red1,LOW);
    }
  }else{
    digitalWrite(red2,LOW);
    digitalWrite(red1,LOW);
  }
  if(foto2>=foto1+150){
    digitalWrite(green1,HIGH);
    if(foto2>=foto1+300){
      digitalWrite(green2,HIGH);
      }else{
        digitalWrite(green2,LOW);
      }
  }else{
    digitalWrite(green1,LOW);
    digitalWrite(green2,LOW);
  }
}

Ostatnio zmieniony przez zioloiso 12-11-2017, 09:40, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7897
Pomógł: 117 razy
Otrzymał 506 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 12-11-2017, 14:14   

SOYER, wystarczy wkleić program do wiadomości i objąć go tagami [code].

zioloiso, witam na forum :) Super, że programy działają - pamiętaj o komentarzach. Warto opisywać nimi kod, aby był czytelniejszy dla innych i dla Ciebie (gdy wrócisz do niego w przyszłości).


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
SOYER 



Posty: 93
Otrzymał 3 piw(a)
Skąd: Kryry
Wysłany: 13-11-2017, 19:21   

Dzięki Treker za podpowiedź.

Poradzi ktoś jak poprawnie zapisać takie coś, tutaj akurat ze zmienną float... jak to jest przy innych zmiennych?
Kod programu: Zaznacz cały

Serial.println("wlaczono diode przy napieciu" + napiecie + "V");

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7897
Pomógł: 117 razy
Otrzymał 506 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 13-11-2017, 20:32   

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


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
SOYER 



Posty: 93
Otrzymał 3 piw(a)
Skąd: Kryry
Wysłany: 13-11-2017, 21:20   

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?

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7897
Pomógł: 117 razy
Otrzymał 506 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 13-11-2017, 22:23   

SOYER, tak, to jedna z możliwości ;)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
zioloiso 



Posty: 3
Skąd: Nowosielce
Wysłany: 14-11-2017, 22:06   

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.

Postaw piwo autorowi tego posta
 
 
Treker 




Posty: 7897
Pomógł: 117 razy
Otrzymał 506 piw(a)
Skąd: Gdynia
Programuję w:
C, Arduino
Moje roboty:
Spectrum, Fuzzy

Wysłany: 15-11-2017, 13:00   

zioloiso, super, to pamiętaj o nich przy następnych programach i na pewno będzie wtedy czytelniej :)


Zachęcam do korzystania z forum - nie pomagam indywidualnie przez PW/maila.
Sprawdź » Kurs ARDUINOKurs podstaw elektronikiZbuduj swojego robota - kurs!
Postaw piwo autorowi tego posta
 
 
SOYER 



Posty: 93
Otrzymał 3 piw(a)
Skąd: Kryry
Wysłany: 16-11-2017, 18:42   

Kod programu: Zaznacz cały

#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.
Kod programu: Zaznacz cały
 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'.........?

Postaw piwo autorowi tego posta
 
 
marek1707 



Posty: 4306
Pomógł: 464 razy
Otrzymał 606 piw(a)
Skąd: WAW
Programuję w:
C, asm
Wysłany: 17-11-2017, 09:30   

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.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Kurs Arduino - #9 - ... Kurs STM32 - #5 - Ko... Kurs STM32 - #4 - St... Kurs STM32 - #2 - Po...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki