Ви не увійшли.
А чего там сложного. Заплатил-получил. Сложности вылазят, если на халяву, да еще если заказчик туп.Вот тогда это гнилой заказ.
отсутсвие базовых знаний приводит к тому, что в новейших технологиях вы будете только потребителем.
const int buttonPin = 2; // кнопка (+)
const int button1Pin = 3; //кнопка (-)
bool button_old = 1; // предыдущее значение button0
bool button1_old = 1; // предыдущее значение button1
int count = 0; // переменная для подсчета нажатий на кнопку
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(button1Pin, INPUT_PULLUP);
}
void loop() {
bool button = digitalRead(buttonPin);
if (!button && button_old) {
button_old = 0;
delay(10);// ждем чтобы дребезг прошел
count = count + 1;
if (count >= 10) count = 0;
Serial.println(count);
}
if (button && !button_old) {
button_old = 1;
delay(10);// ждем чтобы дребезг прошел
}
bool button1 = digitalRead(button1Pin);
if (!button1 && button1_old) {
button1_old = 0;
delay(10);// ждем чтобы дребезг прошел
count = count - 1;
if (count < 0) count = 10;
Serial.println(count);
}
if (button1 && !button1_old) {
button1_old = 1;
delay(10);// ждем чтобы дребезг прошел
}
}
/*Скетч использует 2436 байт (7%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 190 байт (9%) динамической памяти, оставляя 1858 байт для локальных переменных. Максимум: 2048 байт.
*/
От софта до харда. Помимо цены за труд нужно ориентироваться по стоимости комплектующих.
Город Львов, но можно удаленно до монтажа. С перспективой дальнейших заказов.
Собирите мне гитару с пакетом оригинальных песен на ней. Стоимость работы за труд ориентируйтесь на стоимость древисины в моем районе.
да есть недочеты, приличный метролог мигом заметит "косяки"
с другой стороны Вы хоть один ГОСТ написали? )
Напьешься будешь https://www.youtube.com/watch?v=rZsQfssZxMs
Посадят писать - будешь писать. На любом предприятии есть всякие инструкции служебные записки -- внутрений документооборот. И ГОСТЫ пишут не только литераторы , а скорее совсем не литераторы. Так что не надо меня написанием ГОСТов пугать. И так регулярно подобную "литературу" приходится читать и расписываться в ознакомлении. Слава богу, что на русском.
Нормальное явление. То что написано на мове, читать не обязательно. Так как там смысла нет. Потому что на ней пишут те кто или мовой не владеет и/или темой. Плохо то что документооборот идет на ней.
Так задача не сложная. Сложность только у ТС.
@ Green
@ qwoneкак говориться, языком .... не мешки ворочить. Я и не спорю что новичек. Нигде не учился все что знаю то брал из инета. Пишу как могу. А вы вместо того чтоб критиковать чужую работу , взяли да помогли человеку ,для вас "ВЕЛИКИХ ГУРУ" это ведь на коленке 2 минуты и это без преувиличения ), а нет по обсуждать как бабки на базаре - медом не корми )
Что бы сделать проект надо пройти 4 этапа: 1-составить ТЗ; 2- спроектировать программу;3- написать код; 4-залить скетч и протестировать получившее. И это скорее всего не пройдет сразу и желательно пройти еще один круг 1->2->3->4 а потом еще и еще. Сложность работы с новичками не в написании кода, а в долгом расжевывании что там и как. Которое занимает не 2 минуты а как минимум 2 недели. И потом это начинает подбешивать. Потому что новичку кажется что вам нравится общаться с гением как он и вам банально нечего делать еще. И этот гений даже литературу читать не будет, весь минимув вы обязаны рассказать ему в ваших постах на форуме.
ПС: Да что мне вас учить. Раз взялись за проект, то помогите довести этот проект до конца. И поздравляю вас со звание ГУРУ, который делает все за 2 минуты.
У ЛЮДЕЙ это всё дефайнами определяется. Безо всякой переделки.
Ну это у людей. А вот новички, как правило, не люди. Они тупят по черному.
Вот что у меня вышло. Почему-то пока работает не коректно. все собрал на коленке конечно.
Разумеется так и будет. Очень сложный алгоритм при отсутсвии минимальных знаний дает такой эффект.
Разберешься в настройке.
//**/
unsigned long mill;// переменная для millis()
typedef void (*pDo)() ;// тип -функция обработчик
//------Cl_Led----------------------
// класс светодиод
class Cl_Led {
protected:
const byte pin;
bool led;
unsigned long past, time;
byte state; //0 выкл/ 1 вкл / 2 мигать
/*установить в состояние*/
void stand(byte state_) {
past = mill;
state = state_;
switch (state) {
case 0: // выкл
digitalWrite(pin, led = LOW);
break;
case 1: // вкл
digitalWrite(pin, led = HIGH);
break;
case 2:// мигать
digitalWrite(pin, led = !led);
break;
case 3:// короткое выключение
digitalWrite(pin, led = LOW);
break;
case 4:// короткое включение
digitalWrite(pin, led = HIGH);
break;
}
}
public:
/*конструктор*/
Cl_Led(byte pin_): pin(pin_) {}
/*инициализация-вставить в setup()*/
void init() {
pinMode(pin, OUTPUT);
OFF();
}
/*работа-вставить в loop()*/
void run() {
if (state == 2 && mill - past >= time)stand(2);
if (state == 3 && mill - past >= time)stand(1);
if (state == 4 && mill - past >= time)stand(0);
}
/*включить*/
void ON() {
stand(1);
}
/*коротко включить*/
void ON(unsigned long time_) {
time = time_;
stand(4);
}
/*выключить*/
void OFF() {
stand(0);
}
/*коротко выключить*/
void OFF(unsigned long time_) {
time = time_;
stand(3);
}
/*мигать*/
void blink(unsigned long time_ = 200) {
time = time_;
stand(2);
}
};
//------Cl_Btn----------------------
// класс кнопка
class Cl_Btn {
protected:
const byte pin;
pDo Do;//обработчик
bool bounce = 0;
bool btn = 1, oldBtn;
unsigned long past;
public:
/*конструктор*/
Cl_Btn(byte pin_, pDo Do_): pin(pin_), Do(Do_) {}
/*инициализация-вставить в setup()*/
void init() {
pinMode(pin, INPUT_PULLUP);
}
/*работа-вставить в loop()*/
void run() {
bool newBtn = digitalRead(pin);
if (!bounce && newBtn != btn) {
bounce = 1;
past = mill;
}
if (bounce && mill - past >= 10) {
bounce = 0 ;
oldBtn = btn;
btn = newBtn;
if (!btn && oldBtn) Do();
}
}
};
//-----компоновка----------------------
Cl_Led Led(/*пин*/13);
void DoBtn1() {
Led.ON(200);
Serial.println("DoBtn1");
}
void DoBtn2() {
Led.OFF(200);
Serial.println("DoBtn2");
}
void DoBtn3() {
Led.blink();
Serial.println("DoBtn3");
}
Cl_Btn Btn1(/*пин*/2,/*обработчик*/DoBtn1);
Cl_Btn Btn2(/*пин*/3,/*обработчик*/DoBtn2);
Cl_Btn Btn3(/*пин*/4,/*обработчик*/DoBtn3);
//-----main----------------------
void setup() {
Serial.begin(9600);
Led.init();
Btn1.init();
Btn2.init();
Btn3.init();
}
void loop() {
mill = millis();
Led.run();
Btn1.run();
Btn2.run();
Btn3.run();
}
/*Скетч использует 2858 байт (9%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 251 байт (12%) динамической памяти, оставляя 1797 байт для локальных переменных. Максимум: 2048 байт.
*/
А у вас программа не той системы. Нужна другая система. На это вы долго будете блох из программы вычухивать.
За репетиртство и практику 500 гр.
ПС: что бы не повторять одно и тоже почитайте эту мою тему.http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov
И что? Примитивная реализация. Вот только код для продвинутого Си и Си++
Издеваетесь. Пожалуста.
я старалса для РЕАЛЕСТИЧЬНОСТИ, потому что настоящий танк --- блокирует, а не две в разние стороны крутит (КПП одна для 2 гусенец)
если вам нужна реалистичность, то "сидеть надо в танке"(смотреть через камеру), а не со стороны. Да для танка нужна или беговая дорожка, или открытое пространство.
В общем для решения можно пойти тремя путями.
1- использовать указатели
2- использовать встроенные средства языка Си
3- использовать String
Ну и по мне еще лучше написать свой String под решение этой задачи. Но мне это зачем. Я же не ТС.
ПС: А памяти хватит, если прямыми руками писать код.
Сразу пошли наезды, завуалированные оскорбления... А моя мысль в том, что всё хорошо к месту. Всего лишь.
А почему вы свою мысль не используете. К чему упоминать меня и все это. Это в этой теме было точно к не месту. Или вы и только вы определяете что к месту, а что к не к месту.
Green. Слава богу, вы все же узнали много новых слов. Осталось вам поискать, что они означают. А может настанет момент, что нучитесь их применять. Но это скорее фантастика.
ну зачем так писать
TCNT1H = 0x85EE >> 8;
TCNT1L = 0x85EE & 0xff;
а не так
TCNT1H = 0x85;
TCNT1L = 0xEE;
или все надежда на компилятор. Он умнее теперешних программеров и все их косяки уберет
Нормально нормально. Чем думаем, тем и делаем. Если народ больше жопой думает, то разумеется и работа через жопу понятнее народу. Так что гей парады это демонстрация наших умственных достижений.
Микропроцессор - не мощный процессор для которых написана та статья.
Скорее всего ,не у всех пользователей в голове мощный процессор. А так там выложены пути как организовать такую вещь, хотя бы теретически.
Что бы мне не писать долго, то прочтите это.http://rsdn.org/article/baseserv/RUThreadingMethodology.xml
И что https://ru.wikipedia.org/wiki/%D0%95%D0%B2%D1%80%D0%BE%D0%BC%D0%B0%D0%B9%D0%B4%D0%B0%D0%BD
После этого я должен скакать как сумашедший. Сколько не говори сахар, во рту слаще не станет. Даже если про это в Вики раструбят.
Если вам на уши вешают лапшу, значит это кому-то выгодно. Но ум желательно в голове иметь, а не вики без головы лезть.
Вы даёте ссылку на статью в которой пишется именно о том что я писал. Вы простите хорошо себя чувствуете?
watchdog вообще-то служит для экономии электроэнергии. Когда чипу нужно опростить датчик , отправить посылку и "лечь в сон". Но если у идиотов программеров система постоянно виснет, то watchdog это уже последнее средство сохранить работу этого горе-программиста. Тем более в Ардуне нет много места в памяти, что блукать сильно.
К чему это всё? Таймер wochdog, его назначение это сбросить микроконтроллер если он вдруг зашёл в бесконечный цикл. Когда происходит прерывание по переполнению этого таймера в векторе прерывания указан адрес reset микроконтроллера. Как его можно использовать в том о чём я писал?
Вообще не для этого. https://geektimes.ru/post/255800/