#126 Re: Програмування Arduino » 1,2,3,4,5 : Начинаем асинхронно светодиодами на Ардуине мигать! » 2016-07-26 21:37:04

Вот еще подобная программа. Только без светодиодов.

// ---класс вспышка---
class qw_blink {
  public:
    qw_blink(int pin,unsigned long span);
    void go();// драйвер blink
  private:
    unsigned long span;// интервал гашения или включения
    unsigned long future;// время сменить состояние гашения или включения   
    int            pin;// номер вывода
    boolean      state;// состояние светодиода
};
qw_blink::qw_blink(int pin,unsigned long span){
  this->pin  =  pin;
  pinMode(pin, OUTPUT);
  this->span = span/2;
  future       = span+millis();
  state      = 0;
  digitalWrite(pin, state);
}
void qw_blink::go(){
  if (millis() < future) return;
  future       = span+millis();
  state  = ! state ;
  digitalWrite(pin, state);
}
// ---- класс ослик -----
// отправляет сообщение в Serial через определеное время
class qw_neddy{
  public:
    qw_neddy(unsigned long span,char* message);
    void go();// драйвер neddy
    char* message;
  private:
    unsigned long span;// интервал сообщения
    unsigned long future;// время следующего сообщения 
};
qw_neddy::qw_neddy(unsigned long span,char* message){
  this->message = message;
  this->span = span;
  future       = span+millis();
}
void qw_neddy::go(){
  if (millis() < future) return;
  future       = span+millis();
   Serial.print(message); 
   Serial.println(millis()); 
}
// ---- класс корова -----
// построен на основе этого http://arduino.ua/ru/prog/Serial/Read
class qw_kine{
  public: 
    qw_kine(unsigned long span);// конструктор
    void go();// драйвер kine
  private:
    unsigned long span;// интервал сообщения
    unsigned long future;// время следующего сообщения
    int incomingByte;// входящий байт
};
qw_kine::qw_kine(unsigned long span){
  this->span = span;
  future     = span+millis(); 
}
void qw_kine::go(){
    if (millis() < future) return;
    future = span+millis();
    if (Serial.available() == 0) return;   //если есть доступные данные
    incomingByte = Serial.read();
    Serial.print("I received: ");
    Serial.println(incomingByte);
}

// ====== Программа ====== 
qw_blink VD1(13,1200); // светодиод нв 13 мигает 1.2 сек
qw_neddy  neddy0(1000,"neddy0  ");// отпавка в Serial каждые 1 сек
qw_neddy  neddy1(1300,"neddy1  ");// отпавка в Serial каждые 1,3 сек
qw_neddy  neddy2(900,"neddy2  ");// отпавка в Serial каждые 0,9 сек
qw_kine   kine(100);

void setup() {
  Serial.begin(9600); //устанавливаем последовательное соединение
}

void loop() {
// подключение драйверов
VD1.go(); 
neddy0.go();neddy1.go();neddy2.go();
kine.go();
}

#127 Re: Програмування Arduino » 1,2,3,4,5 : Начинаем асинхронно светодиодами на Ардуине мигать! » 2016-07-26 17:43:19

Похоже вы все таки не смогли прочитать программу.
1-черный, потому что я так и не смог поменять цвет в панеле кода.
2- объявление представителей классов все же до setup(), так как видимость нужна на всю программу.
3 - delay(xxx) там точно не надо. Мало что прерывание накроет, так и производительность съест.
4 - Это в некотором смысле ОС с независимыми потоками и необычной архитектурой, которую можно наращивать. Но модулями построеными по данной идеалогии. Вот только с привычными не работает.
И да в среде Ардуино прекрасно компилируется и работает. Сырую программу я предпочитаю не выкладывать.

ПС:
Вот вам пример из здешнего Тутора
#include <Morse.h>

Morse morse(13);

void setup()
{
}

void loop()
{
  morse.dot(); morse.dot(); morse.dot();
  morse.dash(); morse.dash(); morse.dash();
  morse.dot(); morse.dot(); morse.dot();
  delay(3000);
}
http://arduino.ua/ru/prog/LibraryTutorial

#128 Re: Програмування Arduino » 1,2,3,4,5 : Начинаем асинхронно светодиодами на Ардуине мигать! » 2016-07-25 22:27:49

А теперь на Бис. Все тоже самое , а еще в Serial отправлять сообщение каждые 2 сек.

// ---класс вспышка---
class qw_blink {
  public:
    qw_blink(int pin,unsigned long span);
    void go();// драйвер blink
  private:
    unsigned long span;// интервал гашения или включения
    unsigned long future;// время сменить состояние гашения или включения    
    int            pin;// номер вывода
    boolean      state;// состояние светодиода
};
qw_blink::qw_blink(int pin,unsigned long span){
  this->pin  =  pin;
  pinMode(pin, OUTPUT);
  this->span = span;
  future       = span+millis();
  state      = 0;
  digitalWrite(pin, state);
}
void qw_blink::go(){
  if (millis() < future) return;
  future       = span+millis();
  state  = ! state ;
  digitalWrite(pin, state);
}
// ---- класс ослик -----
// отправляет сообщение в Serial через определеное время
class qw_neddy{
public:
    qw_neddy(unsigned long span);
    void go();// драйвер blink
  private:
    unsigned long span;// интервал сообщения
    unsigned long future;// время следующего сообщения  
};
qw_neddy::qw_neddy(unsigned long span){
  this->span = span;
  future       = span+millis();
}
void qw_neddy::go(){
  if (millis() < future) return;
  future       = span+millis();
   Serial.println("neddy");  
}

// ====== Программа ======  
qw_blink VD1(13,1200); // светодиод нв 13 мигает 1.2+1.2 сек
qw_blink VD2(12,1100); // светодиод нв 12 мигает 1.1+1.1 сек
qw_blink VD3(11,1000); // светодиод нв 11 мигает 1.0+1.0 сек
qw_blink VD4(10, 900); // светодиод нв 10 мигает 0.9+0.9 сек
qw_blink VD5(9,  800); // светодиод нв 9 мигает 0.8+0.8 сек
qw_blink VD6(8,  700); // светодиод нв 8 мигает 0.7+0.7 сек
qw_blink VD7(7,  600); // светодиод нв 7 мигает 0.6+0.6 сек
qw_blink VD8(6,  500); // светодиод нв 6 мигает 0.5+0.5 сек
qw_blink VD9(5,  400); // светодиод нв 5 мигает 0.4+0.4 сек
qw_blink VD10(4, 300); // светодиод нв 4 мигает 0.3+0.3 сек
qw_blink VD11(3, 200); // светодиод нв 3 мигает 0.2+0.2 сек
qw_blink VD12(2, 100); // светодиод нв 2 мигает 0.1+0.1 сек
qw_neddy    neddy(2000);// отпавка в Serial каждые 2 сек
void setup() {
  Serial.begin(9600); //устанавливаем последовательное соединение
}

void loop() {
VD1.go();  
VD2.go();
VD3.go();  
VD4.go();
VD5.go();  
VD6.go();
VD7.go();  
VD8.go();
VD9.go();  
VD10.go();
VD11.go();  
VD12.go();
neddy.go();
}

#129 Програмування Arduino » 1,2,3,4,5 : Начинаем асинхронно светодиодами на Ардуине мигать! » 2016-07-25 21:11:10

qwone
відповідей: 16

Ну собственно скеч.

// ---класс вспышка---
class qw_blink {
  public:
    qw_blink(int pin,unsigned long span);
    void go();// драйвер blink
  private:
    unsigned long span;// интервал гашения или включения
    unsigned long future;// время сменить состояние гашения или включения    
    int            pin;// номер вывода
    boolean      state;// состояние светодиода
};
qw_blink::qw_blink(int pin,unsigned long span){
  this->pin  =  pin;
  pinMode(pin, OUTPUT);
  this->span = span;
  future       = span+millis();
  state      = 0;
  digitalWrite(pin, state);
}
void qw_blink::go(){
  if (millis() < future) return;
  future       = span+millis();
  state  = ! state ;
  digitalWrite(pin, state);
}
// ====== Программа ======  
qw_blink VD1(13,1200); // светодиод нв 13 мигает 1.2+1.2 сек
qw_blink VD2(12,1100); // светодиод нв 12 мигает 1.1+1.1 сек
qw_blink VD3(11,1000); // светодиод нв 11 мигает 1.0+1.0 сек
qw_blink VD4(10, 900); // светодиод нв 10 мигает 0.9+0.9 сек
qw_blink VD5(9,  800); // светодиод нв 9 мигает 0.8+0.8 сек
qw_blink VD6(8,  700); // светодиод нв 8 мигает 0.7+0.7 сек
qw_blink VD7(7,  600); // светодиод нв 7 мигает 0.6+0.6 сек
qw_blink VD8(6,  500); // светодиод нв 6 мигает 0.5+0.5 сек
qw_blink VD9(5,  400); // светодиод нв 5 мигает 0.4+0.4 сек
qw_blink VD10(4, 300); // светодиод нв 4 мигает 0.3+0.3 сек
qw_blink VD11(3, 200); // светодиод нв 3 мигает 0.2+0.2 сек
qw_blink VD12(2, 100); // светодиод нв 2 мигает 0.1+0.1 сек
void setup() {
 
}

void loop() {
VD1.go();  
VD2.go();
VD3.go();  
VD4.go();
VD5.go();  
VD6.go();
VD7.go();  
VD8.go();
VD9.go();  
VD10.go();
VD11.go();  
VD12.go();
}

Підвал форуму