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 - #5 - PWM, serwomechanizmy, biblioteki

Autor Wiadomość
Lukaszm 



Posty: 451
Pomógł: 17 razy
Otrzymał 20 piw(a)
Skąd: Warszawa
Programuję w:
C, C++, MATLAB
Wysłany: 13-01-2018, 12:58   

Kod programu: Zaznacz cały
wypelnienie < 255;

Co robi ta linijka?

Postaw piwo autorowi tego posta
 
 
mistus 



Posty: 12
Otrzymał 1 piw(a)
Skąd: OPOLE
Wysłany: 13-01-2018, 20:01   

zezwala dodawać tylko do 255

[ Dodano: 13-01-2018, 20:06 ]
zadanie 5.2 Miałem mały problem z while nie sądziłem ze arduino tak szybko zlicza i ciągle świeciła mi dioda ;d ale Serial.begin pomógł ;)
Kod programu: Zaznacz cały

#define czerwona 3
int wypelnienie = 0;
int czas = 200;
int zmiana = 5;

void setup() {
  pinMode(czerwona, OUTPUT);
  Serial.begin(9600);// sprawdzam czy wszystko dzala
 }

void loop() {
 while (wypelnienie < 255){
  Serial.println(wypelnienie);
  analogWrite(czerwona, wypelnienie);
  wypelnienie = wypelnienie + zmiana;// rozswietlamy diode
  delay(czas);
 }
 while(wypelnienie > 0){
  Serial.println(wypelnienie);
  analogWrite(czerwona, wypelnienie);
  wypelnienie = wypelnienie - zmiana;// gasimy diode
  delay(czas);
 }
}

Postaw piwo autorowi tego posta
 
 
Treker 




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

Wysłany: 13-01-2018, 20:49   

mistus napisał/a:
zezwala dodawać tylko do 255

Oj to chyba coś Ci ucięło przy wklejaniu programu. Czy nie powinno tam być żadnego warunku ;) ?


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
 
 
mistus 



Posty: 12
Otrzymał 1 piw(a)
Skąd: OPOLE
Wysłany: 13-01-2018, 21:25   

no właśnie działało bez warunku co mnie zaskoczyło skoro źle to jeszcze pomyśle a tu rozwiązanie na zadanie 5.3
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
int zmiana = 6;
int czas = 200;//ustawiamy wstępny czas
int minuty = 10;//wydłużamy czas
void setup() {
  serwomechanizm.attach(9);// włączamy jako wyjście 9 serwomechanizmowi
}

void loop() {
  if (pozycja < 180){// zlicza od 0 do 180 stopni
    serwomechanizm.write(pozycja);// o ile ma wykonać ruch
  }
  else {
    pozycja = 0;// ustawia pozycje znów na początek
  }
  pozycja = pozycja + zmiana;//przesuwa serwomechanizm
  delay(czas);// wstępny czas
  czas = czas + minuty;// wydłużamy czas reakcji serwomechanizmu
}


[ Dodano: 13-01-2018, 22:10 ]
odpowiedz na zadanie 5.4
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
String dane = "";// wpisanie z komputera dane pozycji

void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(9);// włączamy jako wyjście 9 serwomechanizmowi
}

void loop() {
  Serial.flush();// wykasowanie danych z bufora
  if(Serial.available() > 0){// sprawdzenie czy są jakieś dane w buforze
    dane = Serial.readStringUntil('\n');// odczytanie danych i wpisanie w nową linie
    pozycja = dane.toInt();// zmiana danych na pozycje i danie zmiennej int
    if (pozycja < 181){
      serwomechanizm.write(pozycja);// przesuniecie serwa o pozycje nadana przez nas
    }
    else {
       Serial.println(" zły zakres");
    }
  }
 

}


[ Dodano: 14-01-2018, 10:36 ]
Nie wiedziałem o co do końca chodzi w zadaniu 5.5 wiec zrobiłem na 3 sposoby
1.
Kod programu: Zaznacz cały

#include <Servo.h>//ustawiamy bibliotekę
#define machina 9 //nadaje pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int pozycja = 0;
int dane = 0;
float napiecie = 0;
int zmiana = 6;
float dzielnik = 3.0;// nasz dzielnik napięcia
void setup() {
  serwomechanizm.attach(machina);// ustawienie machiny jako output
 }

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  napiecie = dane *(5.0/1023.0);// zamieniamy na napięcie
  if (napiecie > dzielnik){
    serwomechanizm.write(pozycja);//ustawiamy wstępnie serwomechanizm
    pozycja = pozycja + zmiana;// przesuwamy w lewo
    delay(200);
  }
  else if (napiecie < dzielnik){
    serwomechanizm.write(pozycja);//ustawienie wstępne serwomechanizmu
    pozycja = pozycja - zmiana;// przesuwamy w prawo
   delay(200);
  }
}

2.
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
#define machina 9// nadajemy pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int dane = 0;
float napiecie = 0;
float pozycja = 0;
void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(machina);
}

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  napiecie = dane * (5.0/1023.0);// zamieniamy na napięcie
  pozycja = napiecie;
  pozycja = map(pozycja ,0,5,1,180);// dziele napięcie na odcinki
    Serial.println(pozycja);// sprawdzam czy wszystko hula
    serwomechanizm.write(pozycja);//przesuwanie skokowo (na odcinki)
    delay(100);
}

3. ta opcja najbardziej mi się podobała :)
Kod programu: Zaznacz cały

#include <Servo.h>// ustawiamy bibliotekę
#define machina 9// nadaje pinowi 9 nazwę
Servo serwomechanizm;// tworzymy obiekt do odwołania się dla serwa
int dane = 0;
float pozycja = 0;
void setup() {
  Serial.begin(9600);// połączenie z komputerem
  serwomechanizm.attach(machina);
}

void loop() {
  dane = analogRead(A5);// odczytanie danych z potencjometru
  pozycja = dane;
  pozycja = map(pozycja ,0,1023,1,180);// dziele pozycje by mieściły się od 0 - 180 stopni
    Serial.println(pozycja);// sprawdzam czy wszystko hula
    serwomechanizm.write(pozycja);//przesuwam w lewo lub prawo
    delay(100);
}

Ostatnio zmieniony przez mistus 14-01-2018, 19:07, w całości zmieniany 2 razy  
Postaw piwo autorowi tego posta
 
 
PawełD 



Posty: 3
Wysłany: 18-01-2018, 18:18   

Zadanie 5.4



wiem ze to było ponad 2 lata temu na topie, ale jako że to moje pierwsze w 100% samodzielnie zrobione zadanie domowe ;) to muszę je tutaj wrzucić. :mrgreen:

__________
Komentarz dodany przez: Treker
Kod programu, dla lepszej czytelności, należy umieszczać w tagach [code]. Proszę to poprawić.
Kod programu: Zaznacz cały
#include <Servo.h> // dodanie biblioteki odpowiedzialnej za serwa

Servo serwomechanizm; // obiekt serwomechanizmu aby moc sie do niego
//odwoływać

String pozycja = "";
int pozycjaint = 0;



void setup() {

Serial.begin(9600);
serwomechanizm.attach(9); // deklaracja podlaczenia serwa

}

void loop() {

if(Serial.available()>0) {
pozycja = Serial.readStringUntil('n');
Serial.println(pozycja);
pozycjaint = pozycja.toInt();
if(pozycjaint>=0 && pozycjaint<=180){
serwomechanizm.write(pozycjaint); // komenda do wykonania ruchu serwa
}else{
Serial.println("zla wartosc, podaj wartosc w zakresie 0-180");
}
}}

Ostatnio zmieniony przez PawełD 18-01-2018, 19:15, w całości zmieniany 3 razy  
Postaw piwo autorowi tego posta
 
 
Treker 




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

Wysłany: 18-01-2018, 18:55   

PawełD, witam na forum :) Kurs jest cały czas aktualny, więc śmiało można się chwalić swoimi programami! Pamiętaj tylko, aby kody wklejać wewnątrz tagów [code]. Dzięki temu inni będą mogli łatwiej analizować Twoje programy - popraw to proszę ;)


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
 
 
PawełD 



Posty: 3
Wysłany: Wczoraj 11:32   

zadanie 5.5

widzę, że if-a mogłem opuścić, ale jak już dałem to niech zostanie
Kod programu: Zaznacz cały
#include <Servo.h> // biblioteka serwa
Servo serwo; // obiekt serwa
int potencjometr = 0;

void setup() {

serwo.attach(9); //deklaracja podlaczenia serwa do pinu 9

}

void loop() {

  potencjometr = analogRead(A5);//odczytanie wartosci potencjometru
  potencjometr = map(potencjometr, 0, 1015, 0, 180);
  //przeskalowanie zmiennej potencjometr z zakresu 0-1015 na 0-180
  if(potencjometr>=0 && potencjometr <=180){
     serwo.write(potencjometr); //komenda do wykonania ruchu
  }
  delay(100);
}

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 - #4 - St... Kurs STM32 - #2 - Po... Kurs STM32 - #1 - Za...
lub przeszukaj forum po wybranych tagach: artykulow, do, komentarze


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