Помогите написать простенькую программу.
- Войдите на сайт для отправки комментариев
Ср, 15/06/2016 - 00:46
Помогите написать код: при кручении потенциометра по часовой стрелке один светодиод увеличивает яркость, а второй наоборот - уменьшает.
поможем конечно, давай свой код... или давай
void setup { } void loop { }я начну...
поможем конечно, давай свой код... или давай
void setup { } void loop { }я начну...
Типа крестики-нолики или морской бой?
Вроде как так.
.
поможем конечно, давай свой код... или давай
void setup { } void loop { }я начну...
Вот мой код, но он только для 1 диода.
// даём имена пинов со светодиодом // и потенциометром #define led 9 #define pot A0 void setup() { // пин со светодиодом — выход pinMode(led, OUTPUT); // пин с потенциометром - вход pinMode(pot, INPUT); } void loop() { // объявляем переменную x int x; // считываем напряжение с потенциометра: // будет получено число от 0 до 1023 // делим его на 4, получится число в диапозоне // 0-255 (дробная часть будет отброшена) x = analogRead(pot) / 4; // выдаём результат на светодиод analogWrite(led, x); }продолжаем...
#define pin_2 A1 #define pin_3 A2 #dafine pin_1 A0 void setup { pinMode(pin_led_1,OUTPUT); pinMode(pin_led_2,OUTPUT); pinMode(pin_pot,INPUT); } void loop { int val = analogRead(pin_1); analogWrite(pin_2, val / 4); analogWrite(pin_3, (1023 - val) / 4); }ну пины свои поставь...
продолжаем...
#define pin_2 A1 #define pin_3 A2 #dafine pin_1 A0 void setup { pinMode(pin_led_1,OUTPUT); pinMode(pin_led_2,OUTPUT); pinMode(pin_pot,INPUT); } void loop { int val = analogRead(pin_1); analogWrite(pin_2, val / 4); analogWrite(pin_3, (1023 - val) / 4); }ну пины свои поставь...
Загрузил вот такой код, не работает.
#define led 9 #define pot A0 #define led2 11 void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(pot, INPUT); } void loop() { int x = analogRead(pot) / 4; analogWrite(led, x / 4); analogWrite(led2, (1023 - x) / 4); }Два раза на 4 зачем дЕлите?
У вас диапазон для первого леда получается 0 - 64, для второго 255 - 191
Загрузил вот такой код, не работает.
#define led 9 #define pot A0 #define led2 11 void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(pot, INPUT); } void loop() { int x = analogRead(pot) / 4; analogWrite(led, x / 4); analogWrite(led2, (1023 - x) / 4); }Ну это не совсем правда. Он работает, просто не особо заметны изменения. Выше в посте уже было написано. Из вот этой строки
нужно убрать "/4".
с A0 вы получаете значение в диапазоне 0-1023, а на пины 9 и 11 выдавать должны 0-255, в итоге просто при подаче на пины вы и делите полученные 0-1023 на 4 и получаете 0-255. Перейдите выше по ссылкам на функции analogRead() и analogWrite(), там все описано.
void loop() { int x = analogRead(pot) / 4; analogWrite(led, x / 4); analogWrite(led2, (1023 - x) / 4); }Ну это не совсем правда. Он работает, просто не особо заметны изменения. Выше в посте уже было написано. Из вот этой строки
нужно убрать "/4".
с A0 вы получаете значение в диапазоне 0-1023, а на пины 9 и 11 выдавать должны 0-255, в итоге просто при подаче на пины вы и делите полученные 0-1023 на 4 и получаете 0-255. Перейдите выше по ссылкам на функции analogRead() и analogWrite(), там все описано.
Логичнее и красивее сначала поделить....
void loop() { int x = analogRead(pot) / 4; analogWrite(led, x ); analogWrite(led2, (255 - x)); }Загрузил вот такой код, не работает.
#define led 9 #define pot A0 #define led2 11 void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(pot, INPUT); } void loop() { int x = analogRead(pot) / 4; analogWrite(led, x / 4); analogWrite(led2, (1023 - x) / 4); }Ну это не совсем правда. Он работает, просто не особо заметны изменения. Выше в посте уже было написано. Из вот этой строки
нужно убрать "/4".
с A0 вы получаете значение в диапазоне 0-1023, а на пины 9 и 11 выдавать должны 0-255, в итоге просто при подаче на пины вы и делите полученные 0-1023 на 4 и получаете 0-255. Перейдите выше по ссылкам на функции analogRead() и analogWrite(), там все описано.
Исправил, всё равно плохо работает, при максимальном значении потенциометра диод не тухнет.
выводите в сериал значения которые у вас получаются при максимальном потенциометре, и отрегулируйте диапазон функцией map http://arduino.ru/Reference/Map
Куда регулировать то, я просто новичок в программировании пока. С таким кодом всё тоже самое
#define led 9 #define pot A0 #define led2 11 void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(pot, INPUT); } void loop() { int val = analogRead(pot); int val2 = analogRead(pot); val = map(val, 0, 1023, 0, 255); analogWrite(led, val); val2 = map(val2, 0, 1023, 255, 0); analogWrite(led2, val2); }просто когда у Вас потенциометр выкручен полностью у Вас на вход приходит не 0, а скажем 400, попробуйте в строках 16 и 18 вместо первого 0 подставлять значения 200,300,400,500 пока не получите желаемый результат
Видимо "SuperTesto" нужно более конкретное описание действий. Ну не всем охото рыться долгое время в источниках нужной инфы, чтобы сделать простенькую програмку. Поэтому напишу более развернуто.
Сперва залейте такой скетч и откройте монитор компорта(в верхнем правом углу arduino IDE).
#define led 9 #define pot A0 #define led2 11 void setup() { pinMode(led, OUTPUT); pinMode(led2, OUTPUT); pinMode(pot, INPUT); Serial.begin(9600); } void loop() { int val = analogRead(pot); Serial.print("P ---> "); Serial.println(val); val = map(val, 0, 1023, 0, 255); analogWrite(led, val); analogWrite(led2, 255 - val); //delay(1000); }Должны приходить значения в диапазоне 0-1023 приходящие с потенциометра(правда будет спамить. Если спам мешает, то раскомментируйте строку //delay(1000);). Выкрутите потенциометр до предела на минимум - посмотрите что приходит на компорт, потом выкрутите до максимума - снова гляньте значения в компорту. В принципе это и есть ваш "реальный" диапазон. От него и нужно отталкиваться. Если дальше не получится, то пишите.
P.S. а да, я выкинул из вашего кода все касающееся val2. У вас данные приходят с одного потенциометра. Просто первый светодиод у вас будет увеличивать яркость симметрично возрастанию значения на потенциометре(от 0 до 255), а второй наоборот это полученное значение будет отнимать от маскимума и уменьшаться(от 255 до 0).