Форум по Роботика
Контролери => Ардуино (Arduino) => Темата е започната от: zoro1 в Ноември 07, 2010, 12:34:28 pm
-
Крайно време е в портала да се появи един подфорум озаглавен "Контролери за роботи" и в него да има и една тема за Ардуиното...
Но както и да е Боби ще с епогрижи надявам се.На въпроса
Използвам ардуино с атмега8 и генерирам 2 PWM управлявани от два аналогови с два потенциометъра.кода е следния:
int ledPin1=10;
int ledPin = 9; // LED connected to digital pin 9
int analogPin = 1; int val = 0;
int analogPin2 = 2;int v1=0;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPin1,OUTPUT);
}
void loop()
{
{
val = analogRead(analogPin); // read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
v1=analogRead(analogPin2);
analogWrite (ledPin1,v1/4);
}
Проблема е ,че като въртя който и да е от потенциометрите силата на светене се променя и на двата канала едновремеено.А трябва да е различно.Някой да има идея къде съм оплел конците?
-
Пробвай така:
const int ledPin1=10;
const int ledPin = 9; // LED connected to digital pin 9
int analogPin = 1;
int analogPin2 = 2;
int val = 0;
int v1=0;
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPin1,OUTPUT);
}
void loop(){
val = analogRead(analogPin);
v1=analogRead(analogPin2);
{ // мисля че това е излишно но не съм сигурен немога да го тествам сега.
// read the input pin
analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
analogWrite (ledPin1,v1/4);
}
-
Проблема си остава и с твоя код.
-
Проблема си остава и с твоя код.
По кода няма грешка,a като махнеш скобата която съм писал че не и е там мястото дава ли ти ерор?
Да не би да не си свързал нещо неправилно ?
-
A ,то по кода грешка няма ,то и на моя код грешка няма ,но не работи както трябва.По скоро не работи както искам .
Схемата е следната :
на аналоговите пинове 1 и 2 имам закачен средната точка на по един потенциометър 4,7К.
на двата изхода имам два оптрона и два ирфз-а по 100А.Идеята е да се управляват двата шима по отделно ,всеки от собствения си потенциометър.
В действителност ако оставя единия потенциометър на максимум/тестовите лампи и на двете са угасени/ ,при завъртане на другия потенциометър започват да палят и двете.Аналогично и с другата част.
А бре май се оправих.Сложих допълнителни резистори на входовете към маса по 10к и работата тръгна.Защо -не знам,но пък вече работи....
-
Това ми намирисва на някаква врътня със самия език на Ардуино, но понеже не съм ползвал не знам точно, разгледай описанието на функцията дали има някакви забележки.
-
При ардуино има един бъг с аналоговите портове :когато на един от портовете е високо а на другият няма конекция към GND процесора го взима за свободен и неговата стоиност се изравнява с тази на саседният решението е просто към едниният крак(на потенциометърът) задължително трябва да имаш +5 а на другия GND и както вече си го вързал средният на аналоговият крак
-
Махни двата реда:
pinMode(ledPin, OUTPUT); // sets the pin as output
pinMode(ledPin1,OUTPUT);
те не ти трябват , когато използваш пиновете като PWM.
Също добави и някакво малко забавяне след analogWrite,примерно 20 милисекунди няма да ги усетиш.
Това е.
-
Сега пак се регулират два канала от един тример.
Същия код който преди май бачкаше сега не ще.Утре ще погледна хардуера ,нещо да не съм объркал там.
Ето кода:
const int ledPin = 9;
const int analogPin =4;
const int analogPin1=2;
const int analogPin2=3;
int val = 0;
const int led1=10;
const int led2=11;
int val1=0;
int val2=0;
void setup()
{
}
void loop()
{
{ val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
}
{
val2 = analogRead(analogPin2);
analogWrite(led2, val / 4);
}
{
val1= analogRead (analogPin1);
analogWrite(led1,val1/4);}
}
-
Така и не ми стана ясно как точно са вързани потенциометрите. Във всеки случай, свързват се: единият край към Vcc, другият на GND, а средната точка към аналоговия вход. За да имаш адекватен делител на напрежение. Иначе се получават много странни ефекти... Това свързване важи и ПИК-овете.
-
Така де +5,сигнал,маса.И пак се държи странно.Увеличих каналите на 3 и съвсем се сбозиха нещата...
-
Аз при такива проблеми правя следното: вместо директно на диодите, стойностите показвам през RS-232. Така ще се види как се държи при завъртане на всеки потенциометър.
-
int val1=0;
int val2=0;
void setup(){
}
void loop(){
val1 = analogRead(4);
val2 = analogRead(2);
val1 /= 4;
val2 /= 4;
analogWrite(9, val1);
delay(30);
analogWrite(10, val2);
delay(30);
}
Ето това ,благодарение на Vlado работи,с добавянето и на трети канал няма проблем.
остава да се тества в реална обстановка.
Благодаря на отзовалите се.