2017-01-14 18 views
0

Я делаю простую программу Arduino, которая включает в себя связь I2C для Slave-Master между 2 подразделениями Arduino. Мастер Arduino имеет сервомотор, прикрепленный к нему, и подчиненный возвращает запрос на 6 байтов, возвращая сообщение с шестью байтами. Я хочу, чтобы сервомотор включался всякий раз, когда отправляется сообщение с 6 байтами, но я хочу, чтобы он переставал поворачиваться, если отправлено сообщение длиннее или короче 6 байт. До сих пор, я написал этот код для мастера:Управление сервомотором на основе символов

// Demonstrates use of the Wire library 
// Reads data from an I2C/TWI slave device 

#include <Wire.h> 
#include <Servo.h> 

Servo servo1; 

void setup() { 
Wire.begin();  // join i2c bus (address optional for master) 
Serial.begin(9600); // start serial for output 
servo1.attach(9); 
} 

void loop() { 
Wire.requestFrom(8, 50); // request 6 bytes from slave device #8 

while (Wire.available()) { // slave may send less than requested 
char c = Wire.read(); // receive a byte as character 
Serial.print(c);   // print the character 
if (char c = 150) 
{ 
    servo1.write(180); 
} 
else { 
    servo1.write(90); 
} 
} 

delay(500); 
} 

Теперь, когда подчиненное устройство посылает сообщение «привет», независимо от длины символа, двигатель работает на полной скорости. Что я сделал не так? Благодарю.

ответ

1
if (char c = 150) 

Неправильная версия. Пожалуйста, убедитесь, что вы понимаете разницу между назначением и реляционными операторами.

https://en.wikipedia.org/wiki/Relational_operator#Languages

если вы хотите проверить, если с равно 150 вы должны написать if(c == 150)