Stránka 1 z 1

Přepínač x LCD displej

Napsal: 11 zář 2018, 12:18
od PeNav
Dobrý den,

asi budu nazván lamou, ale bojuji s otočným přepínačem a funkcemi. Mám tři funkce
1, poloha 1. - LCD píše "Něco"
2, poloha 2. - ohmmetr ( klasický analogový vstup)
3, poloha 3. - měření TC s max6675

Problém, je, když už se mi podaří naprogromovat všechny funkce, tak se mi na LCD displeji všechny překrývají.

Děkuji za radu

Re: Přepínač x LCD displej

Napsal: 11 zář 2018, 12:51
od ohruska
Asi by to chtělo zdroják.

Re: Přepínač x LCD displej

Napsal: 11 zář 2018, 13:46
od gilhad
lama dotaz - kdyz to prepnes, smazes ten lcd display?

Re: Přepínač x LCD displej

Napsal: 12 zář 2018, 18:32
od PeNav
Nechtěl jsem se dostat, do situace, kdy budu číst, že jsem idiot, jen se snažím naučit. Je to slátanina, chtěl bych vědět, jestli to pujde dát nějak dohromady, pokoušel jsem se na netu hledat podobné řešení, ale nikde nic

Zdroj:

//LCD Nastavení PINŮ
#include <Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7

#include <max6675.h>
//Nastavení pinů MAX6675
int pinSO = 13;
int pinCS = 12;
int pinSCK = 11;
MAX6675 termoclanek(pinSCK, pinCS, pinSO);
// Ohm Metr
float v1, Rtest, Rrefer = 100;
float v2, current;
float v3, power;



int System1 = 9;
int System2 = 10;
int System3 = 11;

// LCD
uint8_t degree[8] = {140,146,146,140,128,128,128,128};
int TC;
int Mold;
int Cable;

void setup()
{
Serial.begin(9600);

//Přepnutí Funkce
pinMode(System1,INPUT_PULLUP);
pinMode(System2,INPUT_PULLUP);
pinMode(System3,INPUT_PULLUP);





}

void loop()

{



///////////////////-System1-/////////////////////
if (digitalRead(System1))
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cable");
}



///////////////////-System2-/////////////////////

if (digitalRead(System2))

{
{
lcd.clear();
lcd.begin(16, 2);

lcd.print("Mold");
}

{

v1 = analogRead(A0);
v1 = v1 * (5.0 / 1023.0);
Rtest = (5 - v1) * Rrefer / v1;
v2 = (400 / Rtest);
v3 = v2 * 400;


lcd.setCursor(8, 0);

lcd.print(Rtest);
lcd.print("ohm");
delay(1000);
}

}






///////////////////-System3-/////////////////////


if (digitalRead(System3)){


lcd.clear();
lcd.setCursor(0,1);
lcd.print(termoclanek.readCelsius());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print("C ");
lcd.print(termoclanek.readFahrenheit());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print('F');

delay(1000);
}
}

Re: Přepínač x LCD displej

Napsal: 12 zář 2018, 20:20
od martinius96
Je jasné, kde je chyba ;)
Všetky vstupy máš na pullup, to znamená, že sú v normálovom zapojení na 5V (HIGH) interne a aby sa vykonala zmena stavu, musíš priviesť GND, aby sa načítala hodnota 0V (GND).
Nakoľko máš stále všetky vstupy na pullupe, všetky if podmienky sa vykonávajú v každej slučke, preto ti to skáče jedno cez druhé..

Re: Přepínač x LCD displej

Napsal: 12 zář 2018, 20:23
od SkullKeep
Jak to studuju tak tak nikde nevidím negaci ostatních vstupů a podle mne chybí u podmínky vykřičník jako negace čtení vstupu.

Re: Přepínač x LCD displej

Napsal: 12 zář 2018, 20:44
od martinius96
Opačná logika podmienok:

Kód: Vybrat vše

#include <Wire.h>
#include<LiquidCrystal.h>
LiquidCrystal lcd(2,3,4,5,6,7); //rs,e,d4,d5,d6,d7

#include <max6675.h>
//Nastavení pinů MAX6675
int pinSO = 13;
int pinCS = 12;
int pinSCK = 11;
MAX6675 termoclanek(pinSCK, pinCS, pinSO);
// Ohm Metr
float v1, Rtest, Rrefer = 100;
float v2, current;
float v3, power;



int System1 = 9;
int System2 = 10;
int System3 = 11;

// LCD
uint8_t degree[8] = {140,146,146,140,128,128,128,128};
int TC;
int Mold;
int Cable;

void setup()
{
Serial.begin(9600);

//Přepnutí Funkce
pinMode(System1,INPUT_PULLUP);
pinMode(System2,INPUT_PULLUP);
pinMode(System3,INPUT_PULLUP);





}

void loop()

{



///////////////////-System1-/////////////////////
if (!digitalRead(System1))
{ 
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Cable");
}



///////////////////-System2-/////////////////////

if (!digitalRead(System2))

{
{ 
lcd.clear();
lcd.begin(16, 2);

lcd.print("Mold");
}

{

v1 = analogRead(A0);
v1 = v1 * (5.0 / 1023.0);
Rtest = (5 - v1) * Rrefer / v1;
v2 = (400 / Rtest);
v3 = v2 * 400;


lcd.setCursor(8, 0);

lcd.print(Rtest);
lcd.print("ohm");
delay(1000);
}

}






///////////////////-System3-/////////////////////


if (!digitalRead(System3)){ 


lcd.clear();
lcd.setCursor(0,1);
lcd.print(termoclanek.readCelsius());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print("C ");
lcd.print(termoclanek.readFahrenheit());
#if ARDUINO >= 100
lcd.write((byte)0);
#else
lcd.print(0, BYTE);
#endif
lcd.print('F');

delay(1000);
}
}

Re: Přepínač x LCD displej

Napsal: 13 zář 2018, 16:49
od PeNav
Děkuji moc, už to klape