2015-01-14 1 views
0

Я сделал схему, включающую 3 строки светодиодов. Предполагается, что изначально они должны светиться с низкой интенсивностью.Светодиодные струны, прикрепленные к Arduino, запрограммированные на более яркий свет один за другим, перестают работать после 4 циклов.

Теперь, когда штырь 2 на Arduino переходит на HIGH на мгновение, светодиодные струны светятся один за другим, а затем останавливаются. И, если контакт 2 поддерживается HIGH, переход должен продолжаться до тех пор, пока контакт 2 HIGH.

Проблема в том, что если я делаю вывод 2 HIGH постоянно с помощью кнопки, переход происходит 4 раза, а затем останавливается. После этого переход не происходит, даже если я снова сделаю вывод 2 HIGH через некоторое время.

код приведен ниже:

const int pin1 = 9; 
const int pin2 = 10; 
const int pin3 = 11; 
const int button = 2; 
int val = 0; 
//int brightness = 0; 

void setup(){ 
    Serial.begin(9600); 
    pinMode(pin1, OUTPUT); 
    pinMode(pin2, OUTPUT); 
    pinMode(pin3, OUTPUT); 
    pinMode(button, INPUT); 
} 

void loop(){ 

    while(true) 
    { 
    val = digitalRead(button); 

    if(val == HIGH) 
    { 
     if(Serial.available()) 
     { 
     long int brightness = Serial.read(); 

     analogWrite(pin1, 255); 
     delay(1000); 

     analogWrite(pin2, 255); 
     delay(1000); 

     analogWrite(pin3, 255); 
     delay(1000); 

     analogWrite(pin1, brightness); 
     analogWrite(pin2, brightness); 
     analogWrite(pin3, brightness); 
     delay(1000); 
     } 
    } 
    } 
} 
+0

Я не уверен, я полностью понимаю, что вы пытаетесь сделать, но я могу сказать вам, что 'в то время (правда)' петли полностью бесполезен, поскольку функция цикла уже является такой петлей. Также Serial.read возвращает int, а не long int. Я бы предположил, что ваша проблема заключается в последовательном общении. Можете ли вы описать, что вы подразумеваете под «а затем остановитесь» и «переход должен продолжаться» (значение яркости перехода низкой яркости перехода завершено, а затем?). Может быть, в последовательном буфере недостаточно или слишком много данных? – Thomas

+0

См. ... Что мне нужно сделать, это сделать 3 концентрических круга светодиодных струн. Существует кнопка. Первоначально все светодиоды должны светиться с интенсивностью 50%. Когда нажата кнопка, самый внутренний круг светодиодов должен светиться со 100% интенсивностью, затем второй круг должен делать то же самое, а затем самый внешний круг и, наконец, все светодиоды должны снова ослабевать до 50% интенсивности. Кроме того, если кнопка удерживается нажатой, переход, который является радиально наружным увеличением интенсивности светодиодов, должен повторяться до тех пор, пока кнопка не будет нажата. – CordlessBrain

+0

Проблема, с которой я сталкиваюсь, заключается в том, что если я нажимаю кнопку, происходит переход. Это работает ровно 4 раза, и после этого интенсивность светодиодов уменьшается примерно до 25%, и дальнейшее переключение кнопки не влияет. – CordlessBrain

ответ

0

Если вы действительно хотите, чтобы настроить яркость затемненной после каждого сброса вашего Arduino, вы должны изменить свой источник таким образом, что чтение из последовательного порта не заблокировать переход, в то же время убедившись, что ваш «яркость» имеет предопределенное значение:

// global variable with preset value  
long int brightness = 64; 

// loop function 
// http://arduino.cc/en/pmwiki.php?n=Reference/Loop 
void loop(){ 
    // check for new brightness value 
    if(Serial.available()) 
    { 
     int brightness = Serial.read(); 
    } 
    // check for pressed button 
    val = digitalRead(button); 
    if(val == HIGH) 
    { 
     // start light cycle 
     analogWrite(pin1, 255); 
     delay(1000); 

     analogWrite(pin2, 255); 
     delay(1000); 

     analogWrite(pin3, 255); 
     delay(1000); 

     analogWrite(pin1, brightness); 
     analogWrite(pin2, brightness); 
     analogWrite(pin3, brightness); 
     delay(1000); 
    } 
} 
+0

Перемещение выражения if на верхний уровень - хорошая идея, я должен снова задаться вопросом о 'while (true)' -loop. Это не нужно! Инициализация яркости с помощью 64 принадлежит 'setup()'. – Thomas

+0

Да, Томас, ты прав. Мое сообщение отредактировано, к сожалению, необходимая настройка переменной яркости не отражается в этом изменении, изменяя функциональность кода ...: / – sabuty

Смежные вопросы