• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Licznik cyfrowy do motocykla
#1
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.
 
Odpowiedź
#2
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 jeś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).
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#3
A wcześniej nie potrzeba żadnych dodatkowych komend żeby zainicjować komunikację między Nextion, a Arduino? Mówiąc wprost żeby Nextion słuchał
 
Odpowiedź
#4
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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#5
"Serial.print("bt0.val=")"

Podaje się bt0.val=" zmienna" 0xff 0xff 0xff

Zapominałeś o ""
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#6
(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.
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#7
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


Załączone pliki Miniatury
   
 
Odpowiedź
#8
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");
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.

[Obrazek: SsIndaG.jpg]
 
Odpowiedź
#9
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);
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#10
Hex jest dla mnie czarna magią. Ale zaraz spróbuję zobaczę co z tego wyjdzie.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości