Разные действия по нажатию кнопки

Тема в разделе "Arduino & Shields", создана пользователем anifeev, 16 июн 2017.

  1. anifeev

    anifeev Нуб

    Как сделать чтобы светодиод горел с яркостью 128 по первому нажатию, а по второму с яркостью 256?
    Код (C++):
    const int buttonPin = A0;
    int n=1;
    const int led = 9;
    int brightness = 0;    // how bright the LED is
    int fadeAmount = 5;    // how many points to fade the LED by
    int buttonState = 0;         // variable for reading the pushbutton status

    void setup() {
      // put your setup code here, to run once:
       pinMode(led, OUTPUT);
        pinMode(buttonPin, INPUT);
     

    }

    void loop() {
      // put your main code here, to run repeatedly:
      analogWrite(led, brightness);
      analogRead(buttonPin);
      if (buttonState = 1);
    analogWrite (led, 128);
    analogWrite(led, brightness);
      analogRead(buttonPin);
      if (buttonState = 1);
    analogWrite (led, 256);

         
        }
     
       
     
     
     
  2. mcureenab

    mcureenab Гуру

    счётчик нажатий надо и собственно обработка нажатия.
    их у вас нет.
    счётчика нет совсем. а вместо нажатия переход состояния отпущена -> нажата) обрабатывается удержание кнопки.

    как в buttonState попадает значение analogRead? и почему это не digitalRead и к чему
    всегда истинное выражение с пустой реакцией

    if(buttonState=1);

    Короче, почитайте про C++ хотя бы чуть-чуть. Разберите примеры скетчей.
    У вас нет понятия об операторе присваивания = и сравнения на равенство ==.

    нет понятия о составных операторах в {}.
     
  3. Tomasina

    Tomasina Сушитель лампочек Модератор

    Это не сравнение, а присваивание переменной buttonState значения 1.

    Это равноценно digitalWrite(led, LOW);
    Т.е. у тебя светодиод будет либо светить вполсилы (128), либо вообще не светить (256).
     
  4. ostrov

    ostrov Гуру

    Для справки. Максимальное 8-битное значение 255, а при 256 оно снова становится 0.
     
    Последнее редактирование: 17 июн 2017
  5. olegoriy

    olegoriy Гик

    Я делаю проще: к примеру если z = 0 то светодиод не горит, z = 1 светодиод горит на 128, z = 3 светодиод горит на 255. А кнопкой переключаем z. То есть z = z + 1.
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    Тогда можно ещё проще:
    Код (C++):
    static boolean z = !z;
    analogWrite(pin, 255 - z * 127);
     
  7. Может вложенный цикл?
     
  8. Arkad_snz

    Arkad_snz Гик

    О! Оказывается тут кто-то знаком с приемами программирования манипуляцией состояниями! М.б. вам доводилось программировать машины Поста/Тьюринга?
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    а что сложного?
    В базовом варианте - переменная byte state и оператор switch ... case.
     
  10. Arkad_snz

    Arkad_snz Гик

    Сложно не применение операторов.
    Сложно при построении алгоритма думать о состояниях вычислительной системы.
    Приходят в универ вчерашние школьники, наслушавшиеся школьной информатики, задаю построить простенький алгоритм - мыслят жонглированием переменными (присвоениями, формулами) так, как будто всю жизнь писали на бейсике и фортране. "SET" у них на лбу выжено клеймом намертво!
     
  11. qwone

    qwone Гик

    Это как раз не очень сложно. Сложно придумать саму вычислительную машину и ее вычислительный аппарат. Да при построении алгоритма надо вспоминать времена английских глаголов. Есть пефект, есть континио, а есть перфект континио
     
    arkadyf нравится это.