есть вопрос по команде tone

woofmaster
Offline
Зарегистрирован: 29.11.2016

Здраствуйте, понадобилось управлять командой tone через компьютер, с помощью простенького скетча. Но возникла проблема, не могу задать частоту выше 255 герц, не могли бы помочь советами как это обойти)

int wavepin = 12;

void setup()
{
Serial.begin(9600);
}

void loop()
{
if (Serial.available())
{
wave = Serial.read();
tone(wavepin, wave);
}
}

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вероятно Вы определяете wave как byte. Попробуйте int.

woofmaster
Offline
Зарегистрирован: 29.11.2016

Пробовал и byte и int, результат не изменился, это может быть изза функции Serial.read? Если я правильно понял, она читает один байт из буфера

Nosferatu
Offline
Зарегистрирован: 04.11.2012

woofmaster пишет:
Пробовал и byte и int, результат не изменился, это может быть изза функции Serial.read? Если я правильно понял, она читает один байт из буфера

Вероятно. Используйте Serial.parseInt()

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну да.

Скетч опубликован в явно неработоспособном виде, поэтому откуда знать, что там еще пропущено.

woofmaster
Offline
Зарегистрирован: 29.11.2016

Попробую, отпишусь, ноута рядом нет, спасибо ответившим)

woofmaster
Offline
Зарегистрирован: 29.11.2016

Всем спасибо, все получилось как нужно))

int wavepin = 12;

void setup() {
Serial.begin(9600);
}

void loop() {
int wave;

if (Serial.available()) {
wave = Serial.parseInt();
tone(wavepin, wave);
}
Serial.write(4);
delay(1000);
}

woofmaster
Offline
Зарегистрирован: 29.11.2016

Еще еще пара вопросов есть, что бы новую тему не создавать)) Как можно заставить ардуину реагировать только на определенные команды с сериал порта? Команды длинные, около 16 байт. Копал в сторону Serial.find но так и не понял как эта команда работает((

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А Ардуина всегда реагирует только на определенные команды - только на те, реакцию на которые Вы явно прописали в коде.

PS. Не думаю, что Serial.find здесь поможет. Она, скорее, предназначена для разбора ответа http сервера или чего-то подобного, когда в очень длинной строке нужно найти определенный фрагмент.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

woofmaster пишет:
Еще еще пара вопросов есть, что бы новую тему не создавать)) Как можно заставить ардуину реагировать только на определенные команды с сериал порта? Команды длинные, около 16 байт. Копал в сторону Serial.find но так и не понял как эта команда работает((

Если вы перед вызовом Serial.find() вызываете сначала Serial.parseInt(), то буфер порта отчищается,  пока не встретятся цифры. Вы не показали как вы делали, можно только гадать, что там у вас не получается.

woofmaster
Offline
Зарегистрирован: 29.11.2016

есть такие команды, 4 цифры после p4c= и есть нужные мне hex данные, как сделать что бы ардуина реагировала на какую либо из этих команд, преобразовывала hex значение в десятичное и отправляла в скетч выше. Был бы признателен))

woofmaster
Offline
Зарегистрирован: 29.11.2016

Или хотя бы подскажите, в какую сторону копать, как выделить из этих строк hex значения.

Nosferatu
Offline
Зарегистрирован: 04.11.2012

Копайте в сторону  Serial.readString() и функций для работы со строками.