Помогите пожалуйста с простым скетчем
- Войдите на сайт для отправки комментариев
Втр, 16/09/2014 - 20:24
Помогите пожалуйста. Пытаюсь освоить 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);
}
}
Не пойму почему светодиод зажигается и тухнет хотя кнопка нажата?
а где плавное уменьшение значения в переменной volume ??
где защита от переполнения переменной?
почему она int, когда достаточно byte?
Плавное уменьшение не делал по причине наглядности, "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"); } }