NeoPixel Stick en een button Code Help please

algemene C code
Berichten: 6
Geregistreerd: 05 Mrt 2014, 04:26

NeoPixel Stick en een button Code Help please

Berichtdoor bobbybrand » 05 Mrt 2014, 04:38

Hoi,

Ik ben nu een paar weken bezig met Arduino en heb nu al wat kleine projectjes achter de rug.
Nu ben ik bezig voor om voor mijn fiets een arduino aangestuurde licht set te maken. Inclusief remlicht en richting aanwijzers.

Dit is hoe ik het wil doen:
Er zijn 2 knoppen op het stuur die de richting aanwijzers moeten aansturen, dan is er een knop tussen het stuur en de rem hendel om het remlicht aan te sturen. Het voor licht en het achterlicht staan in Principe altijd aan als de aan/uit switch can de arduino aangezet is. Nu gebruik ik 2 neopixel strips voor het achterligt en de richting aanwijzers. deze strips zijn onafhangelijk van elkaar en maar zijn allebij op dezelfde rood ingesteld dus dat het lijkt dat het 1 strip is. Wanneer ik de linker knop in druk dan moet de richting aanwijzer oranje kleuren en meot deze een paar keer van rechts naar links gaan(alleen op de linker strip, dus de rechter strip blijft gewoon rood).
Ik ben kompleet nieuw met de neopixel code, en het is me nie techt gelukt om deze aan te sturen met een knop.

Ook zou ik graag willen weten of het mogelijk is om de neopixels te laten dimmen. Dus bijvoorbeeld, normaal kleuren ze rood voor 70%, dan wanneer ik de remknop gebruik gaan ze naar 100%, en wanneer het andere knipperlicht bezig is misschien zelfs nog lager dan 70%.

Dit is de code die ik nu heb, maar het lukt allemaal niet zo goed. En aangezien ik niet egt hulp kon vinden op internet zou ik graag wat hulp van jullie willen ontvangen.

Code: Alles selecteren
#include <Adafruit_NeoPixel.h>
#define PIN 6
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.
const int buttonPin = 2;
int buttonState = 0;
void setup() {
  pinMode(buttonPin, INPUT);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
 
}
void loop() {
 
 buttonState = digitalRead(buttonPin);
 
 if (buttonState == HIGH) {
 
  const int(strip.Color(255, 0, 0), 50); // Red
  colorWipe(strip.Color(240, 140, 0), 50); //Orange
}
// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}


Dit is de settup die ik nu heb, zo zal het ook op mijn fiets gemonteerd moeten worden

Afbeelding

Heel erg bedankt!!

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: NeoPixel Stick en een button Code Help please

Berichtdoor nicoverduin » 05 Mrt 2014, 09:52

Dit al eens bekeken? http://learn.adafruit.com/adafruit-neop ... no-library
Daar staat volgens mij alles wat je moet weten......
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 05 Mrt 2014, 04:26

Re: NeoPixel Stick en een button Code Help please

Berichtdoor bobbybrand » 05 Mrt 2014, 16:02

Ja dit heb ik helemaal Door gelezen. Daar heb ik ook de code op gebaseerd. Maar ik wil het op een button laten werken en dat krijg ik niet voor elkaar. En in die beschrijving staat ook niks in van hoe dit moet

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: NeoPixel Stick en een button Code Help please

Berichtdoor nicoverduin » 05 Mrt 2014, 18:31

Volgens mij staan alle functies daar in opgenomen die je kunt gebruiken voor jouw programma. Ook hoe je moet dimmen (brightness verlagen?)
Ik wil best helpen maar zoals ook bij anderen al aangegeven... eerst zelf proberen. Daar leer je van. En daar zijn forums voor.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 05 Mrt 2014, 04:26

Re: NeoPixel Stick en een button Code Help please

Berichtdoor bobbybrand » 05 Mrt 2014, 23:36

Ja dat snap ik! Oke top. Zou je mij kunnen vertellen waarom de knop funtie niet werkt? Ik heb het gevoel dat het in de goede orde staat.

De brightness enzo wil ik later aanpassen, als mijn code perfect werkt met de buttuns.

Berichten: 6
Geregistreerd: 05 Mrt 2014, 04:26

Re: NeoPixel Stick en een button Code Help please

Berichtdoor bobbybrand » 06 Mrt 2014, 03:51

Oke nu ben ik zo ver gekomen dat ik het met de button oranje krijg:

Code: Alles selecteren
#include <Adafruit_NeoPixel.h>
#define PIN 6
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

// changed number of pixels
Adafruit_NeoPixel strip = Adafruit_NeoPixel(16, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.
const int buttonPin = 2;
boolean buttonState = 0; // modified to boolean
void setup() {
  pinMode(buttonPin, INPUT);
  strip.begin();
  strip.show(); // Initialize all pixels to 'off'
 
}
void loop() {
 
 buttonState = digitalRead(buttonPin);
 
 if (buttonState == HIGH) { 
  colorWipe(strip.Color(240, 140, 0), 10); //Orange IF button is pressed
  //delay(5000);
   }
 else {
  colorWipe(strip.Color(255, 0, 0), 10); // Red rest of time
   }
 }

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}


Nu wil ik het laten knipperen. De enige mogelijkheid dat ik het weet om te laten linken is met delay. Maar anagezien ik een "else (" statement heb kan ik het alleen laten blinken als ik er een zin voor uitschrijf. Hoop dat dit een beetje duidelijk overkomt.

Dit is hoe ik het nu laat blinken:

Code: Alles selecteren
colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 0); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 0); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);
  colorWipe(strip.Color(0, 0, 0), 0); //Blink
  delay(200);
  colorWipe(strip.Color(240, 140, 0), 00); //Orange IF button is pressed
  delay(200);

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: NeoPixel Stick en een button Code Help please

Berichtdoor nicoverduin » 06 Mrt 2014, 10:10

Ja kan even goed blinken hoor:

variabelen:
Code: Alles selecteren
#define BLINK_TIME 1000L     // om de seconde wisselen LEDS aan/uit

boolean         blink       = false; // geeft aan of de LEDS aan of uit moeten (true is aan)
unsigned long blinkTime = 0L;    // timer voor knipper tempo


loop()
Code: Alles selecteren
 if (buttonState == HIGH) {
    //
    // er is een knop ingedrukt. Maar check eerst of we de leds aan of uit moeten zetten
    //
    if (millis() > blinkTime){
      //
      // we moeten switchen
      //
      blink = !blink;
      blink = millis() + BLINK_TIME;
   }
   //
   // zet de leds aan/uit afhankelijk van blink
   //
   if (blink) {
     colorWipe(strip.Color(240, 140, 0), 10); //Orange Light on
   } else {
     colorWipe(strip.Color(0, 0, 0), 0);        //LEDS off
   }
 } else {
  colorWipe(strip.Color(255, 0, 0), 10); // Red rest of time
 }
}

Kan zijn dat er nog een compilatie fout in zit. Heb het ff niet getest.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 6
Geregistreerd: 05 Mrt 2014, 04:26

Re: NeoPixel Stick en een button Code Help please

Berichtdoor bobbybrand » 07 Mrt 2014, 06:37

Bedankt voor de reacties!!! :D

Ik ben vandaag bezig geweest met de code en ben een aantal stappen verder gekomen.
Nu zit ik alleen met een probleem: op regel 79 geeft hij nu een error; expected unqualified-id before 'if'

Wat betekend dit en hoe kan ik dit oplossen?

Ook vraag ik mij af of deze code niet gaat glitchen, omdat er zo veel 'if' en 'else' statements in staan met de buttons. Bijvoorbeeld, als ik de knipperlichten naar links heb aan staan en ik druk de rem in, wat gebeurt er dan? Moet ik hiervoor iets speciaals schrijven??

Bedankt al vast!!! :mrgreen:

Code: Alles selecteren
#include <Adafruit_NeoPixel.h>
//#define PIN 6
//#define PIN 5
// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 2000 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.
// changed number of pixels
Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(24, 5);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(24, 6);

const int buttonPinL = 2;
const int buttonPinR = 3;
boolean buttonStateL = 0; // modified to boolean
boolean buttonStateR = 0; // modified to boolean

const int brakebuttonPin = 4;
boolean buttonStateBrake = 0; // modified to boolean

const int frontPin = 13;

void setup() {
  pinMode(buttonPinL, INPUT);
  pinMode(buttonPinR, INPUT);
  pinMode(brakebuttonPin, INPUT);
  pinMode(frontPin, OUTPUT);
  strip_a.begin();
  strip_a.show(); // Initialize all pixels to 'off'
  strip_b.begin();
  strip_b.show(); // Initialize all pixels to 'off'
 
}
void loop() {
 
 buttonStateL = digitalRead(buttonPinL);
 buttonStateR = digitalRead(buttonPinR);
 buttonStateBrake = digitalRead(brakebuttonPin);
 
 digitalWrite(frontPin, HIGH); 
 
 if (buttonStateL == HIGH) {
   for(int i=0; i<10; i++) {
    strip_a.setBrightness(255);  // set brithness of backlight to full
    strip_b.setBrightness(128);  // dim brithness of opposite stick
    colorWipeL(strip_a.Color(240, 140, 0), 10); //Orange IF button is pressed
    delay(20);
    colorWipeL(strip_a.Color(0, 0, 0), 0); //Blink
    delay(20);   
   }
   }
 else {
  strip_a.setBrightness(192); // set brithness of backlight to 3/4
  colorWipeL(strip_a.Color(255, 0, 0), 50); // Red rest of time
   }
   
    if (buttonStateR == HIGH) {
   for(int i=0; i<10; i++) {
    strip_b.setBrightness(255); // set brithness of backlight to full
    strip_a.setBrightness(128);  // dim brithness of opposite stick
    colorWipeR(strip_b.Color(70, 140, 0), 10); //Orange IF button is pressed
    delay(20);
    colorWipeR(strip_b.Color(0, 0, 0), 0); //Blink
    delay(20);   
   }
   }
 else {
  strip_b.setBrightness(192); // set brithness of backlight to 3/4
  colorWipeR(strip_b.Color(255, 0, 0), 50); // Red rest of time
   }
 }
 if (buttonStateBrake == HIGH) {
   for(int i=0; i<10; i++) {
    strip_b.setBrightness(255); // set brithness of backlight to full
    strip_a.setBrightness(255);  // dim brithness of opposite stick
    colorWipeR(strip_b.Color(255, 0, 0), 10); //Orange IF button is pressed
   }
   }
// else {
//  strip_b.setBrightness(192); // set brithness of backlight to 3/4
//  colorWipeR(strip_b.Color(255, 0, 0), 10); // Red rest of time
   }
 }
// Fill the dots one after the other with a color
void colorWipeL(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip_a.numPixels(); i++) {
      strip_a.setPixelColor(i, c);
      strip_a.show();
      delay(wait);
  }
}

// Fill the dots one after the other with a color
void colorWipeR(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip_b.numPixels(); i++) {
      strip_b.setPixelColor(i, c);
      strip_b.show();
      delay(wait);
  }
}

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: NeoPixel Stick en een button Code Help please

Berichtdoor nicoverduin » 07 Mrt 2014, 09:19

bobbybrand schreef:Bedankt voor de reacties!!! :D

Ik ben vandaag bezig geweest met de code en ben een aantal stappen verder gekomen.
Nu zit ik alleen met een probleem: op regel 79 geeft hij nu een error; expected unqualified-id before 'if'

Wat betekend dit en hoe kan ik dit oplossen?

Die fout krijg je (terecht) omdat je open en sluit accolades niet meer kloppen. Je doet er verstandig aan om de code wat netter te houden met inspringen zodat je precies kan zien waar accolades openen en sluiten. Dan ontdek je gauw genoeg waar het mis gaat. Overigens heeft de IDE een functie om de code enigzins op te knappen ( CTRL + T).

bobbybrand schreef:Ook vraag ik mij af of deze code niet gaat glitchen, omdat er zo veel 'if' en 'else' statements in staan met de buttons. Bijvoorbeeld, als ik de knipperlichten naar links heb aan staan en ik druk de rem in, wat gebeurt er dan? Moet ik hiervoor iets speciaals schrijven??

Jij bent de programmeur. Dus jij bepaalt wat het programma moet doen. Niet andersom (hopelijk).
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten