02-04-2016, 02:17
Tu masz mniej więcej jak sobie poradzić z nieliniowością ale będziesz musiał grzać czujniki , zrobić wykres i powstawiać sobie dane do zmiennych a1,b1,c1,d1 . Jakbyś nie zrozumiał to pytaj bo jest 3 w nocy i nie bardzo już mi się chce rozpisywać .
Kod:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int a1[7] = { 0,0,100,200,300,400,500 }; // zakres poziom niski
int b1[7] = { 0,100,200,300,400,500,600 }; // zakes poziom wysoki
int c1[7] = { 0,-20,-10,0,10,20,30 }; // przedział temperatury od
int d1[7] = { 0,-10,0,10,20,30,40 }; // przedział temperatury do
byte ac;
void setup() {
lcd.begin(16, 2);
pinMode(10,OUTPUT);
}
void loop() {
if (analogRead(A0) < 500){digitalWrite(10,HIGH);}
int term1 = analogRead(A1);
int term2 = analogRead(A2);
if (term1 == 0 and term1 <= 100 ){ac = 1;} // odczyt temp 1 i pzydzielenie zakresu 1
if (term1 > 100 and term1 <= 200 ){ac = 2;} // odczyt temp 1 i pzydzielenie zakresu 2
if (term1 > 200 and term1 <= 300 ){ac = 3;} // odczyt temp 1 i pzydzielenie zakresu 3
int a = a1[ac];int b = b1[ac]; // przeliczenia zakresów
int c = c1[ac];int d = d1[ac]; //
int temp1 = map(term1,a,b,c,d); // mapowanie wedłóg ustalonych zakresów
int temp2 = map(term2,a,b,c,d);
lcd.setCursor(2,0);
lcd.print(temp1);lcd.print(" C"); // wynik
lcd.setCursor(2,1);
lcd.print(temp2);lcd.print(" C");
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji