Программирование

Вопросы по программированию Arduino.

виртуальная клавиатура на usb host shield

Всем привет!
 
я только начал изучать ардуино и решил сделать виртуальную клавиатуру для компьютера с подсветкой двух кнопок. Как подклчать кнопки и светодиоды я уже разобрался, а вот с кодом не в ладах.
 
Основа для проекта была взята отсюда:
 
http://www.practicalarduino.com/projects/virtual-usb-keyboard
 
что я нажимаю и что должно загореться:
 

Гироскоп-Акселерометр GY-521 (на MPU-6050). Пара вопросов.

Здравствуйте. Разбираюсь со скетчем-примером.

а) С 16 по 21 строку говорится, что устройству назначен адрес 0x68, а что такое адрес 0x69 там-же и для чего он нужен?

б) О чем говорится в строке с 64 по 84? Понимаю, что вывод в сериал, но может с какими-то нюансами?

Остальное все более-менее понятно.

Зависает цикл while

День добрый много уважаемая публика

Суть проблемы такая. есть пустой цикл

while(TWIbusy);

TWIbusy  это моя переменная. которая во премя работы TWI не равна нулю. При посылки на шину сигнала STOP данная переменная в обработчике прерывания ставится равной 0 и следовательно условие уже не выполняется. цикл должен прекратиться. но этого не происходит. Тоже самое с циклом for(;TWIbusy;);

Вопрос по оптимизации кода

Всех с Новым Годом! Мужики, подскажите такой момент: использую SIM900 для мониторинга и в коде существуют штук 6 функций для отправки СМС типа:

Оптимизация

#include <OneWire.h>
OneWire  ds(10); 
void setup(void) {
  Serial.begin(9600);
}
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
  if ( !ds.search(addr)) {
    ds.reset_search();
    return;
  }
  type_s = 0;
  ds.reset();
  ds.select(addr);
  ds.write(0x44, 1);   
  delay(200);
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);
  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  int16_t raw = (data[1] << 8) | data[0];

Пульсация сигнала при analogread

Доброе время суток ... ситуация - собираю тестовую схему в Протеусе , все просто : на 9 пин вешаю светодиод и управлятью им по analogWrite . при подаче сигнала светодиод мерцает с непостоянной частотой

код простой как топор :

void setup() {
}

void loop() {
  analogWrite(9, 125);
}

если выставить уровень 255 - стоит четко, не мигая

где я туплю ?

Ребят помогите смешать скетчи!!!

Ребят помогите смешать скетчи, при правильной работе, буду очень благодарен, возможно поощрю. P.s. Arduino nano. Если нужно больше информации спрашивайте.

Управление частотой и скважностью ШИМ-сигнала

Добрый день, коллеги!

Прошу у Вас совета по управлению высокочастотным сигналом.

Проблема следующая: Требуется получить световые импульсы (светодиода, лазера и проч. источников) с частотой от 0 до 10 000 Гц, при этом время импульса должно быть управляемым. Импульсы нужны прямоугольные, как на рисунке:

На ум сразу пришло два пути:

Мерцание LCD

Помогите пожайлуста:

Проблемма мерцает LCD, не так чтобы особо, но если присмотрется  мерцание видно. Кусок кода отвечающий за вывод на экран ниже - как я понимаю если  смомента последнего вывода на экран переменные StepFred  и fred не изменят своего значения к LCD обращения не должно быть вообще.

Все компилируется и прекрасно работает.

По факту надписи Fred и Step совершенно не мерцают, а цифры довольно сильно(особенно если сбоку смотреть)...

Приведение типов. Как можно обмануть компилятор?

Доброго времени суток!

Есть бинарный массив, напрмер:

byte buffer[] = { 0x15, 0x1, 0x0, 0x0, 0x0, 0x3, 0x11 }

Мне необходимо взять первые 4 байта и перевести их в число unsigned long

unsigned long *ptrBuffer = &buffer;

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

ЗЫ. Понимаю что можно сделать так