Witam
Zacząłem budowę motocykla elektrycznego ale takiego z pompą więc wymarzył mi się cyfrowy licznik. Kupiłem Nextion 7" i Arduino Uno , czujnik światła, styczniki itd. Zrobiłem sobie rzeczy w wyświetlaczu, w Arduino zaprogramowałem sobie czujnik światła żeby odpalał diodę z innego portu i to działa. Nie mogę jednak zrobić tak, że jeśli ta dioda się zapala to na wyświetlaczu świeci się kontrolka. Może ktoś zna dobry kod na to? przeszukałem internet i odpalanie rzeczy podpiętych pod arduino przyciskiem z Nextion jest ale w odwrotną stronę już gorzej.
Zakładając dla potrzeb nauki, że kontrolką jest na przykład Dual-state button. Czyli może przyjmować dwa stany - wciśnięty i niewciśnięty. Wciśnięty ma kolor zielony, a niewciśnięty kolor szary.
Button nosi nazwę na przykład bt0. Czyli bt0 może przyjmować w systemie dwie wartości bt0.val=0 (wtedy jest szary), oraz bt0.val=1 (wtedy jest zielony).
Jeśli chcesz ustawić przycisk na szaro, kod będzie wyglądał tak:
Kod:
Serial.print("bt0.val=");
Serial.print(0);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
A j
eśli na zielono, to kod będzie wyglądał tak:
Kod:
Serial.print("bt0.val=");
Serial.print(1);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Oczywiście, zamiast printować jakieś cyferki, możesz wysyłać zmienne.
Zasada jest zawsze taka sama: najpierw wysyłasz informację o jaką zmienną i jaki obiekt ci chodzi, potem wysyłasz jej wartość,
a na koniec trzy razy Serial.write(0xff).
A wcześniej nie potrzeba żadnych dodatkowych komend żeby zainicjować komunikację między Nextion, a Arduino? Mówiąc wprost żeby Nextion słuchał
On słucha domyślnie na BAUD9600, więc piszesz w setup() Serial.begin(9600);
No ale jak czytasz z Nextiona, to pewnie masz ustawione.
"Serial.print("bt0.val=")"
Podaje się bt0.val=" zmienna" 0xff 0xff 0xff
Zapominałeś o ""
(09-02-2022, 21:37)Jarewa0606 napisał(a): [ -> ]"Serial.print("bt0.val=")"
Podaje się bt0.val=" zmienna" 0xff 0xff 0xff
Zapominałeś o ""
A, tak. Sorry zapomniałem o cudzysłowie.
Dobra odpaliłem ten kod i dalej to samo czyli nic nie odpala. Oto mój kod na czujnik zmierzchu i na przycisk bt0
Kod:
#include <Wire.h>;
#include <BH1750.h>;
int TRIGGER = 12;
BH1750 lightMeter;
char buffer[100] = {0};
void setup(){
Serial.begin(9600);
Wire.begin();
lightMeter.begin();
Serial.println("Running...");
pinMode (TRIGGER,OUTPUT);
}
void loop() {
float lux = lightMeter.readLightLevel();
Serial.print("Light: ");
Serial.print(lux);
Serial.println(" lx");
delay(250);
if (lux < 50)
{
Serial.print("bt0.val=");
Serial.print(1);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
digitalWrite(TRIGGER, HIGH);
Serial.println("lamp is ON");
}
else {
Serial.print("bt0.val=");
Serial.print(0);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
digitalWrite(TRIGGER, LOW);
Serial.println("lamp is OFF");
}
}
Na symulatorze pojawia się w MCU bt0=1 ale nic z przyciskiem nie robi
No bo, jak zauważył Jarewa0606, te wartości wysyłasz w cudzysłowie .
Czyli zamiast tego:
Serial.print(1);
wyślij to:
Serial.print("1");
mi się wydaje że musi w hexie bo ja tak robiłem..
Wiec powinno być tak
Serial.print("bt0.val=");
Serial.write(0x22);
Serial.print(0);
Serial.write(0x22);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
Bo Serial.print("1"); przyjmie jedynkę jako tekst dobrze myślę??
Ogólnie ja to formatowałem sobie i nie korzystałem z bibliteki...
Kod:
char hTemp[5];
dtostrf(_h_, 4, 0, hTemp);
byte przed_htemp[] = {0x74, 0x48, 0x75, 0x6d, 0x69, 0x64, 0x69, 0x74, 0x79, 0x2e, 0x74, 0x78, 0x74, 0x3d, 0x22};
byte po_htemp[] = {0x22, 0xff, 0xff, 0xff };
Serial.write(przed_htemp, 15);
Serial.print(hTemp);
Serial.write(po_htemp, 4);
Hex jest dla mnie czarna magią. Ale zaraz spróbuję zobaczę co z tego wyjdzie.