[arduino + esp2866] via wifi (page) led strip besturen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Jboy1991
  • Registratie: September 2012
  • Laatst online: 30-09 08:37
Goedendag tweakers,

Ik zit op dit moment even vast met de volgende situatie:

Op dit moment heb ik de esp (NodeMCU verbonden via serialpin aan de arduino. Ik wil dus de leds aansturen vanaf de arduino.

Alle effecten wil ik dus ook uitvoeren op deze arduino (dus dat de esp een commando stuurt naar de arduno).

Op dit moment werkt het gedeelte. Echter je kan geen loop onderbreken. Dus wanneer er een effect bezig is in een loop, ontvangt hij geen nieuwe effect commando.

Nu kan ik in elke loop wel lopen checken of er serial data binnen komt maar dit lijkt mij niet de juist oplossing.

Heeft iemand hiervoor nog tips? of is de arduino & esp te beperkt om dit doen? (te beperkt omdat je maar 1 hoofd loop hebt en daarin eigenlijk alles doet).

Acties:
  • 0 Henk 'm!

  • de_marvin
  • Registratie: Mei 2008
  • Laatst online: 25-09 10:17

de_marvin

You gotta love muffin's!

Ik denk dat je zoekt naar een Interupt. Kijk hier eens: http://playground.arduino.cc/code/interrupts

Acties:
  • +1 Henk 'm!

  • Vuikie
  • Registratie: December 2003
  • Laatst online: 01-10 08:22
Je kan op de ESP gebruik maken van de ticker library Dit is een relatief makkelijke manier om meerdere 'threads' te maken binnen de RTOS wat stiekum bij ESP-Arduino op de achtergrond draait.

Acties:
  • 0 Henk 'm!

  • BastiaanCM
  • Registratie: Juni 2008
  • Laatst online: 01-10 09:06
Vuikie schreef op vrijdag 4 januari 2019 @ 12:17:
Je kan op de ESP gebruik maken van de ticker library Dit is een relatief makkelijke manier om meerdere 'threads' te maken binnen de RTOS wat stiekum bij ESP-Arduino op de achtergrond draait.
Het kan prima, ik zou inderdaad ook gebruik maken van Ticker. Sterker nog - dat doe ik ook.

Acties:
  • 0 Henk 'm!

  • Jboy1991
  • Registratie: September 2012
  • Laatst online: 30-09 08:37
Ik heb hierna gekeken alleen begrijp ik het niet helemaal. Via de esp zend ik bijv "ledstrip state=on". Maar na een intterupt is dit niet meer te lezen.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void setup(){
  pinMode(ledPin, OUTPUT);
      Serial.begin(115200);
   ArduinoUno.begin(115200);
   pinMode(8,OUTPUT);

   
 

      FastLED.addLeds<WS2811, ledPin, GRB>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );

    FastLED.setBrightness(BRIGHTNESS);
  
  attachInterrupt(digitalPinToInterrupt(interruptPin), handleInterrupt, FALLING);
 
  }

  void handleInterrupt() {
 
  trigger++;

      
}
void loop(){

if(trigger != old_trigger)
{
   if(ArduinoUno.available())
    {
        Serial.println("change effect aangeroepen");
      String content = "";
char character;
     while(ArduinoUno.available()) {
      character = ArduinoUno.read();
      content.concat(character);
  }

        Serial.println(content);
    }
 old_trigger = trigger; 
}
    

}


Dit is de serial input:
14:21:00.212 -> change effect aangeroepen
14:21:00.212 -> f⸮⸮rm`⸮,⸮cs
14:21:01.592 -> change effect aangeroepen
14:21:01.592 -> f⸮⸮rm`⸮,⸮⸮
14:21:02.485 -> change effect aangeroepen
14:21:02.485 -> f⸮⸮rm`⸮,⸮=⸮f
14:21:03.447 -> change effect aangeroepen
14:21:03.447 -> f⸮⸮rm`⸮,⸮=⸮
14:21:04.446 -> change effect aangeroepen
14:21:04.446 -> f⸮⸮rm ⸮,⸮=⸮c

[ Voor 19% gewijzigd door Jboy1991 op 05-01-2019 14:21 ]


Acties:
  • 0 Henk 'm!

  • electropruts
  • Registratie: Maart 2006
  • Laatst online: 19:11
Jboy1991 schreef op donderdag 3 januari 2019 @ 20:23:
Nu kan ik in elke loop wel lopen checken of er serial data binnen komt maar dit lijkt mij niet de juist oplossing.
Ik heb weinig ervaring met Arduino's, en maar een beetje 'pruts'ervaring met ESP's, maar persoonlijk zou ik het seriele-luister gedeelte wel in de loop zetten. Wat mij betreft (maar ik sta open voor betere suggesties) is alles wat je maar eenmalig wilt uitvoeren voor in de setup, en alles wat je vaker wilt doen voor in de loop. Dit zorgt er natuurlijk wel voor dat je cycle tijd (tijd om de loop te herhalen) iets langer wordt. Ik heb geen ervaring met het ontvangen van seriele berichten, maar denk dat dit een vrij kort commando is, en het dus weinig invloed heeft.

Wanneer dit commando wel lang kan duren (ik merkte dit bijvoorbeeld op wanneer ik een TCP verbinding probeer op te bouwen met een niet draaiende C# applicatie, duurde enkele seconden), gaat dit niet werken omdat je effect dan niet meer werkt.

Een interrupt kan natuurlijk ook, maar wat mij betreft is een interrupt meer handig wanneer je iets wilt doen wat sneller moet reageren dan je cycletijd. En dat lijkt me hier niet van toepassing, aangezien het geen zin heeft om sneller commando's te kunnen ontvangen dan je ze kunt uitvoeren.

Hoop dat dit helpt. Moet zeggen dat ik voornamelijk spreek vanuit mijn PLC achtergrond, dus het kan goed zijn dat ik de plank op microcontroller gebied mis sla :-).


EDIT: ik realiseer me ineens dat een interrupt natuurlijk ook wel handig is wanneer je een signaal verwacht wat zo kort is dat deze mogelijk gemist kan worden wanneer je hem in je loop zet. Ik weet niet hoe de arduino omgaat met seriele communicatie, dus weet niet of dat hier van toepassing is.

Ik vond nog deze link: https://www.arduino.cc/re...terrupts/attachinterrupt/

Hieruit begrijp ik dat je interrupt door een pin getriggered moet worden (logisch, moet ergens op reageren), en dat dit niet bij elke arduino zomaar elke pin kan zijn. Misschien helpt dit?

[ Voor 16% gewijzigd door electropruts op 06-01-2019 14:43 ]

Hmm, eens kijken hoe lang hij het nu blijft doen...

Pagina: 1