Всем доброго вечера! Подскажите, пожалуйста, в чем причина: подключаю к Arduino Mega через IO Shild датчики SHARP GP2Y0A02YK0F (датчик расстояния) и ИК детектор SEN0018. Оба они выдают какие-то странные данные при запуске программы. Цифры, совершенно не зависящие друг от друга, не имеющие периодичности или цикличности. Правда, дальномер выдает через каждые 2 цифры 0. Это закодированные сигналы? Или неисправные датчики? И Что делать? их 4 штуки таких!
скетч подобный? Код (Text): // // SHARP IR sensor testing // int IRpin = 0; // аналоговый пин для подключения выхода Vo сенсора void setup() { Serial.begin(9600); // старт последовательного порта } void loop() { // 5V/1024 = 0.0048828125 float volts = analogRead(IRpin)*0.0048828125; // считываем значение сенсора и переводим в напряжение float distance = 65*pow(volts, -1.10); // worked out from graph 65 = theretical distance / (1/Volts)S - luckylarry.co.uk Serial.println(distance); // выдаём в порт delay(100); // ждём } датчик аналоговый, то возможно причина случайных чисел в этом
код сначала был такой: #include <Servo.h>//Define Pinsint servoPin = 9;int distPin = 0;//Create Servo ObjectServo jeremysServo;void setup(){//Attaches the Servo to our objectjeremysServo.attach(servoPin);}void loop(){//Read the Distance Sensor and adjust valuesint dist = analogRead(distPin);int pos = map(dist, 0, 1023, 0, 180);//Turn the servojeremysServo.write(pos);} - выдает беспорядочно числа - 07516284006116298004816211100 потом пробовала: int _measure() { int val=0, tmp; for (byte i = 0 ; i < 5 ; ++i) { val += analogRead(sensorPin); delay(24); } return val/1024.0; } void loop() { float val =_measure(); } - при этом варианте выдает нули просто
если вам нужен сонар,то вот пример,но он на пинге! #include <Servo.h> //-------------------------------------- int minSweep = 45; int maxSweep = 135; int pingPin = 7; // ping int servoPin = 9; // servo //-------------------------------------- // System globals: Servo myservo; int pos = minSweep; int dir = 1; //-------------------------------------- void setup() { myservo.attach(servoPin); Serial.begin(9600); } //-------------------------------------- void loop(){ long cm, duration; myservo.write(pos); if (dir == 1){ if(pos < maxSweep){ pos += 1; } else{ dir = -1; } } else if(dir == -1){ if(pos > minSweep){ pos -= 1; } else{ dir = 1; } } pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(5); digitalWrite(pingPin, LOW); pinMode(pingPin, INPUT); duration = pulseIn(pingPin, HIGH); cm = microsecondsToCentimeters(duration); Serial.print(pos); Serial.print(" "); Serial.print(cm); Serial.println(); delay(15); } //-------------------------------------- long microsecondsToCentimeters(long microseconds) { return microseconds / 58; }
Попробуйте код от @dmitri — он дело говорит. Не очень понятно, что означает «код выдаёт» в ваших примерах, если там вообще не фигурирует передача данных по Serial.