Помогите пожалуйста с простым скетчем

Uksus
Offline
Зарегистрирован: 16.09.2014

Помогите пожалуйста. Пытаюсь освоить Arduino, а за одно и основы С.
Задача простая.
Есть светодиод подключенный к 9 ноге(ШИМ) и кнопка 2 нога.
Требуется по нажатию кнопки плавно зажечь светодиод, а по отпусканию потушить.

// задаем константы
const int buttonPin = 2;     // номер входа, подключенный к кнопке
const int ledPin =  9;      // номер выхода светодиода

// переменные
int buttonState = 0;         // переменная для хранения состояния кнопки
int volume; 

void setup() {
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT); 
  digitalWrite(buttonPin, HIGH);      // включаем подтягивающий резистор
  volume = 0;
}

void loop(){
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW && volume<100) {    
     volume++; 
     analogWrite(9, volume);
     delay(20);
     }
     else {
     volume=0;
     analogWrite(9, volume);
     }
}

Не пойму почему светодиод зажигается и тухнет хотя кнопка нажата?

Пушной звер
Пушной звер аватар
Offline
Зарегистрирован: 17.03.2013

а где плавное уменьшение значения в переменной volume ??

где защита от переполнения переменной?

почему она int, когда достаточно byte?

Uksus
Offline
Зарегистрирован: 16.09.2014

Плавное уменьшение не делал по причине наглядности, "byte volume;" - каюсь не задумался.
Спасибо за помощь. Получилось так:

 


// задаем константы
const int buttonPin = 2;     // номер входа, подключенный к кнопке
const int ledPin =  9;      // номер выхода светодиода

// переменные
int buttonState = 0;         // переменная для хранения состояния кнопки
byte volume; 

void setup() {
  Serial.begin(9600);
  Serial.println("**************************************");
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT); 
  digitalWrite(buttonPin, HIGH);      // включаем подтягивающий резистор
  volume = 0;
}

void loop(){
  buttonState = digitalRead(buttonPin);

  if (buttonState == LOW && volume<100) {  // если кнопка нажата и яркость не полная 
     volume++; 
     analogWrite(9, volume);
     Serial.print("volume ");
     Serial.println(volume, DEC);
     delay(20);
          }
     else if (buttonState == LOW && volume==100) { // если кнопка нажата и полная яркость
       analogWrite(9, volume);
     Serial.print("volume ");
     Serial.println(volume, DEC);
     delay(20);
     }
     else {                              // если кнопка не нажата
     volume=0;
     analogWrite(9, volume);
     if(volume == 0)
        Serial.print("volume ");
        Serial.println("OFF");
     }
}