Пришла ардуинка (duemilanove) за номером 185-спасибо за посылку. Играюсь с паяльником уже второй день 🙂
Но тут встал вопрос какую нагрузку ардуина может выдержать по току? наверное правильнее считать пределом-УСБ порт, точнее источник питания(тогда сколько УСБ держит)?
Второй вопрос, надумал крутить куллер от компа, но дуинка дает только 5V, надо усилить до 12V-какой транзистор ставить?
И третий вопрос: хочу сделать прогу с интерфейсом-двигаешь ползунок-больше напруга или меньше…Пишем прогу которая на КОМ порт кидает переменные, а в зависимости от них ардуинка пляшет. Только так?
Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…
0 комментариев на «“Истина где-то рядом…”»
второй вопрос отвалился. нашел более грамотное решение.
обратите внимание, что ток через один пин не должен превышать 40 mA.через L293
Т.е. можно подключить светодиод (через токоограничительный резистор), а что-то помощнее нужно подключать через промежуточный «драйвер» — транзистор, оптопару и т.д.
Так, например, управление моторчиком возможно
Да. Проще всего это реализуется через уже готовыйпротокол Firmata .
Спасибо, учтем 🙂
Ага! Задумка воплотилась в жизнь, радуя обладателя дуинки двумя ожогами и наконец-то абсолютно холодным транзистором(первый раз неправильно запаял-догадался тыкнуть пальцем).
Но новый затык с библиотекой SerialGate:
в самой программе код выглядит так:
if(m_13)
{
sg.Send(«255»,3);
}
else
{
sg.Send(«000»,3);
}
А на дуине такой код:
void loop ()
{
val = Serial.read(); // read the port
pinMode(11,OUTPUT);
analogWrite(11, val);
}
Диод почему-то всегда горит, притом переключая его в ноль по ШИМу -он горит, но в полсилы. Не могу сообразить, что не так?
🙂 выше я уже советовал использоватьготовый протокол Firmata 😉 эту простейшую реализацию . Там как раз используется SerialGate. Если внимательно прочитаете, то сразу же поймёте свой недочёт:
Разумеется всегда хочется изобрести что-то своё, но тогда посмотрите на
вы пишете в порт просто строчку символов («000» или «255»), которую ардуина считывает побайтово (‘0′,’0′,’0’ или ‘2’,’5′,’5′).
Т.о. значение, которое вы устанавливаете на 11 порту вовсе не 0 или 255, а ‘0’ или ‘2’.
мне показалось что значение то она правильно принимает, но оно обнуляется-так как сигнал в адуинку то я один раз шлю. хотя у вас опыта больше)
по этому скетчу как раз и делал-мне просто необходимо ШИМ значение передавать.
А с фирматой что-то туго. Что в Ардуинку то написать чтобы запустить скетч? А то ArduinoFirmataVB ругается что порт невозможно открыть(не КОМ, а дуиновский)
п.с. заранее спасибо. Ардуинка радует своей реалистичностью-написал код и сразу видишь что-то материальное… Но опыта программирования микроконтроллеров нету-поэтому шишки, но с улыбкой)
обычно заливают в Arduino стандатный Firmat-овский скетч:
Examples -> Firmata -> StandardFirmata
, который позволяет полностью управлять портами ардуины с компа.
Видимо незаметил или недокачал. Завтра после работы опробую, спасибо за совет
что-то никак. помогайте, в ардуине такой код:
int ledPin = 9;
void setup()
{
// begin the serial communication
Serial.begin(1200);
pinMode(ledPin, OUTPUT);
}
void loop()
{
byte val;
int k;
// check if data has been sent from the computer
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255)
val = Serial.read();
k=val;
if( val == ‘ ‘ || val == ‘ ‘ )
{
analogWrite(ledPin, 255);
delay(30);
analogWrite(ledPin, 0);
delay(30);
analogWrite(ledPin, 255);
}
else
{
analogWrite(ledPin, k);
// set the brightness of the LED
//analogWrite(ledPin, val);
}
}
}
Шлю на ком порт символы(чтобы передавать значения от 0 до 255), мардуинка должна переводить символ в число и зажигать диод ШИМом…
программный код такой:
procedure TForm1.Button1Click(Sender: TObject);
var
Str: String;
begin
Str := inttostr(TrackBar1.Position);
if NewLine_CB.Checked then
Str := Str + #13#10;
if not ComPort.Connected then ComPort.Open;
if ComPort.Connected then
ComPort.WriteStr(Str);
end;
Все работает-но не так как задуманно. При любом сигнале ардуина зажигает диод(на одинаковый уровень ШИМ).
притом имеется весьма интересный баг-если изменить скорость порта на 9600 диод горит еле заметно, при 1200 горит на полную.
чтобы развеять сомнения, кои у меня были:
включаем прогу шлем 100, диод горит, шлем 255-диод горит также… может быть переменная не обновляется? закрываем прогу, открываем снова-шлем 255, диод горит также как и при 100.
вставьте в скетч отладочные сообщения, которые будут писать в порт переданное значение. После этого воспользуйтесь стандартным монитором COM-порта, который есть в Arduino IDE.предыдущий комментарий .
Ещё раз перечитайте мой
УРА!!! Заработало, но как-то через файрвол, так сказать. Без вот этого не работает: «вставьте в скетч отладочные сообщения, которые будут писать в порт переданное значение», поэтому в мониторе КОМ порта куча лишнего муссора. Раздражает, но пока так, может попозже напишу статейки по Ардуине+Делфи, если на работе разгребу завалы