Статус "МАСТЕР"
- Войдите на сайт для отправки комментариев
Пт, 27/03/2015 - 18:20
Предлагаю создать список "Кто наиболее всего помог = МАСТЕР" по любому вопросу
- система оценки/отзывов - по баллам
- отправление вопросов "понравившемуся лучшему МАСТЕРУ" с правом отказа "лучшего МАСТЕРА" от обсуждения
без АДМИНОВ и программного обеспечения это можем и мы решить - как "Кто от куда"
....вот только лишнего в этой ветке, без участия АДМИНОВ, не избежать :(
личный интерес ( корысть ) - не могу когда нано позвать Лешак или Кисофт ? :(
Интересная идея
Yarik.Yar ,
вопрос по CPP можно ?
добавить к теме : ( как и структура сайта )
- общие вопросы
- прогрммные
- апаратные
- и т.д., и т.п., и др.
личный интерес ( корысть ) - не могу когда нано позвать Лешак или Кисофт или ЯрикЯр ? :(
забыл про самое главное - сообщение из этой "виртуальной ветки" идёт только "мастеру" - это конешшшшно напряг мастерам, но ....
И чем это поможет? Вопросы то не изменятся, увы. Так и будут называть "Помогите новичку", я, например, такие темы принципиально не читаю. Мне спокойней и писателей меньше буду посылать, они нынче все умные и нервные, вот только непонятно, зачем спрашивать, если ты умней остальных. Другим отвечаешь, а они сразу посылают, типа отгребись. Потому , лично я в свободном полете. Название темы более или менее адекватное и я в этой теме не новичок или просто интересно, зайду, почитаю. Постоянно спрашивать схему, скетч, текст ошибки, а оно надо, мне на работе хватает подобное выспрашивать. Видно я уже наелся какашек, скушно стало :) Да и уже подымались подобные темы не раз, пока выхода не нашли.
Я бы с удовольствием заюзал черный список, да нет его здесь.
Премодерация - это тоже гемор кому то будет, я бы не смог выдержать такое.
Хотя еще есть "Пометить как спам", но это тоже, будет напрягать.
Короче, куда не плюнь, попадешь..
SU-27-16, можешь мне написать на рамблер с моим ником. Только не пиши, что вам на счет перечислена тонна бабла или типа того, а то спамеры достали, потому удалю и не замечу :) Если за сутки не отвечу, значит в спам попало, рамблер иногда без моего согласия спам отсеивает, приходится доставать оттуда письма, можно письмо повторить. И, надеюсь, про if и for не будешь спрашивать, на это мегатонны информации в сети. С++ у меня достаточно немалый опыт, правда со сдвигом на большие компы.
Чегой то меня пробило на поплакаться :) Фигня это всё, есть куча других форумов, если кому этот не понравится ;)
всё правильно, kisoft.....
...обосновал смерть моей задумки ( я и не верил в реализацию ) :(
да , напишу-спрошу , ссылку на вопрос скину - это частное решение моей задумки ( глобальное решение моих вопрософф , может быть )
.....спасибо, kisoft
вот я попал......
...именно про if и for и хотел спросить :)-
:)
SU-27-16,поделитесь информацией, что такое СРР :-)
SU-27-16 ты мастер. больше всего сообщений от тебя))) и по любому вопросу
ты мастер сообщений на любую тему)))
Наверное CPP это C++ :)
Я описание простых функций ищу строкой, например, "C++ strchr". На сайте всё это описано. Там же есть и if и for, примеры. На ангельском, конечно, но мне вполне достаточно. Наверное есть и на русском, не искал.
Лично я считаю, что язык надо учить отдельно от МК, на большом компе. Там есть возможность отладчиком пройтись по программе, проверить по шагам, как работает алгоритм, не нужно прошивать МК, короче проще и удобней. Я часто так и делаю, потом переношу на МК. Особенно всякие алгоритмы отлаживать, моделировать.
И вправду, как не узнал;)
Наверное 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" //========================================================================= // фунцция получения случайного байта - 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("************************"); } //=========================================================================В .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:
PS Вообще не рекомендуется использовать глобальные переменные, однако в Ардуине такое бывает, поскольку задачи достаточно просты. Хотя, если требуется распил на несколько файлов, то лучше глобальные переменные не использовать, легче допустить ошибку. Это всего лишь рекомендация, не более того.
спасибо :)
Будешь должен :-P
Большое спасибо!
А хде пропал МАСТЕР Пухлявый и МАСТЕР ДОХТОР? Да и у МАСТЕРА АРТ100 наливка не хилая....
Да и человек АЭРОПЛАН тож ЗАЖИГАТ нехило... МАСТЕР !!!( Че эти пилоты курят в полете???)
А хде пропал МАСТЕР Пухлявый и МАСТЕР ДОХТОР?
Пока Чип и Дейл спешили на помощь, Винтик со Шпунтиком раскрутили Гаечку!