Ви не увійшли.
день добрый,
что значит "пременные значения пишутся друг, на друга"?
фотку что ли покажите )
https://github.com/adafruit/Adafruit-PC … CD8544.cpp
display.write( ) вроде перезаписывает цветом bg неиспользуемые пиксели. )
сделайте перед выводом display.clearDisplay();
Подскажите добрые люди! У меня на дисплее нокиа5111, пременные значения пишутся друг, на друга.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Software SPI (slower updates, more flexible pin options):
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
// Hardware SPI (faster, but must use certain hardware pins):
// SCK is LCD serial clock (SCLK) - this is pin 13 on Arduino Uno
// MOSI is LCD DIN - this is pin 11 on an Arduino Uno
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
// Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);
// Note with hardware SPI MISO and SS pins aren't used but will still be read
// and written to during SPI transfer. Be careful sharing these pins!
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH 16
volatile int rpmcount = 0;//see http://arduino.cc/en/Reference/Volatile
int rpm = 0;
unsigned long lastmillis = 0;
void setup() {
Serial.begin(9600);
// Инициализация дисплея
display.begin();
// Очищаем дисплей
display.clearDisplay();
display.display();
// Устанавливаем контраст
display.setContrast(50);
delay(1000);
attachInterrupt(0, rpm_fan, FALLING);//interrupt cero (0) is on pin two(2).
}
void loop() {
if (millis() - lastmillis == 1000)
detachInterrupt(0); //Disable interrupt when calculating
rpm = rpmcount; /* Convert frecuency to RPM, note: this works for one interruption per full rotation. For two interrups per full rotation use rpmcount * 30.*/
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.print("RPM: ");
display.write(rpm);
display.setCursor(0,8);
display.print("Hz: ");
display.write(rpmcount)
display.display();
rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Uptade lasmillis
attachInterrupt(0, rpm_fan, FALLING); //enable interrupt
}
void rpm_fan(){ /* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}
Т.к. у Вас китайський аналог сервопривода, она не поворачивается на 180°. У меня оригинальная итальянская серва, но у нее реальный диапазон 10°-170°.
Да и код можно опубликовать в читаемом виде
Пораджу, як програміст
Постав логи після кожної дії. Наприклад,
myservo.write(coef * (distance_sm - dead_zone));
Serial.print("distance_sm: "); Serial.println(distance_sm);
Serial.print("servo: "); Serial.println(coef * (distance_sm - dead_zone));
І заміни unsigned int на long - можливо проблеми з діапазоном чисел.
#include <Servo.h>
#define coef 10 //(коэффициент соответствия 10 градусов на 1см)
#define dead_zone 4
#define max_value 22
#define servoPin 10
#define Trig 9
#define Echo 8
#define ledPin 13
Servo myservo;
void setup()
{
pinMode(Trig, OUTPUT); //инициируем как выход
pinMode(Echo, INPUT); //инициируем как вход
pinMode(ledPin, OUTPUT);
myservo.attach(servoPin);
myservo.write(0);
}
unsigned int impulseTime=0;
unsigned int distance_sm=0;
void loop()
{
digitalWrite(Trig, HIGH); /* Подаем импульс на вход
trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(Trig, LOW); // Отключаем
impulseTime = pulseIn(Echo, HIGH); // Замеряем длину импульса
distance_sm = impulseTime/58; // Пересчитываем в сантиметры
if (distance_sm >= dead_zone && distance_sm <= max_value)
{
myservo.write(coef * (distance_sm - dead_zone));
}
else if (distance_sm < dead_zone)// если дистанция менее 4 см, серва в положении ноль градусов
{
myservo.write(0);
}
else
{
myservo.write(180);
}
delay(100); /* ждем 0.1 секунды,
Следующий импульс может быть излучён, только после исчезновения эха от предыдущего. Это время называется периодом цикла (cycle period). Рекомендованный период между импульсами должен быть не менее 50 мс.
*/
}
В общем хочу сделать так вот как тут https://www.youtube.com/watch?v=vEJSJSnEyIA ! Но у меня ничего не работает, серва как бы хочет стартануть но не может не ясно почему проблема в коде, тк по отдельности работает и сенсор и серво.
Оборудование :
MG 996R
Китайский аналог (adruino micro pro)
Cонар HC-SR04
Питание от блока питания на макетной плате.
В общем MG 996R - на 10
Cонар HC-SR04 - trig на 9, еcho на 8
Что сделано не так? Спасибо!