Ви не увійшли.
"То ли лыжи не едут, то ли я ..." делаю что-то не так?
А я склоняюсь к первому.Все же перед тем как садится за работу с ардуину лыжи желательно снять. Ардуина все же не женщина, требует к себе немного уважения.
Nemoj, а если есть ситуация что буфер и не пустой и не полный. Ну не накапало все.Надо время что бы все налилось. Сначала выпили первую половину, а потом вторую. А целиком не получилось. И теперь жалуетесь что вам по полной не налили.
негласные правила это такие правила которые сам решил для себя. Но это не исключает вероятности что кто-то решил строго наоборот. Одни едут по одной стороне, а другие по другой. И все это стало ГЛАСНЫМ негласным правилом. Не хочу сказать что негласные правила это плохо.Так можно сэкономить время на решение не важной проблемы. Но в суд другого не потащишь за нарушение негласных правил, конечно кроме негласного правила что у сильного слабый виноват. Но это скорее негласное правило природы.
решается как классический цифровой автомат.Но скетча я Вам точно не дам, потому что это сразу написать что скетч вами честно спизжен.
/**/
class cl_aaa {
protected:
byte pin;
static const byte sON = 0; // состояние вкл
static const byte sOFF = 1; // состояние выкл
unsigned long time1, time, past;
byte state;
void set(byte s) {
past = millis();
state = s;
if (state == sON) digitalWrite(pin, HIGH);
else digitalWrite(pin, LOW);
}
public:
cl_aaa(byte p, unsigned long t1, unsigned long t): pin(p), time1(t1), time(t) {}
void init() {
pinMode(pin, OUTPUT);
set(sON);
}
void run() {
if (state == sON && millis() - past >= time1)set(sOFF);
if (state == sOFF && millis() - past >= (time - time1))set(sON);
}
};
cl_aaa aaa1(/*пин*/13,/*время вкл*/(unsigned long )500,/*время цикла*/(unsigned long )1000);
cl_aaa aaa2(/*пин*/12,/*время вкл*/(unsigned long )1000,/*время цикла*/(unsigned long )2000);
//----------------------------------------------------
void setup() {
aaa1.init();
aaa2.init();
}
void loop() {
aaa1.run();
aaa2.run();
}
/**/
const byte Rpin =/*пин*/A0;
const byte Led1Pin =/*пин*/8;
const byte Led2Pin =/*пин*/9;
const byte Led3Pin =/*пин*/10;
const byte st1 = 0; // горит 1-й
const byte st2 = 1; // горит 2-й
const byte st3 = 2; // горит 3-й
byte state;
unsigned long past,time;
void set(byte s) {
state = s;
time=analogRead(Rpin)+100;
past = millis();
switch (s) {
case st1:
digitalWrite(Led1Pin, HIGH);
digitalWrite(Led2Pin, LOW);
digitalWrite(Led3Pin, LOW);
break;
case st2:
digitalWrite(Led1Pin, LOW);
digitalWrite(Led2Pin, HIGH);
digitalWrite(Led3Pin, LOW);
break;
case st3:
digitalWrite(Led1Pin, LOW);
digitalWrite(Led2Pin, LOW);
digitalWrite(Led3Pin, HIGH);
break;
}
}
void _init() {
pinMode(Led1Pin, OUTPUT);
pinMode(Led2Pin, OUTPUT);
pinMode(Led3Pin, OUTPUT);
set(st1);
}
void _run() {
if (state == st1 && millis() - past >= time) set(st2);
if (state == st2 && millis() - past >= time) set(st3);
if (state == st3 && millis() - past >= time) set(st1);
}
//-----------main------------------------
void setup() {
_init();
}
void loop() {
_run();
}
/**/
Хороших то и нету. Посредственных море. А конечные автоматы с лямда функцией это моя личная наработка. Ну так по мелочам http://arduino.ru/forum/programmirovanie/tsifrovye-avtomaty-v-klassakh-po-qwone#comment-431698
Вы же просили поднесли карточку дверь открылась . Еще раз дверь закрылась. Конечно это нужно делать с паузой в 1 секунду. А то дверь отрылась-закрылась будет меняться каждую секунду без отъема карточки.
Не проверял работу
//-----замок-----------------------
typedef void(*pDo)();
pDo Do = [] {};
#include <OneWire.h>
OneWire ds(/*пин*/10);
const byte num = 2; // 2 кода
const byte base[num][8] = {
{0x01, 0x11, 0xF7, 0x43, 0x01, 0x00, 0x00, 0x65},// 1-й код
{0xEB, 0x00, 0x00, 0x01, 0xB6, 0x7A, 0x12, 0x01} // 2-й код
};
void runLock() {
byte tmp[8];
bool ok = false;
if (ds.search(tmp)) {
for (int i = 0; i < num; i++) {
if (base[i][0] == tmp[0] && base[i][1] == tmp[1] &&
base[i][2] == tmp[2] && base[i][3] == tmp[3] &&
base[i][4] == tmp[4] && base[i][5] == tmp[5] &&
base[i][6] == tmp[6] && base[i][7] == tmp[7] ) ok = true;
}
for (int i = 7; i > -1; i--) {
Serial.print(tmp[i], HEX); Serial.print(" ");
}
Serial.println();
if (ok)Do();
ds.reset_search();
}
}
//---------автомат-----------------------------
const byte ledPin =/*пин*/13;
// состояния автомата
const byte s0 = 0;// считываем что бы открыть
const byte s1 = 1;// пауза что бы убрать ключ
const byte s2 = 2;// считываем что бы закрыть
const byte s3 = 3;// пауза что бы убрать ключ
pDo run = [] {};
const unsigned long time1s = 1000; // 1 секунда на убрать ключ
unsigned long past;
void set(byte s) {
past = millis();
switch (s) {
case s0:
digitalWrite(ledPin, LOW);
Do = [] {set(s1);};
run = [] {};
break;
case s1:
digitalWrite(ledPin, HIGH);
Do = [] {};
run = [] {
if (millis() - past > time1s)
set(s2);
};
break;
case s2:
Do = [] {set(s3);};
run = [] {};
break;
case s3:
digitalWrite(ledPin, LOW);
Do = [] {};
run = [] {
if (millis() - past > time1s)
set(s0);
};
break;
}
}
//-------------------------------------------------
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
set(s0);
}
void loop() {
runLock();
run();
}
Ну вот - нажал на кнопку повернулось на 3 секунды
/**/
const byte btnPin = 2; // кнопка
const byte servoPin = 12; //серва
const byte ledPin = 13; //светодиод
//---------------------------
#include <Servo.h>
Servo servo;
//----автомат-------------------
typedef void (*pDo)();
pDo run = [] {};
// состояния
const byte sCLOSE = 0; // открыто
const byte sOPEN = 1 ; // закрыто
bool state;
const unsigned long time3s=3000;// константа 3 секунды
void set(bool s) {
static unsigned long past;
past = millis();
state = s;
switch (s) {
case sCLOSE:
digitalWrite(ledPin, LOW);
servo.write(90);
run = [] {};
break;
case sOPEN:
digitalWrite(ledPin, HIGH);
servo.write(0);
run = [] {
if (millis() - past >= time3s) set(sCLOSE);
};
break;
}
}
//--------кнопка-----------------------------------
pDo runBtn = [] {};
bool btn;
void setBtn(bool b) {
static unsigned long past;
btn = b;
past = millis();
switch (b) {
case false:
set(sOPEN);
runBtn = [] {
if (!digitalRead(btn) && millis() - past >= 100) setBtn(true);
};
break;
case true:
runBtn = [] {
if (digitalRead(btn) && millis() - past >= 100) setBtn(false);
};
break;
}
}
//--------------------------------------------
void setup() {
servo.attach(servoPin);
pinMode(btnPin, INPUT_PULLUP);
setBtn(false);
pinMode(ledPin, OUTPUT);
set(sCLOSE);
}
void loop() {
runBtn();
run();
}
простейший конечный автомат.
дивлюся на код та й думку гадаю, навіщо автор скетчу лайно написав.
/**/
//#1
const byte ledPin = 13;
enum state1_t {sLedOFF, sLedON} state1;
unsigned long past1;
unsigned long time2s = 2000;
void stand1(state1_t s) {
state1 = s;
past1 = millis();
switch (state1) {
case sLedOFF:
digitalWrite(ledPin, LOW);
break;
case sLedON:
digitalWrite(ledPin, HIGH);
break;
}
}
//#2
const byte btnPin = 2;
enum state2_t {sBtnOFF, sBtnON} state2;
//---------main()-------------------------
void setup() {
//#1
pinMode(ledPin, OUTPUT);
stand1(sLedOFF);
//#2
pinMode(btnPin, INPUT_PULLUP);
state2 = sBtnOFF;
}
void loop() {
//#1
switch (state1) {
case sLedOFF:
break;
case sLedON:
if (millis() - past1 >= time2s) stand1(sLedOFF);
break;
}
//#2
bool tmp = digitalRead(btnPin);
switch (state2) {
case sBtnOFF:
if (!tmp) {
state2 = sBtnON;
stand1(sLedON);
delay(50);
}
break;
case sBtnON:
if (tmp) {
state2 = sBtnOFF;
stand1(sLedON);
delay(50);
}
break;
}
}
Задачи сложные но интересные. Не хватает рук.
Всем у кого есть время, желание, тяга к развитию в области роботостроения - будет интересно, не скучно и с профитом.
При чем тут руки. Вы же не грузчиков нанимаете. Нужны головы и станки. Или опять же все в Китае закупать.
Ну и так для общего развития. https://youtu.be/zJSSlkEHXBQ?t=343
И на чем вы будете детали делать для таких роботах. Что опять как в средневековье ручками.
Вы сами и ответили. Учитесь писать вменяемые программы.
Неплохо все организовано.
#include "Arduino.h"
#include "Buttonkey.hpp"
#include "SuperButton.hpp"
SuperButton button(5,69,1000,1000);
void setup(void)
{
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);
}
void loop(void)
{
switch (button.pressed())
{
case SuperButton::Press::SINGLE: Serial.println("single pressed"); break;
case SuperButton::Press::DOUBLE: Serial.println("double pressed"); break;
case SuperButton::Press::LONGER: Serial.println("longer pressed"); break;
default:;
}
}
Можно SuperButton::Press::SINGLE в define спрятать (для любителей)
Ну и мне не надо.Опять же по заявленой ТС теме.
Очень трудно понять о чём здесь хотелось сказать ... если вообще хотелось.
Начнем ну очень из далека. Почему Наполеон нагибал Европу. Гений может быть. Но французкие генералы тоже были ничего. А произошла Великая Французкая революция и вместе со свободой сделали всеобщую воинскую повиность. И откосить от нее не возможно. Хоть ты поп дворянин, рабочий или ну очень королевской крови. То есть в отличие от королевской Франции , где много могло откосить, хотя бы из-за недостаточной оплаты. Дальше. При Королевской франции абсолютный монарх нуждался в деньгах и многие богачи могли ссудить под большой процент !!! Видно желающих пожертвовать на нужды Франции маловато было. В Революционной Франции все кто не бодро откликались на лозунг "Революция в опасности" проходили по конфискации и знакомству с Гильотиной. Вывод : вот и приходим к выводу что при Наполеновской Франции мобилизациный ресурс Франции увеличился. Такая же песня и при Кромвеле. Посмотрим на фашискую Германию и СССР. Как мог СССР победить "объединенную Европу"? Ответ социалистический СССР смог больше мобилизовать ресурсов чем капиталистическая Европа. И да правда , после этого СССР сильно "обнищал", лет 5-10 пришлось потом наращивать жирок.
Во-во. Как выйду на улицу , как гляну на цены. И истина на ценах и проявляется. А если кому не нравится эта истина, так можно походить по рынку в поисках справедливой истины. Особенно если в кармане своей истины маловато.
какие люди , куда бегут. Если вы о заробитчанах , то это потому что Украина стала территорией а не страной. Ну бедствие у нас, рукотворное. Мобилизационый ресурс и количество народа на территории это разные вещи. Если с территории получить 100 пращников или с 100 лучников или 100 автоматчиков или 100 робототизированих комплесов, то это разные в мобилизационом смысле области. Но это только технологическое развитие. А если еще и социальное включить.
Проблема не в Брежневе или коммунистах,... в строе. А точнее различных мобилизационных возможностях строя. Что ограничивало развиваться феодализму-интересы дворянства , при капитализме - интересы олигархов . при социализме - интересы коммунистической блин элиты. Но при этом мобилизациные возможности капитализма выше чем феодализма, а социализма выше чем капитализма. Но я не об этом. Большие проекты это прежде всего большие расходы и социализм просто позволяет мобилизовать больше. Что важнее благостостояние "технической блин элиты" или реализованые и приносящую пользу народу проекты. Вот эту мысль и пытаются скрыть от всех при помощи либеральной галиматьи.
Похоже здесь только к опыту Крылова обращаться
МАРТЫШКА И ОЧКИ
Мартышка к старости слаба глазами стала;
А у людей она слыхала,
Что это зло еще не так большой руки:
Лишь стоит завести Очки.
Очков с полдюжины себе она достала;
Вертит Очками так и сяк:
То к темю их прижмет, то их на хвост нанижет,
То их понюхает, то их полижет;
Очки не действуют никак.
«Тьфу пропасть!» говорит она: «и тот дурак,
Кто слушает людских всех врак:
Всё про Очки лишь мне налгали;
А проку на́-волос нет в них».
Мартышка тут с досады и с печали
О камень так хватила их,
Что только брызги засверкали.
ПС:http://myarduino.at.ua/index/biblioteka_cyberlib_arduino/0-11
http://kind-evil.blogspot.com/2013/12/arduino-avrdude-stk500recv-programmer.html
Поисковик в помощь
Это просто на кастовую систему в солнечной Индии похоже. Если ты не выучился на схемотехника, то не трожь это "чужое" , не по твоему уму дело.Господа профессионалы не задумывались почему появился Ардуино как вид? Я думаю что одной из причин было желание изготовителей сделать порог вхождения менее болезненным, дать возможность людям с идеями воплощать их, разбираться самостоятельно. Мне абсолютно понятны коммерчиские намерения некоторых участников форума, деньги инструмент выживания. Зачем топтать надежды молодых и неопытных? вы бы сами такого учения желали в начале своего профессионального пути? почему не рассматривать неопытного но амбициозного как единомышленника,а не как глупца который полез не в свое дело?
Это просто первичный отсев. И опыт для молодых и неопытных "шаровиков",не знаешь-плати.Не хочешь платить другим - растрачивай свое личное время на получение знаний. И нет тут больших профессионалов, потому что профессионалам даже просто висеть на форуме не выгодно.
Во "амбициозный новичек" а там на фирме он вешал лапшу что он эффективный менеджер программист. Но ему не вдомек, что программист не пишет раз и забыл. Ему надо регуляно в нее что-то добавлять, что-то меня. И самое главное , что программы пишется не на русском или мовi , блин. а) на языке Си который надо знать, б) уметь работать с алгоритмами в) писать код который надо усовершенствовать. г) и "железо" надо знать. так как без "железа" код почему-то не работает.
А код скинуть смогу, но потом еще постов в 10 надо объяснять что и как. И главное это так за "идею".