Статус "МАСТЕР"

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Предлагаю создать список "Кто наиболее всего помог = МАСТЕР" по любому вопросу
- система оценки/отзывов - по баллам
- отправление вопросов "понравившемуся лучшему МАСТЕРУ" с правом отказа "лучшего МАСТЕРА" от обсуждения

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

без АДМИНОВ и программного обеспечения это можем и мы решить - как "Кто от куда"
....вот только лишнего в этой ветке, без участия АДМИНОВ, не избежать :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

личный интерес ( корысть ) - не могу когда нано позвать Лешак или Кисофт ?      :(

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

Интересная идея

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Yarik.Yar ,

вопрос по CPP можно ? 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

добавить к теме : ( как и структура сайта )

- общие вопросы
- прогрммные
- апаратные
- и т.д., и т.п., и др.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

личный интерес ( корысть ) - не могу когда нано позвать Лешак или Кисофт или ЯрикЯр ?      :(

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

забыл про самое главное - сообщение из этой "виртуальной ветки" идёт только "мастеру" - это конешшшшно напряг мастерам, но ....

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

И чем это поможет? Вопросы то не изменятся, увы. Так и будут называть "Помогите новичку", я, например, такие темы принципиально не читаю. Мне спокойней и писателей меньше буду посылать, они нынче все умные и нервные, вот только непонятно, зачем спрашивать, если ты умней остальных. Другим отвечаешь, а они сразу посылают, типа отгребись. Потому , лично я в свободном полете. Название темы более или менее адекватное и я в этой теме не новичок или просто интересно, зайду, почитаю. Постоянно спрашивать схему, скетч, текст ошибки, а оно надо, мне на работе хватает подобное выспрашивать. Видно я уже наелся какашек, скушно стало :) Да и уже подымались подобные темы не раз, пока выхода не нашли.

Я бы с удовольствием заюзал черный список, да нет его здесь.

Премодерация - это тоже гемор кому то будет, я бы не смог выдержать такое.

Хотя еще есть "Пометить как спам", но это тоже, будет напрягать.

Короче, куда не плюнь, попадешь..

SU-27-16, можешь мне написать на рамблер с моим ником. Только не пиши, что вам на счет перечислена тонна бабла или типа того, а то спамеры достали, потому удалю и не замечу :) Если за сутки не отвечу, значит в спам попало, рамблер иногда без моего согласия спам отсеивает, приходится доставать оттуда письма, можно письмо повторить. И, надеюсь, про if и for не будешь спрашивать, на это мегатонны информации в сети. С++ у меня достаточно немалый опыт, правда со сдвигом на большие компы.

Чегой то меня пробило на поплакаться :) Фигня это всё, есть куча других форумов, если кому этот не понравится ;)

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

всё правильно, kisoft..... 
...обосновал смерть моей задумки ( я и не верил в реализацию ) :(

да , напишу-спрошу , ссылку на вопрос скину - это частное решение моей задумки ( глобальное решение моих вопрософф , может быть )
.....спасибо, kisoft

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

вот я попал......
...именно про if и  for и хотел спросить :)-
:)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

SU-27-16,поделитесь информацией, что такое СРР :-)

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

SU-27-16 ты мастер. больше всего сообщений от тебя))) и по любому вопросу

ты мастер сообщений на любую тему)))

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Наверное CPP это C++ :)

Я описание простых функций ищу строкой, например, "C++ strchr". На сайте всё это описано. Там же есть и if и for, примеры. На ангельском, конечно, но мне вполне достаточно. Наверное есть и на русском, не искал.

Лично я считаю, что язык надо учить отдельно от МК, на большом компе. Там есть возможность отладчиком пройтись по программе, проверить по шагам, как работает алгоритм, не нужно прошивать МК, короче проще и удобней. Я часто так и делаю, потом переношу на МК. Особенно всякие алгоритмы отлаживать, моделировать.

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

 

И вправду, как не узнал;)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

kisoft пишет:

Наверное CPP это C++ :)

Там же есть и if и for, примеры.

про if моя пошутил :)

начало - код Live.ino , прописано много функций , чтобы они не маячили в основном тексте вынес их в MyFunction.h и MyFunction.cpp....
пустые функции - нормально... но функции , в которых используются переменные определённые в файле Live.ino , естественно ,  тормозятся....

как это обойти ? что дописать-объявить ? в делфи - знаю , в CPP - нет....
- перенести определения переменных в 
MyFunction.h ?
- или есть какой-то другой способ ?

спасибо :)

#define DEBUG 1

#include "myFunction.h"

#define knopka1 2
#define knopka2 3
#define knopka3 4
  #define ledLive1 10
  #define ledLive2 9
  #define ledLive3 8
#define ledAssignment1 5
#define ledAssignment2 6
#define ledAssignment3 7
 #define ledBlockButtons 11
byte levelCurrent=1;
byte levelMax=10;
byte liveCurrent=3;
 enum SECTION{sectionOut,sectionIn,sectionResult};
 SECTION section=sectionOut;
unsigned long oldMillis;
 byte assignment[10];
 byte reply[10];
 byte countKnopka;
//=========================================================================
void setup()
{
#ifdef DEBUG
  Serial.begin (9600);
#endif
  pinMode (knopka1,INPUT);
  digitalWrite(knopka1,HIGH);
  pinMode (knopka2 ,INPUT);
  digitalWrite(knopka2,HIGH);
  pinMode (knopka3,INPUT);
  digitalWrite(knopka3,HIGH);
    pinMode (ledAssignment1,OUTPUT);
    pinMode (ledAssignment2,OUTPUT);
    pinMode (ledAssignment3,OUTPUT);
    OutByteAssignment(0);
  pinMode (ledLive1,OUTPUT);
  pinMode (ledLive2,OUTPUT);
  pinMode (ledLive3,OUTPUT);
  OutByteLive(0);
    pinMode (ledBlockButtons,OUTPUT);
    digitalWrite(ledBlockButtons,LOW);
  randomSeed (analogRead(0));
   oldMillis=millis();
}
//=========================================================================
void loop()
{
// sectionOut
  if(section==sectionOut)
  {
    ClearAssignment();   // очистить массив
    fillAssignment();    // заполнить массив
    showLive();          // показать жизни
    showAssignment();    // показать задание
    digitalWrite(ledBlockButtons,HIGH);   // вкл подсветки блока кнопок
#ifdef DEBUG
    controlAssignment(); // функция просмотра задания
#endif
    ClearReply();        // очистить массив
    countKnopka=0;       // обнулить колво нажатий
    section=sectionIn;   // смена флага секции
    oldMillis=millis();  // вкл секундомер
  }
// sectionIn
  if(section==sectionIn)
  {
    if((millis()-oldMillis)<(2000+levelCurrent*500))
    {
      if(countKnopka<10)
      {
        if(!digitalRead(knopka1))
        {
          delay(50);
          reply[countKnopka]=1;
          countKnopka++;
        }
        if(!digitalRead(knopka2))
        {
          delay(50);
          reply[countKnopka]=2;
          countKnopka++;
        }
        if(!digitalRead(knopka3))
        {
          delay(50);
          reply[countKnopka]=4;
          countKnopka++;
        }
      }
    }
    else
    {
      digitalWrite(ledBlockButtons,LOW);   // выкл подсветки блока кнопок
#ifdef DEBUG
      Serial.println("...allotted time has expired !");
#endif
      section=sectionResult;   // смена флага секции
    }
  }
// sectionResult
  if(section==sectionResult)
  {
#ifdef DEBUG
  controlReply();         // функция просмотра ответов
#endif
    CompareArray();       // сравнить массивы, принять решение
    // showResult();      // ещё не написана :)
    section=sectionOut;   // смена флага секции
  }
}
//=========================================================================
#include "Arduino.h"
//#include "Live.ino"

byte RandomByte(); // фунцция получения случайного байта - 001 , 010 , 100
void ClearAssignment(); // фунцция очистки массива "задание"
void ClearReply(); // фунцция очистки массива "ответ"
void OutByteAssignment(byte _n); // фунцция вывода байта на СД "задание"
void OutByteLive(byte _n); // фунцция вывода байта на СД "жизнь"
void CompareArray(); // функция сравнения массивов "задание" и "ответ"
void fillAssignment(); // функция заполнения массива "задание"
void showLive(); // функция показать жизни
void showAssignment(); // функция показать задание
void controlAssignment(); // функция просмотра задания
void controlReply(); // функция просмотра ответов
#include "Arduino.h"
//#include "Live.ino"

//=========================================================================
// фунцция получения случайного байта - 001 , 010 , 100
//=========================================================================
byte RandomByte()
{
  byte tempByte=random(1,4);
  if(tempByte==3) tempByte=4;
return tempByte;
}
//=========================================================================
// фунцция очистки массива "задание"
//=========================================================================
void ClearAssignment()
{
  for(byte i=0;i<10;i++) { assignment[i]=0; };
}
//=========================================================================
// фунцция очистки массива "ответ"
//=========================================================================
void ClearReply()
{
  for(byte i=0;i<10;i++) { reply[i]=0; };
}
//=========================================================================
// фунцция вывода байта на СД "задание"
//=========================================================================
void OutByteAssignment(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledAssignment1,LOW);
      digitalWrite(ledAssignment2,LOW);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_задание
    {
      digitalWrite(ledAssignment1,HIGH);
      digitalWrite(ledAssignment2,HIGH);
      digitalWrite(ledAssignment3,HIGH);
      break;
    }
  }
}
//=========================================================================
// фунцция вывода байта на СД "жизнь"
//=========================================================================
void OutByteLive(byte _n)
{
  switch (_n)
  {
    case 0 :                    // для выключения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 1 :
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 2 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,LOW);
      break;
    }
    case 4 :
    {
      digitalWrite(ledLive1,LOW);
      digitalWrite(ledLive2,LOW);
      digitalWrite(ledLive3,HIGH);
      break;
    }
        case 7 :                    // для включения всех трёх СД_жизнь
    {
      digitalWrite(ledLive1,HIGH);
      digitalWrite(ledLive2,HIGH);
      digitalWrite(ledLive3,HIGH);
      break;
    }
  }
}
//=========================================================================
// функция сравнения массивов "задание" и "ответ"
//=========================================================================
void CompareArray()
{
  boolean error=0;
  for(byte i=0;i<10;i++) 
  { 
    if(assignment[i]!=reply[i])
    {
      error=1;
      break;
    }
  }
  if (error)
  {
    liveCurrent--;
  }
  else 
  {
    levelCurrent++;
  }
}
//=========================================================================
// функция заполнения массива "задание"
//=========================================================================
void fillAssignment()
{
  for(byte i=0;i<levelCurrent;i++)
  {
    if(i==0) assignment[0]=RandomByte();
    if(i>0)
    {
    byte tempByte=RandomByte();
    while(assignment[i-1]==tempByte)
    {
      tempByte=RandomByte();
    }
    assignment[i]=tempByte;
    }
  }
}
//=========================================================================
// функция показать жизни
//=========================================================================
void showLive()
{
  for(int i=0;i<5;i++)
  {
    OutByteLive(7);
    delay(100);
    OutByteLive(0);
    delay(100);
  }
  OutByteLive(liveCurrent);
  delay(1000);
  OutByteLive(0);
  delay(1000);
}
//=========================================================================
// функция показать задание
//=========================================================================
void showAssignment()
{
  OutByteAssignment(7);
  delay(1000);
  OutByteAssignment(0);
  delay(1000);
  byte n=0;                            // начало миганий задания
  while((assignment[n]!=0)&&(n<10))
  {
    OutByteAssignment(assignment[n]);  // вкл случСД
    delay(500);                        // пауза
    OutByteAssignment(0);              // выкл случСД
    delay(500);                        // пауза
    n++;
  }                                    // окончание миганий задания
  delay(500);
  OutByteAssignment(7);
  delay(500);
  OutByteAssignment(0);
  delay(500);
}
//=========================================================================
// функция просмотра задания
//=========================================================================
void controlAssignment()
{
  Serial.print(" level = ");
  Serial.println(levelCurrent);
  for(byte i=0;i<10;i++)
  {
    Serial.print(assignment[i]);
    Serial.print(" ");
  }
  Serial.println("");
  Serial.println(" GO ! Push button !!!");
}
//=========================================================================
// функция просмотра ответов
//=========================================================================
void controlReply()
{
  for(byte i=0;i<10;i++)
  {
    Serial.print(reply[i]);
    Serial.print(" ");
  }
  Serial.println("");
  Serial.println("************************");
}
//=========================================================================

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

В .h файле можно описывать не только функции, но и переменные. В .h файлах нужно использовать слово extern при описании функций и переменных. А объявлять функции и переменные уже в .cpp/.ino файлах.

В больших программах (на больших компах) достаточно часто все файлы идут парой, .hpp & .cpp, где в .hpp описание всех доступных функций и переменных, объявленных в .cpp файле. Потому, если, например, в file2.cpp  нужны функции из файла file1.cpp, в начале file2.cpp включают file1.hpp.

Я уже приводил пример на этом форуме, повторюсь. Это простой пример. Blink, распиленный на несколько файлов, правда здесь переменная описана в .h, но не используется, попробуй сам её использовать в second_file.cpp:

Blink_mulifile.ino:

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
#include "second_file.h"
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  blink(led);
}

second_file.cpp:

#include <Arduino.h>

void blink( int p_led )
{
  digitalWrite(p_led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(p_led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

second_file.h:

#ifndef __SECOND_FILE
#define __SECOND_FILE

extern int led;
extern void blink(int p_led);

#endif

PS Вообще не рекомендуется использовать глобальные переменные, однако в Ардуине такое бывает, поскольку задачи достаточно просты. Хотя, если требуется распил на несколько файлов, то лучше глобальные переменные не использовать, легче допустить ошибку. Это всего лишь рекомендация, не более того.

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

спасибо :)

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Будешь должен :-P

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Большое спасибо! 

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

 

А хде пропал МАСТЕР Пухлявый и МАСТЕР ДОХТОР? Да и у МАСТЕРА АРТ100 наливка не хилая....

nikolaki
nikolaki аватар
Offline
Зарегистрирован: 14.02.2013

Да и человек АЭРОПЛАН тож ЗАЖИГАТ нехило... МАСТЕР !!!( Че эти пилоты курят в полете???)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

nikolaki пишет:

А хде пропал МАСТЕР Пухлявый и МАСТЕР ДОХТОР? 

Пока Чип и Дейл спешили на помощь, Винтик со Шпунтиком раскрутили Гаечку!