#1 2017-02-08 01:07:16

ForestCrow
Учасник
Зареєстрований: 2017-02-08
Повідомлень: 15

Помогите, объясните. Всё работает, но как не понимаю. А нужно.

Cкетч №1  управления сервой одной кнопкой. Я не могу понять пошаговую логику как оно работает, а без понимания не могу продвинуться дальше. Есть скетч №2 - простой триггер для светодиода. Я не понимаю выражение: digitalWrite(LedPin, !digitalRead(LedPin));. Получается две разных функции и обе на LedPin? И можно ли во втором скетче вместо светодиода управлять сервой как в первом скетче? Не помешает и литература по программным триггерам (если я правильно выражаюсь). Может кому-то не лень в телефонном режиме растолковать мне неучу)? Заранее спасибо, очень жду, реально застрял в этом месте.
Виталий. Киев, Деснянский.

Скетч №1
#include <Servo.h>
int button = 5; //button pin, connect to ground to move servo
int press = 0;
Servo servo;
boolean toggle = true;

void setup()
{
  pinMode(button, OUTPUT); //arduino monitor pin state
  servo.attach(7); //pin for servo control signal
  digitalWrite(5, LOW); //enable pullups to make pin high
}

void loop()
{
  press = digitalRead(button);
  if (press == HIGH)
  {
    if(toggle)
    {
      servo.write(90);
      toggle = !toggle;
    }
    else
    {
      servo.write(20);
      toggle = !toggle;
    }
  }
  delay(500);  //delay for debounce
}

Скетч №2

int LedPin = 13;             // Подключаем светодиод к порту 13
int ButPin = 4;             // Подключаем кнопку к выходу 10

void setup()
{
  pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной

void loop(){
  if(digitalRead(ButPin) == HIGH)        // если кнопка нажата
    {
      digitalWrite(LedPin, !digitalRead(LedPin));        // то переключаем состояние LedPin
      delay(500);
    }
}

Неактивний

#2 2017-02-08 08:58:18

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 875

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

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

Неактивний

#3 2017-02-08 10:39:04

ForestCrow
Учасник
Зареєстрований: 2017-02-08
Повідомлень: 15

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

А я как по Вашему учусь? С потолка? Или Вы учились чисто по книгам, без наставников, преподавателей и никогда никому не задавали вопросов? И вообще, было бы не плохо найти тут друзей с общими интересами и взаимовыручкой. А книга по С++ и уроки в ютюбе так могут?

Неактивний

#4 2017-02-08 11:00:47

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

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

как у вас с математикой?
есть куча текста типа такого

"Влияние шума
устраняется даже при низком соотношении сигнал/шум. Для примера стоит сказать, что винеровская фильтрация при соотношениях сигнал/шум ниже 2 дБ дает еще худший результат, чем был до фильтрации [1, 2]. Опираясь на широко применяемый метод Винера как на стандарт, можно сделать заключение о высокой эффективности метода фильтрации, основанного на анализе собственных чисел автокорреляционной матрицы."
который реально непонятен  и такого текста много... ,хорошо что не на английском ), а то вообще был бы жах )

то я бы за "пивасиком"  поговорил непонятных вопросах   по контроллерам в обмен на "поговорить" о вышке )

документ интересный, всем рекомендую к ознакомлению

ftp://tor.kpi.ua/

Неактивний

#5 2017-02-08 11:16:06

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

Во, и кто бы мне рассказал про "токи Фуко на обратной петле гистерезиса"...

Неактивний

#6 2017-02-08 11:22:45

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

ForestCrow, а если серьёзно, то в Ваших впоросах С++ и не пахнет. Просто Си. И Ардуино.

Неактивний

#7 2017-02-08 13:24:17

ForestCrow
Учасник
Зареєстрований: 2017-02-08
Повідомлень: 15

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

Мда, для меня это уже больше астрофизика чем математика)). Я в системном администрировании  не плохо понимаю, а вот программирование только сейчас меня догнало. Первый раз в жизни написал на форуме, поскольку в этот раз реально не смог найти нужны ответ и похоже вряд ли мне тут помогут. И вроде ничего такого сложного не спросил для понимающих...

Остання редакція ForestCrow (2017-02-08 13:25:14)

Неактивний

#8 2017-02-08 14:00:21

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 875

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

вы же сами написали что хотите двигаться дальше.
если не разберётесь с азами толку не будет.
ну скажут вам по этим скетчам, а дальше что?
каждую новую строчку на форумах расспрашивать

Неактивний

#9 2017-02-08 14:04:21

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 875

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

почитайте
http://arduino.ua/ru/prog/

Неактивний

#10 2017-02-08 15:08:12

yus12
Гість

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

По первому примеру:
Вы подключили библиотеку управления сервой (там особый сигнал) и подключили стерву на 7 ножку.
Так же вы подключили кнопку. С кнопки один провод на 5 пин, второй на питание (+5 вольт к примеру)
В этом примере вы проверяете есть ли напряжение на кнопке. При каждом нажатии кнопки(подачи питания на 5 пин) вы чередуете положение сервы между 20 и 90 градусами

Во втором примере:
digitalWrite - это вы говорите подавать или нет питание на ножку
digitalRead - Тут вы считываете текущее состояние ножки
! - это делает значение противоположным. Например !Истина = Ложь, !Ложь = Истина
Соответсвенно при команде "digitalWrite(LedPin, !digitalRead(LedPin)); "Вы задаете контролеру противоположное текущему состоянию ножки.

#11 2017-02-08 15:55:52

ForestCrow
Учасник
Зареєстрований: 2017-02-08
Повідомлень: 15

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

Уважаемый, yus12! Спасибо, что откликнулись на мой зов!) Все, что Вы написали мне полностью понятно. Я не могу понять саму логику кода. В первом скетче
if (press == HIGH)  - это уловие что в момент нажатия кнопки? Это понятно.
  {
if(toggle)   - если taggle истина? Если так, то зачем его обозначать здесь если он уже прописан как переменная = истина?Или как??
    {                                 
      servo.write(90);            то серва на 90 и после этой операции taggle не истина?
      toggle = !toggle;
    }
    else
    {
      servo.write(20);          - ну это и так понятно.
      toggle = !toggle;

Это все что я хочу понять для себя в первом счетче. Во втором все понятно кроме самой пошаговой логике этой строчки :digitalWrite(LedPin, !digitalRead(LedPin));. Или это вообще готовая функция, кроме LedPin и она не поддается пошаговой расшифровке, а сразу означает изменение состояния?  Может я не правильно выражаюсь, но надеюсь суть вопроса понятна.

Неактивний

#12 2017-02-08 18:13:52

alex_dol
Учасник
Зареєстрований: 2015-12-28
Повідомлень: 196

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

if(условие) {выполняемая команда если условие истинна}
else {выполняемая команда если условие не истинно}
(условие) - может быть что угодно (в рамках разумного конечно), компилятор все это приведет в виду "0"=не истинно или "не 0"= истинно. Сравнивать с чем либо переменную не обязательно: если она = 0 - это ложь, иначе - истинна.
Иначе говоря:
if(0) - не истинна
if(1) - истинна
if(2) - истинна
if(0==0) - истинна
if(5==5) - истинна
if(1!=1) - не истинна
if(1==HIGH) - истинна
if(0==FALSE) - истинна


digitalWrite(Пин, Значение) Пин (нога контроллера) = LedPin = 13, Значение = логическое 0 или 1, оно же ложь или истинна, LOW или HIGH...
Оператор "!" - инверсия : меняет 0 на 1 и наоборот
digitalRead(LedPin) - чтение текущего состояния вывода LedPin, в данном случае = 13
Итого:
1. digitalRead(LedPin) - читаем значение вывода LedPin
2. !digitalRead(LedPin) - инвертируем полученное значение
3. digitalWrite(LedPin, !digitalRead(LedPin)) - пишем на вывод LedPin инвертированное считанное значение
Проще говоря это прости инверсия значения вывода LedPin

З,Ы, Как вам писали, без азов ничего не будет
З,Ы,Ы, пишу на несовсем трезвую голову, сорри, если что...

Неактивний

#13 2017-02-08 18:18:15

Антоха
Гість

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

привет. Если есть желание то могу помочь с расшифровками кодов, и поделюсь своим опытом по Ардуино.
Если что пиши, мне удобнее общаться по E-Mail.
моя почта     monster022@bk.ru

буду рад пообщаться

#14 2017-02-08 20:29:47

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Помогите, объясните. Всё работает, но как не понимаю. А нужно.

Green пише:

Во, и кто бы мне рассказал про "токи Фуко на обратной петле гистерезиса"...

Закончил физмат (спец. физика). Что такое токи Фуко (замкнутые токи в проводнике на этом эффекте работают электросчетчики с алюминиевым диском smile  знаю, то такое петля гистерезиса тоже знаю, даже помню о точке Кюри, но что такое "обратная петля" roll .

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

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