Проблема с LCD

gal
Offline
Зарегистрирован: 08.06.2018
Здравствуйте
Я пытаюсь добавить LCD к этой программе,  но последние две строки вызывают проблему.
Когда я включаю однлу из них, импульсы на PC13 исчезают.
Пожалуйста, помогите мне это исправить.
#include <LiquidCrystal.h>
//#include <math.h>

LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);

const int buttonPin1 = PB10;     // the number of the pushbutton1 pin
const int buttonPin2 = PB11;    // the number of the pushbutton2 pin
const int ledPin =  PC13;      // the number of the LED pin


// variables will change:
int buttonState1 = 0;         // variables for reading the pushbutton status
int buttonState2 = 0;
/////////////
float pulsewidth = 0;
float phase = 0;
////////////////
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLDOWN);
  pinMode(buttonPin2, INPUT_PULLDOWN);
  lcd.begin(16, 2);
}

void loop() {
  ///////////////
  //pulsewidth = digitalWrite (PC13, LOW );
  pulsewidth =  (ledPin, LOW);
  //////////////

  // read the state of the pushbuttons value:
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbuttons is pressed.
  // Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
  if ((buttonState1 == HIGH && buttonState2 == LOW) || (buttonState1 == LOW && buttonState2 == HIGH))
  {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }

  /////////////////////////
  lcd.setCursor(0, 0);
  //lcd.print("Ph=");
 // lcd.print( pulsewidth);

  ////////////////////////

}

 

 

VasiliyV
Offline
Зарегистрирован: 09.07.2018

Не будете ли так любезны сообщить какой микроконтроллер или плата используется? Может я чего не понимаю, но как может int принимать значение PB10?

Что делает строка 29?

gal
Offline
Зарегистрирован: 08.06.2018

STM32F103

b707
Offline
Зарегистрирован: 26.05.2017

VasiliyV пишет:

 Может я чего не понимаю, но как может int принимать значение PB10?

Что делает строка 29?

Василий, PB10 - это макрос обозначения пина для STM32Duino, как например пин А2 для Уно/Нано.

А вот строка 29 действительно интересна :))))

gal
Offline
Зарегистрирован: 08.06.2018
 
# 29  Ширина импульсовто на PC13, потом сделаю в микросекундах.
sadman41
Offline
Зарегистрирован: 19.10.2016

Все понятно. Обфускация.

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

 
# 29  Ширина импульсовто на PC13, потом сделаю в микросекундах.

просто бред.

Вы хоть чуть-чуть в Си понимаете? - имхо нет

gal
Offline
Зарегистрирован: 08.06.2018

бред или не бред, но ответа на проблему нет. 

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

бред или не бред, но ответа на проблему нет. 

а в чем заключается "импульсы на PC13 исчезают" ? Случаем не то, что pulsewidth - ноль? - он в вашем коде и должен быть ноль, всегда.

gal
Offline
Зарегистрирован: 08.06.2018

На PB10 и PB11 подаются прямоугольные импульсы, на PC 13 - их разность.

Как я уже сказал, проблема заключается в последних двух строках

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

На PB10 и PB11 подаются прямоугольные импульсы, на PC 13 - их разность.

Как я уже сказал, проблема заключается в последних двух строках

В этом коде нет и намека на вычисление разности двух импульсов. Проблема вовсе не в ЛСД, он абсолютно не при чем. Замените вывод на дисплей обычным выводом в Сериал - ситуация не изменится.

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

gal
Offline
Зарегистрирован: 08.06.2018

строка #37 вычитывает = ХОR функция

Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
На основе статуса кнопки и таблицы истинности XOR включите или выключите светодиод на выводе 13
DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

gal пишет:

строка #37 вычитывает = ХОR функция

Ты не поверишь, но в указанной строке нету ни одного XOR.

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

строка #37 вычитывает = ХОR функция

под разностью импульсов обычно понимают разность их длительности. Где тут измеряется длительность?

Или вы под разностью импульсов понимаете разность логических состояний двух входов?

Тем не менее, вы так и не ответили, в чем заключается проблема "пропадения импульсов" при подключении двух последних строк? - опишите подробно

b707
Offline
Зарегистрирован: 26.05.2017

DIYMan пишет:

Ты не поверишь, но в указанной строке нету ни одного XOR.

судя по всему, под "разностью импульсов" понимается  банальное

if (buttonStatt1 != buttonState2)

gal
Offline
Зарегистрирован: 08.06.2018

b707 пишет:

gal пишет:

На PB10 и PB11 подаются прямоугольные импульсы, на PC 13 - их разность.

Как я уже сказал, проблема заключается в последних двух строках

 Проблема вовсе не в ЛСД, он абсолютно не при чем. 

Проблема в том, что вы даже приблизительно не понимаете, что нужно написать в коде... = ?

загрузил так - импульсы есть 
 
#include <LiquidCrystal.h>
//#include <math.h>

LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);

const int buttonPin1 = PB10;     // the number of the pushbutton1 pin
const int buttonPin2 = PB11;    // the number of the pushbutton2 pin
const int ledPin =  PC13;      // the number of the LED pin


// variables will change:
int buttonState1 = 0;         // variables for reading the pushbutton status
int buttonState2 = 0;
/////////////
float pulsewidth = 0;
float phase = 0;
////////////////
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLDOWN);
  pinMode(buttonPin2, INPUT_PULLDOWN);
  lcd.begin(16, 2);
}

void loop() {
  ///////////////
  //pulsewidth = digitalWrite (PC13, LOW );
  pulsewidth =  (ledPin, LOW);
  //////////////

  // read the state of the pushbuttons value:
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbuttons is pressed.
  // Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
  if ((buttonState1 == HIGH && buttonState2 == LOW) || (buttonState1 == LOW && buttonState2 == HIGH))
  {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }

  /////////////////////////
  lcd.setCursor(0, 0);

 

загрузил так - импульсов нет 

#include <LiquidCrystal.h>
//#include <math.h>

LiquidCrystal lcd(PA0, PA1, PA2, PA3, PA4, PA5);

const int buttonPin1 = PB10;     // the number of the pushbutton1 pin
const int buttonPin2 = PB11;    // the number of the pushbutton2 pin
const int ledPin =  PC13;      // the number of the LED pin


// variables will change:
int buttonState1 = 0;         // variables for reading the pushbutton status
int buttonState2 = 0;
/////////////
float pulsewidth = 0;
float phase = 0;
////////////////
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin1, INPUT_PULLDOWN);
  pinMode(buttonPin2, INPUT_PULLDOWN);
  lcd.begin(16, 2);
}

void loop() {
  ///////////////
  //pulsewidth = digitalWrite (PC13, LOW );
  pulsewidth =  (ledPin, LOW);
  //////////////

  // read the state of the pushbuttons value:
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);
  // check if the pushbuttons is pressed.
  // Based on the pushbutton status and truth table of XOR, turn on or off the LED at Pin 13
  if ((buttonState1 == HIGH && buttonState2 == LOW) || (buttonState1 == LOW && buttonState2 == HIGH))
  {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  }
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }

  /////////////////////////
  lcd.setCursor(0, 0);
  lcd.print("Ph=");
 // lcd.print( pulsewidth);

  ////////////////////////

Разница линия # 49

b707
Offline
Зарегистрирован: 26.05.2017

я ж вам написал - опишите подробно! А вы мне снова свой код лепите.

импульсов нет - что это значит? диод не мигает?или мигает, но не с той частоой? или горит постоянно?

gal
Offline
Зарегистрирован: 08.06.2018

Я подключил осциллограф, на PC13 напряжение 0В после включения линии № 49

b707
Offline
Зарегистрирован: 26.05.2017

а если строки 48 и 49 перенести в Сетап после строки 23?

gal
Offline
Зарегистрирован: 08.06.2018

Тогда импульсы есть , но на LCD Ph=0.00

gal
Offline
Зарегистрирован: 08.06.2018

b707 пишет:

а если строки 48 и 49 перенести в Сетап после строки 23?

здесь отчет будет только один раз

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

Тогда импульсы есть , но на LCD Ph=0.00

ну, Ph то у вас так и так всегда будет ноль, ибо строка 29 ничего не меряет

gal
Offline
Зарегистрирован: 08.06.2018

А как сделать чтобы измеряла ?

sadman41
Offline
Зарегистрирован: 19.10.2016

gal пишет:

загрузил так - импульсы есть

...

загрузил так - импульсов нет 

Очередной случай проявления сущности лживого и беспринципного Си.

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

А как сделать чтобы измеряла ?

а что именно вы хотите измерить?

gal
Offline
Зарегистрирован: 08.06.2018

длину импульсов в микросекундах

gal
Offline
Зарегистрирован: 08.06.2018

длину импульсов в микросекундах

gal
Offline
Зарегистрирован: 08.06.2018

gal пишет:

длину импульсов в микросекундах

как убрать лишное сообщение ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Не писать сюда больше

gal
Offline
Зарегистрирован: 08.06.2018

DIYMan 

или так 

pinOutState = pinAState ^ pinBState;

b707
Offline
Зарегистрирован: 26.05.2017

gal пишет:

длину импульсов в микросекундах

у вас в коде, как я уже писал - нет даже намека на измерение импульсов. Вы бы хоть какой-нибудь код привели, как вы пытались это делать - или вы ждете что вам этот код с нуля напишут?

Для затравки подсказываю куда копать - надо засечь время в момент одного фронта импульса, потом дождаться второго фронта, снова засечь время и вычесть из второго времени первое. Сейчас  в коде у вас работы со временем нет вовсе.

gal
Offline
Зарегистрирован: 08.06.2018

сперва надо чтобы ЛСД  работало а потом это. 

https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/

 = Похоже на строку  #29 = не с  нуля