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

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

голосовой контроль RGB пикселей

Доброго дня.

Имеется в наличии следующий голосовой модуль: http://www.ebay.com/itm/Voice-Recognition-Module-Arduino-Compatible-with-USB-TTL-module-/130766424140?pt=LH_DefaultDomain_0&hash=item1e7249484c

Arduino UNO,  Adafruit RGB pixels:  http://learn.adafruit.com/36mm-led-pixels и готовая библиотека для них.

Как записать переменную типа float в EEPROM

Не получается записать и прочитать переменную типа float  - например 3.5. Пытаюсь через промежуточную переменную типа int  умножая переменную типа float на 10, но причтении и делении на 10 теряются знаки после запятой. В библиотеке EEPROM с записью float не могу разобраться. Как правильно сделать?

int val;
float VAL;
val = VAL*10;

EEPROM.write(31, val);
delay(50);
///////////////

val = EEPROM.read(31);
VAL = val/10;

 

Приращение (уменьшение) на 0.1

С приращением на единиу вопросов нет

val++; или val--;

A как записать условие для приращения на 0.1  Переменная  float.

Управлять нагрузками через локалку

Здравствуйте !

Имею 2 Arduino UNO R3 + 2 Ethernet W5100 шилда, задача по локалке при помощи кнопок или галетного переключателя, переключать 8 реле. Впринципе насколько я понимаю ничего сложного, но я пока до этого не дорос :( Может быть кто поделиться готовый скетчем ? Впринципе я нашел подобное, но там немного под другие шилды и не могу скомпелировать под свое железо :( т.к. знаний пока маловато :(

Чтение данных из 16-ти битного регистра

Не получается считать значение из счетного регистра TCNT1. Из старшего байта все время считывается 0.

Испльзую дуемиланову, причем пробовал с атмегой8 и атмегой328 и везде одно и тоже. Вот скетч:

Не всегда обрабатывается конструкция switch-case

#include <Wire.h>
#include <DS1307.h>

void setup()
{  
  Serial.begin(9600); 
  Wire.begin();
  delay(1000);
}

void write_RTC() {
  char value=0;
  char command=0;
  command = Serial.read();
  delay(50);				
  value=byte((Serial.read()-48)*10); 	
  delay(50);
  value+=byte((Serial.read()-48));		
  switch (command) {
  case 'h' :
    RTC.set(DS1307_HR,value);
    Serial.print("hours set to ");
    Serial.println(value,DEC);
    break;
  case 'm' :
    RTC.set(DS1307_MIN,value);

Обработка строк в запросе

Делаю управление Ардуины через браузер. Соответственно нужно обрабатывать запросы браузера. Сравнивать строки и при свападении нужных выполнять какие либо действия, это без проблем:

if(request=="/led1-off") digitalWrite(ledPin1, LOW);

Но вот если пошимировать, или изменить какие либо переменные, на это не хватает тяму. информации на http://arduino.ru/Reference/StringObject практический нет, а скудные знания английского не позволякют обращаться к соответсквующим справочникам, на том же http://arduino.cc/en/Reference/StringObject.

Хитрая выборка из массива

Осваиваю светодиодную матрицу 8*32 (будет состоять из 4 одинаковых биколорных матриц 8х8). 

Сделал массив (одним битом кодирую строку в матрице, нечетные биты будут "рулить" красными светодиодами, четные - "зелеными", поэтому строка - 8 бит, по 2 бита на каждую физическую матрицу 8х8):

Тот байт, что выделен синей рамочкой выбирается просто: array[7-row][4]

Помогите разобрать if условие



if (strcmp(command, "led-low") == 0)

 

Помогите пожалуйста усовершенствовать условие, необходимо выполнять условие если мы нашли не только led-low но и led-low после которого могут быть любые дургие символы.

 

Arduino Ethernet висней из за большого колиества if esle


Сначало хотел выложить только отрыво, но подумал этого будит мало. Ниже выложил код. Все это хорошо работает. Но на днях в Command dispatcher я добавил около 20 похожих else if с условиями, и Arduino Ethernet отказался вообще грузить страницу, иногда загружает но только на половину. Если же таких условий около 15. Все работает. Подскажите пожалуйста что делать.