Приветствую, уважаемые знатоки. Прощу помощи. Имеется задание. Написать код, с помощью которого можно контролировать период мигания светодиодом на плате через USB, не используя функцию delay. Вот что накалякал. Вроде как это " if (currentTimeStamp - previousTimeStamp > t)" должно отвечать за длительность периода, а тут " analogWrite(t, message.toInt()); " мы как раз-таки его задаем. Но не работает. Диод просто включается-выключается при любом значении. В чем может быть проблема? int ledPin = 13; int t = 1000; boolean ledState = HIGH; long previousTimeStamp = 0; String message; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { char incomingChar = Serial.read(); if (incomingChar >= '0' && incomingChar <= '9') { message += incomingChar; } else if (incomingChar == '\n') { analogWrite(t, message.toInt()); message = ""; } long currentTimeStamp = millis(); if (currentTimeStamp - previousTimeStamp > t) {previousTimeStamp = currentTimeStamp; ledState =! ledState; digitalWrite(ledPin, ledState); } } }
А тут вы пытаетесь управлять пином под номером '1000'. У Вас плата с тысячью пинами? PS: для вставки кода используйте тэг 'Код' и про форматирование не забывайте Код (C++): int ledPin = 13; int t = 1000; boolean ledState = HIGH; long previousTimeStamp = 0; String message; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { char incomingChar = Serial.read(); if (incomingChar >= '0' && incomingChar <= '9') { message += incomingChar; } else if (incomingChar == '\n') { analogWrite(t, message.toInt()); message = ""; } long currentTimeStamp = millis(); if (currentTimeStamp - previousTimeStamp > t) {previousTimeStamp = currentTimeStamp; ledState =! ledState; digitalWrite(ledPin, ledState); } } }
} }[/code][/QUOTE] Прошу прощения, впервые тут) Идея у меня такая, ввести переменную t, которой и будем обозначать период. Только никак понять не могу, как изменять ее в мониторе порта. Код (C++): int ledPin = 13; int t = 0; boolean ledState = HIGH; long previousTimeStamp = 0; String message; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { while (Serial.available()) { long currentTimeStamp = millis(); char incomingChar = Serial.read(); if (incomingChar >= '0' && incomingChar <= '9') { message += incomingChar; } else if (incomingChar == '\n') { t == message.toInt(); message = ""; } if (currentTimeStamp - previousTimeStamp > t) {previousTimeStamp = currentTimeStamp; ledState =! ledState; digitalWrite(ledPin, ledState); } } }
Так попробуйте: Код (C++): void loop() { long currentTimeStamp = millis(); if (Serial.available()) { char incomingChar = Serial.read(); if (incomingChar >= '0' && incomingChar <= '9') { message += incomingChar; } else if (incomingChar == '\n' || incomingChar == '\r') { t = message.toInt(); message = ""; } } if (currentTimeStamp - previousTimeStamp > t) { previousTimeStamp = currentTimeStamp; ledState = !ledState; digitalWrite(ledPin, ledState); } }