Всем привет!
В системах мониторинга бывает не лишним получить на компьютер (запросить из консоли Linux) параметры с датчиков, подключаемых к МК Ардуино. Несмотря на кажущуюся простоту, задача имеет подводный камень в виде перезагрузки микроконтроллера каждый раз при попытке отправить на него данные.
Первое и очевидное: чтобы из консоли Linux отправить команду для начала нужно убедиться в наличии необходимых драйверов в ядре и самого устройства (/dev/ttyUSB0)
Затем, необходимо сконфигурировать интерфейс при помощи команды:
# stty -F /dev/ttyUSB0 ispeed 9600 ospeed 9600 -ignpar cs8 -cstopb -echo -hupcl nl
Делается каждый раз при подключении Arduino к компьютеру.
Обрабатывать команды отправляемые из консоли можно примерно так (будем плавно зажигать и гасить светодиод на 3-ем пине):
int angle = 0; void setup() { // initialize serial: Serial.begin(9600); pinMode(3, OUTPUT); } void lights(int action) { int multiplier; if (action == 0) { angle = 90; multiplier = -1; } else { angle = 0; multiplier = 1; } for(;;) { angle += multiplier; analogWrite(3, 255*sin(angle*(PI/180))); if (angle == 0 || angle == 90) { break; } delay(10); } } void loop() { // if there's any serial available, read it: while (Serial.available() > 0) { // look for the next valid integer in the incoming serial stream: int state = Serial.parseInt(); //Serial.println(Serial.read()); // look for the newline. That's the end of your sentence: if (Serial.read() == '\n') { if (state == 1) { lights(1); } else { lights(0); } Serial.println("OK"); } } delay(10); }
# echo "1" > /dev/ttyUSB0 | head -1 /dev/ttyUSB0
# OK
#
root4root aka admin
Добавить комментарий
X