My code only updates the display when the twist dial is moved, and it sometimes misses bytes or something and the display updates incorrectly or does not update. A second update fixes it.
Artemis Nano BLE.
What can I do to improve this? speed 10,000 doesn't work.
#include <Wire.h>
#include "SparkFun_Qwiic_Twist_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_Twist
#include "Qwiic_LED_Stick.h" // Click here to get the library: http://librarymanager/All#SparkFun_Qwiic_LED_Stick
LED LEDStick;
TWIST twist;
const byte twistInterruptPin = 4; //Can be any GPIO
void setup() {
Wire.begin();
Wire.setClock(100000);
Serial.begin(115200);
pinMode(twistInterruptPin, INPUT_PULLUP);
if(twist.begin() == false)
{
Serial.println("Twist does not appear to be connected. Please check wiring. Freezing...");
while(1);
}
int currentVersion = twist.getVersion();
if (currentVersion < 0x0201) //v1.2 in two byte form
{
Serial.print("The current firmware version is: ");
Serial.print(currentVersion & 0xFF);
Serial.print(".");
Serial.println(currentVersion >> 8);
Serial.println("This feature is not supported. Please consider upgrading the firmware on your Qwiic Twist. Freezing.");
while (1); //Freeze
}
twist.setLimit(100);
twist.connectRed(0);
twist.connectGreen(0);
twist.connectBlue(0);
twist.setColor(0, 0, 0); //Set Red and Blue LED brightnesses to half of max.
//Start up communication with the LED Stick
if (LEDStick.begin() == false){
Serial.println("Qwiic LED Stick failed to begin. Please check wiring and try again!");
while(1);
}
LEDStick.LEDOff();
}
void setArray(uint8_t* arr, int twistFraction) {
for (int i=0; i<10; i++) {
arr[i] = twistFraction >= i ? 255 : 0;
}
}
void loop() {
if (digitalRead(twistInterruptPin) == LOW)
{
int twistCount = twist.getCount();
int twistFraction = (twistCount/10);
Serial.print("Count: ");
Serial.print(twistCount);
Serial.println();
Serial.print("Fraction: ");
Serial.print(twistFraction);
Serial.println();
if(twist.isMoved())
{
Serial.print("Moved Count:");
Serial.print(twistCount);
Serial.println();
twist.clearInterrupts(); //Clear any interrupt bits
twist.setColor(0, 0, (twistCount/100)*255);
byte redArray[10] = {0,0,0,0,0,0,0,0,0,0};
byte blueArray[10] = {0,0,0,0,0,0,0,0,0,0};
byte greenArray[10] = {0,0,0,0,0,0,0,0,0,0};
setArray(blueArray, twistFraction);
LEDStick.setLEDColor(redArray, greenArray, blueArray, 10);
}
if(twist.isPressed())
{
Serial.print("Pressed");
}
if(twist.isClicked())
{
Serial.print("Clicked!");
}
Serial.println();
}
}
My code only updates the display when the twist dial is moved, and it sometimes misses bytes or something and the display updates incorrectly or does not update. A second update fixes it.
Artemis Nano BLE.
What can I do to improve this? speed 10,000 doesn't work.