Помогите правильно сделать программу
- Войдите на сайт для отправки комментариев
Чт, 28/06/2018 - 23:04
Здравствуйте я новичок в программировании и на этом сайте впервые. Вообщем, я делаю проект для школы-парктроник. Он должен выводить на дисплей 16х2 измерения сразу с 3 датчиков ультразвука. На дисплее должно показываться
| LEFT:расстояние MID:расстояние|
| RIGHT:расстояние |
(так это должно выглядеть на дисплее)
Но вместо MID пишутся нули которые не меняют значения просто нули. Объясните пожалуйста в чем причина.
Вот и сама программа
#include <LiquidCrystal.h>
#include <Ultrasonic.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs,en,d4,d5,d6,d7);
Ultrasonic ultrasonic1 (6,13);
Ultrasonic ultrasonic2 (8,7);
Ultrasonic ultrasonic3 (9,1);
int buzzer = 10;
void setup() {
Serial.begin (9600);
lcd.begin(16,2);
lcd.print ("LEFT:");
lcd.setCursor(9,0);
lcd.print ("MID:");
lcd.setCursor(0,1);
lcd.print ("RIGHT:");
pinMode (buzzer,OUTPUT);
// put your setup code here, to run once:
}
void loop() {
float dist_cm1 = ultrasonic1.Ranging(CM);
lcd.setCursor(5,0);
lcd.print (dist_cm1);
float dist_cm2 = ultrasonic2.Ranging(CM);
lcd.setCursor(13,0);
lcd.print (dist_cm2);
float dist_cm3 = ultrasonic3.Ranging(CM);
lcd.setCursor(7,1);
lcd.print (dist_cm3);
if (dist_cm1,dist_cm2,dist_cm3 < 20){
tone (buzzer, 500);
delay (300);
tone (buzzer, 500);
delay (300);
if (dist_cm1,dist_cm2,dist_cm3 < 40){
tone (buzzer, 500);
delay (600);
tone (buzzer, 500);
delay (600);
if (dist_cm1,dist_cm2,dist_cm3 < 60) {
tone (buzzer, 500);
delay (1000);
tone (buzzer, 1000);
delay (1000);}
// put your main code here, to run repeatedly:
}}}
Заранее спасибо за помощь
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
pitiol, Ultrasonic, Newping и т. п. библиотеки для датчиков типа HCSR-04 правильно работают только на ext-interrupt совместимых входах, у Uno/Nano плат это D2 и D3. Можете соединить входы TRIG и ECHO у всех трёх модулей вместе, и повесить на два конкретных вывода (очевидно, ECHO на D2 или D3). Тогда можно будет выкинуть два экземпляра класса датчика, и читать это как один и тот же датчик, а датчики коммутировать по питанию. Отключать надо плюс (провод Vcc), а не землю - это делается PNP или p-FET транзистором.
Алсо, замените
на просто
Вы бесполезно расходуете 12 байт оперативной памяти.
Вуду, ты зачем пятикласснику про мосфеты задвигаешь?)) Скорее всего там что-то простое типа оторвавшегося провода.
Употребляемые мной термины легко гуглятся. Пусть учатся.
Пусть учатся.
Щас это не модно.
Пусть учатся.
Ты шо? Это же читать надо уметь.
Алсо, замените
на просто
Вы бесполезно расходуете 12 байт оперативной памяти.
В исходном варианте прекрасно видно, что означает каждая из цифр.
В новом - это просто цифры, и в следующий раз, читая этот скетч, обязательно придётся потратить какое-то время на "расшифровывание" этой строчки.
Что лучше - тратить байты, или тратить своё время - каждый решает сам. К тому же, в данном случае, значения явно прописаны как const, и скорее всего ни один вменяемый компилятор выделять под них память не будет.
А вообще, чтобы уж ни у кого не возникало сомнений, почему бы не писать это всё дефайном: #define rs 12
Datak, а если почаще работать с экранами на HD44780 - то в голове отложится, что пины обявляются в порядке RS, E, D4..D7. Define логично, но раз такая пьянка - можно и комментарий написать, бонусом займёт одну строку, а не шесть. Я его не пишу т. к. помню порядок.
После причастных оборотов употреблять глагол в инфинитивной форме - это тоже ошибка, кстати. Правильная формулировка - "во время чтения (...) скетча (...) придётся тратить ...". Или "читая (...) скетч, его автор будет вынужден [благополучно пропущенный в предложении] тратить (...)". Будем дальше тупой срач продолжать, или выждем автора? pitiol, приём.
Datak, а если почаще работать с экранами на HD44780 - то в голове отложится, что пины обявляются в порядке RS, E, D4..D7.
Я писал как раз о тех, кто с экранами HD44780 ни разу не работал. О себе, то есть.
Никого ничем задеть не хотел, сраться не планировал - это, вообще, не мой стиль.
Если что-то получилось кривовато - мои извинения.
По филологиченскому вопросу - я просто в шоке. Вряд ли получится принять это сразу. Но я буду думать. ))
Если что-то получилось кривовато - мои извинения.
Да совершенно всё нормально, вот и Вуду кой-чего новое узнал и вы не сомневайтесь, что именованные константы отличаются от неименованных только наличием имени, а не способом обработки, то есть всегда будут подставлены по значению с контролем типа и правильной арифметикой) В ассемблере имён уже не будет.
Дифайны вместо именованных констант это тоже ужасно, их существование - "эхо войны".